create-svc 0.1.10 → 0.1.12

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 (171) hide show
  1. package/README.md +51 -47
  2. package/index.ts +2 -2
  3. package/package.json +10 -9
  4. package/src/cli.test.ts +28 -10
  5. package/src/cli.ts +196 -33
  6. package/src/git-bootstrap.test.ts +40 -0
  7. package/src/git-bootstrap.ts +110 -0
  8. package/src/naming.test.ts +1 -0
  9. package/src/naming.ts +23 -0
  10. package/src/post-scaffold.test.ts +19 -0
  11. package/src/post-scaffold.ts +17 -4
  12. package/src/profiles.ts +2 -5
  13. package/src/scaffold.test.ts +232 -41
  14. package/src/scaffold.ts +81 -36
  15. package/src/service.test.ts +30 -0
  16. package/src/service.ts +65 -0
  17. package/src/vault.test.ts +61 -1
  18. package/src/vault.ts +77 -15
  19. package/templates/shared/.github/workflows/ci.yml +2 -1
  20. package/templates/shared/.github/workflows/deploy.yml +2 -0
  21. package/templates/shared/README.md +124 -47
  22. package/templates/shared/grafana/alerts.yaml +54 -0
  23. package/templates/shared/grafana/waitlist-dashboard.json +63 -0
  24. package/templates/shared/scripts/authctl.ts +231 -0
  25. package/templates/shared/scripts/cloudrun/bootstrap.ts +14 -5
  26. package/templates/shared/scripts/cloudrun/cleanup.ts +64 -4
  27. package/templates/shared/scripts/cloudrun/cli.ts +329 -7
  28. package/templates/shared/scripts/cloudrun/config.ts +11 -4
  29. package/templates/shared/scripts/cloudrun/deploy.ts +0 -4
  30. package/templates/shared/scripts/cloudrun/lib.ts +174 -41
  31. package/templates/shared/scripts/cloudrun/neon.ts +45 -0
  32. package/templates/shared/scripts/dev.ts +22 -0
  33. package/templates/shared/scripts/ensure-local-db.ts +3 -0
  34. package/templates/shared/scripts/local-docker.ts +63 -0
  35. package/templates/shared/scripts/local-env.ts +27 -0
  36. package/templates/shared/scripts/seed.ts +73 -0
  37. package/templates/shared/scripts/wait-for-db.ts +32 -0
  38. package/templates/shared/service.config.ts +59 -0
  39. package/templates/shared/service.yaml +24 -44
  40. package/templates/targets/workers/.github/workflows/ci.yml +19 -0
  41. package/templates/targets/workers/.github/workflows/deploy.yml +19 -0
  42. package/templates/targets/workers/Makefile +33 -0
  43. package/templates/targets/workers/README.md +75 -0
  44. package/templates/targets/workers/package.json +35 -0
  45. package/templates/targets/workers/scripts/workers/cli.ts +402 -0
  46. package/templates/targets/workers/src/auth.ts +178 -0
  47. package/templates/targets/workers/src/index.ts +198 -0
  48. package/templates/targets/workers/src/storage.ts +370 -0
  49. package/templates/targets/workers/test/app.test.ts +108 -0
  50. package/templates/targets/workers/tsconfig.json +11 -0
  51. package/templates/targets/workers/wrangler.toml +24 -0
  52. package/templates/variants/bun-connectrpc/Makefile +14 -8
  53. package/templates/variants/bun-connectrpc/gen/protos/waitlist/v1/waitlist_pb.ts +424 -0
  54. package/templates/variants/bun-connectrpc/migrations/0000_init.sql +12 -55
  55. package/templates/variants/bun-connectrpc/package.json +12 -5
  56. package/templates/variants/bun-connectrpc/protos/waitlist/v1/waitlist.proto +91 -0
  57. package/templates/variants/bun-connectrpc/scripts/codegen.ts +1 -1
  58. package/templates/variants/bun-connectrpc/scripts/migrate.ts +4 -1
  59. package/templates/variants/bun-connectrpc/src/auth.ts +200 -0
  60. package/templates/variants/bun-connectrpc/src/db/repository.ts +67 -420
  61. package/templates/variants/bun-connectrpc/src/db/schema.ts +15 -64
  62. package/templates/variants/bun-connectrpc/src/index.ts +76 -176
  63. package/templates/variants/bun-connectrpc/src/temporal/activities.ts +14 -0
  64. package/templates/variants/bun-connectrpc/src/temporal/worker.ts +38 -0
  65. package/templates/variants/bun-connectrpc/src/temporal/workflows.ts +10 -0
  66. package/templates/variants/bun-connectrpc/src/waitlist/service.ts +172 -0
  67. package/templates/variants/bun-connectrpc/src/waitlist/types.ts +45 -0
  68. package/templates/variants/bun-connectrpc/test/app.test.ts +4 -4
  69. package/templates/variants/bun-connectrpc/test/waitlist.integration.test.ts +71 -0
  70. package/templates/variants/bun-hono/Makefile +14 -8
  71. package/templates/variants/bun-hono/migrations/0000_init.sql +12 -55
  72. package/templates/variants/bun-hono/package.json +12 -5
  73. package/templates/variants/bun-hono/scripts/migrate.ts +4 -1
  74. package/templates/variants/bun-hono/src/auth.ts +181 -0
  75. package/templates/variants/bun-hono/src/db/repository.ts +68 -421
  76. package/templates/variants/bun-hono/src/db/schema.ts +15 -64
  77. package/templates/variants/bun-hono/src/index.ts +65 -180
  78. package/templates/variants/bun-hono/src/temporal/activities.ts +14 -0
  79. package/templates/variants/bun-hono/src/temporal/worker.ts +38 -0
  80. package/templates/variants/bun-hono/src/temporal/workflows.ts +10 -0
  81. package/templates/variants/bun-hono/src/waitlist/service.ts +166 -0
  82. package/templates/variants/bun-hono/src/waitlist/types.ts +50 -0
  83. package/templates/variants/bun-hono/test/app.test.ts +72 -41
  84. package/templates/variants/bun-hono/test/waitlist.integration.test.ts +102 -0
  85. package/templates/variants/go-chi/Makefile +27 -11
  86. package/templates/variants/go-chi/atlas.hcl +8 -0
  87. package/templates/variants/go-chi/cmd/server/main.go +21 -10
  88. package/templates/variants/go-chi/go.mod +1 -3
  89. package/templates/variants/go-chi/internal/app/service.go +202 -685
  90. package/templates/variants/go-chi/internal/auth/middleware.go +289 -0
  91. package/templates/variants/go-chi/internal/auth/middleware_test.go +38 -0
  92. package/templates/variants/go-chi/internal/config/config.go +27 -11
  93. package/templates/variants/go-chi/internal/httpapi/routes.go +78 -157
  94. package/templates/variants/go-chi/internal/httpapi/waitlist_integration_test.go +199 -0
  95. package/templates/variants/go-chi/internal/temporal/activities.go +27 -0
  96. package/templates/variants/go-chi/internal/temporal/worker.go +42 -0
  97. package/templates/variants/go-chi/internal/temporal/workflows.go +18 -0
  98. package/templates/variants/go-chi/migrations/0000_init.sql +12 -55
  99. package/templates/variants/go-chi/migrations/atlas.sum +2 -0
  100. package/templates/variants/go-chi/package.json +7 -1
  101. package/templates/variants/go-connectrpc/Makefile +26 -9
  102. package/templates/variants/go-connectrpc/atlas.hcl +8 -0
  103. package/templates/variants/go-connectrpc/buf.gen.yaml +2 -2
  104. package/templates/variants/go-connectrpc/cmd/server/main.go +23 -12
  105. package/templates/variants/go-connectrpc/gen/waitlist/v1/waitlist.pb.go +960 -0
  106. package/templates/variants/go-connectrpc/gen/waitlist/v1/waitlistv1connect/waitlist.connect.go +283 -0
  107. package/templates/variants/go-connectrpc/go.mod +1 -1
  108. package/templates/variants/go-connectrpc/internal/app/service.go +202 -685
  109. package/templates/variants/go-connectrpc/internal/auth/middleware.go +289 -0
  110. package/templates/variants/go-connectrpc/internal/auth/middleware_test.go +38 -0
  111. package/templates/variants/go-connectrpc/internal/config/config.go +27 -11
  112. package/templates/variants/go-connectrpc/internal/connectapi/handler.go +78 -201
  113. package/templates/variants/go-connectrpc/internal/connectapi/waitlist_integration_test.go +122 -0
  114. package/templates/variants/go-connectrpc/internal/httpapi/routes.go +147 -9
  115. package/templates/variants/go-connectrpc/internal/temporal/activities.go +27 -0
  116. package/templates/variants/go-connectrpc/internal/temporal/worker.go +42 -0
  117. package/templates/variants/go-connectrpc/internal/temporal/workflows.go +18 -0
  118. package/templates/variants/go-connectrpc/migrations/0000_init.sql +12 -55
  119. package/templates/variants/go-connectrpc/migrations/atlas.sum +2 -0
  120. package/templates/variants/go-connectrpc/package.json +7 -1
  121. package/templates/variants/go-connectrpc/protos/waitlist/v1/waitlist.proto +93 -0
  122. package/templates/root/.github/workflows/buf-publish.yml +0 -19
  123. package/templates/root/.github/workflows/ci.yml +0 -26
  124. package/templates/root/.github/workflows/deploy.yml +0 -22
  125. package/templates/root/Dockerfile +0 -23
  126. package/templates/root/README.md +0 -69
  127. package/templates/root/buf.gen.yaml +0 -10
  128. package/templates/root/buf.yaml +0 -9
  129. package/templates/root/cmd/server/main.go +0 -44
  130. package/templates/root/gen/dns/v1/dns.pb.go +0 -623
  131. package/templates/root/gen/dns/v1/dnsv1connect/dns.connect.go +0 -192
  132. package/templates/root/go.mod +0 -10
  133. package/templates/root/internal/app/service.go +0 -152
  134. package/templates/root/internal/app/token_source.go +0 -50
  135. package/templates/root/internal/cloudflare/client.go +0 -160
  136. package/templates/root/internal/config/config.go +0 -55
  137. package/templates/root/internal/connectapi/handler.go +0 -79
  138. package/templates/root/internal/httpapi/routes.go +0 -93
  139. package/templates/root/internal/vault/client.go +0 -148
  140. package/templates/root/package.json +0 -12
  141. package/templates/root/protos/dns/v1/dns.proto +0 -58
  142. package/templates/root/scripts/cloudrun/bootstrap.ts +0 -65
  143. package/templates/root/scripts/cloudrun/config.ts +0 -50
  144. package/templates/root/scripts/cloudrun/deploy.ts +0 -41
  145. package/templates/root/scripts/cloudrun/lib.ts +0 -244
  146. package/templates/root/service.yaml +0 -50
  147. package/templates/root/test/go.test.ts +0 -19
  148. package/templates/shared/scripts/cloudrun/integrations.ts +0 -111
  149. package/templates/variants/bun-connectrpc/gen/protos/chat/v1/chat_pb.ts +0 -1078
  150. package/templates/variants/bun-connectrpc/protos/chat/v1/chat.proto +0 -228
  151. package/templates/variants/bun-connectrpc/src/chat/service.ts +0 -384
  152. package/templates/variants/bun-connectrpc/src/chat/types.ts +0 -142
  153. package/templates/variants/bun-connectrpc/src/storage.ts +0 -72
  154. package/templates/variants/bun-connectrpc/src/webhooks.ts +0 -35
  155. package/templates/variants/bun-connectrpc/test/list-messages.integration.test.ts +0 -182
  156. package/templates/variants/bun-hono/src/chat/service.ts +0 -384
  157. package/templates/variants/bun-hono/src/chat/types.ts +0 -142
  158. package/templates/variants/bun-hono/src/storage.ts +0 -72
  159. package/templates/variants/bun-hono/src/webhooks.ts +0 -35
  160. package/templates/variants/bun-hono/test/list-messages.integration.test.ts +0 -256
  161. package/templates/variants/go-chi/buf.gen.yaml +0 -12
  162. package/templates/variants/go-chi/buf.yaml +0 -9
  163. package/templates/variants/go-chi/cmd/migrate/main.go +0 -101
  164. package/templates/variants/go-chi/internal/httpapi/list_messages_integration_test.go +0 -298
  165. package/templates/variants/go-chi/protos/chat/v1/chat.proto +0 -219
  166. package/templates/variants/go-connectrpc/cmd/migrate/main.go +0 -101
  167. package/templates/variants/go-connectrpc/gen/chat/v1/chat.pb.go +0 -2512
  168. package/templates/variants/go-connectrpc/gen/chat/v1/chatv1connect/chat.connect.go +0 -571
  169. package/templates/variants/go-connectrpc/internal/connectapi/list_messages_integration_test.go +0 -216
  170. package/templates/variants/go-connectrpc/protos/chat/v1/chat.proto +0 -232
  171. /package/bin/{create-svc.mjs → service.mjs} +0 -0
@@ -0,0 +1,59 @@
1
+ export default {
2
+ service_id: "{{SERVICE_ID}}",
3
+ target: "{{TARGET}}",
4
+ runtime: "{{RUNTIME}}",
5
+ framework: "{{FRAMEWORK}}",
6
+ stage_default: "prod",
7
+ dns: {
8
+ hostname: "{{API_HOSTNAME}}",
9
+ base_domain: "{{API_BASE_DOMAIN}}",
10
+ },
11
+ ownership: {
12
+ managed_by: "create-service",
13
+ service_id: "{{SERVICE_ID}}",
14
+ },
15
+ auth: {
16
+ issuer: "{{AUTH_ISSUER}}",
17
+ token_endpoint: "https://auth.anmho.com/api/auth/oauth2/token",
18
+ jwks_url: "https://auth.anmho.com/api/auth/jwks",
19
+ resource_server: {
20
+ id: "{{SERVICE_ID}}",
21
+ audience: "api://{{SERVICE_ID}}",
22
+ default_scopes: ["{{SERVICE_ID}}:read", "{{SERVICE_ID}}:write"],
23
+ },
24
+ client: {
25
+ app_id: "{{SERVICE_ID}}",
26
+ identity: "server",
27
+ vault_path_prefix: "prod/apps/{{SERVICE_ID}}/server/oauth-clients",
28
+ },
29
+ },
30
+ temporal: {
31
+ enabled: false,
32
+ address: "localhost:7233",
33
+ namespace: "default",
34
+ task_queue: "{{SERVICE_ID}}",
35
+ api_key_secret_name: "{{SERVICE_ID}}-temporal-api-key",
36
+ },
37
+ providers: {
38
+ vault: {
39
+ mount: "secret",
40
+ neon_path: "prod/providers/neon",
41
+ grafana_path: "prod/providers/grafana",
42
+ clerk_m2m_path: "prod/providers/clerk-m2m",
43
+ temporal_path: "prod/providers/temporal",
44
+ },
45
+ },
46
+ buf: {
47
+ module: "buf.build/anmho/{{SERVICE_ID}}",
48
+ },
49
+ cloudrun: {
50
+ project_id: "{{PROJECT_ID}}",
51
+ region: "{{REGION}}",
52
+ service_account: "{{RUNTIME_SERVICE_ACCOUNT}}",
53
+ },
54
+ workers: {
55
+ script_name: "{{SERVICE_ID}}",
56
+ hyperdrive_binding: "HYPERDRIVE",
57
+ cron: "*/15 * * * *",
58
+ },
59
+ } as const;
@@ -2,10 +2,17 @@ apiVersion: serving.knative.dev/v1
2
2
  kind: Service
3
3
  metadata:
4
4
  name: ${SERVICE_NAME}
5
+ labels:
6
+ managed_by: create-service
7
+ service_id: ${SERVICE_ID}
5
8
  annotations:
6
9
  run.googleapis.com/ingress: all
7
10
  spec:
8
11
  template:
12
+ metadata:
13
+ labels:
14
+ managed_by: create-service
15
+ service_id: ${SERVICE_ID}
9
16
  spec:
10
17
  serviceAccountName: ${RUNTIME_SERVICE_ACCOUNT}
11
18
  containers:
@@ -17,55 +24,28 @@ spec:
17
24
  value: ${SERVICE_RUNTIME}
18
25
  - name: APP_FRAMEWORK
19
26
  value: ${SERVICE_FRAMEWORK}
27
+ - name: TEMPORAL_ENABLED
28
+ value: "${TEMPORAL_ENABLED}"
29
+ - name: TEMPORAL_ADDRESS
30
+ value: "${TEMPORAL_ADDRESS}"
31
+ - name: TEMPORAL_NAMESPACE
32
+ value: "${TEMPORAL_NAMESPACE}"
33
+ - name: TEMPORAL_TASK_QUEUE
34
+ value: "${TEMPORAL_TASK_QUEUE}"
35
+ ${TEMPORAL_API_KEY_ENV}
20
36
  - name: DATABASE_URL
21
37
  valueFrom:
22
38
  secretKeyRef:
23
39
  name: ${DATABASE_URL_SECRET}
24
40
  key: latest
25
- - name: CLERK_SECRET_KEY
26
- valueFrom:
27
- secretKeyRef:
28
- name: ${CLERK_SECRET_KEY}
29
- key: latest
30
- - name: CLERK_WEBHOOK_SECRET
31
- valueFrom:
32
- secretKeyRef:
33
- name: ${CLERK_WEBHOOK_SECRET}
34
- key: latest
35
- - name: STRIPE_SECRET_KEY
36
- valueFrom:
37
- secretKeyRef:
38
- name: ${STRIPE_SECRET_KEY}
39
- key: latest
40
- - name: STRIPE_WEBHOOK_SECRET
41
- valueFrom:
42
- secretKeyRef:
43
- name: ${STRIPE_WEBHOOK_SECRET}
44
- key: latest
45
- - name: REVENUECAT_API_KEY
46
- valueFrom:
47
- secretKeyRef:
48
- name: ${REVENUECAT_API_KEY}
49
- key: latest
50
- - name: REVENUECAT_WEBHOOK_SECRET
51
- valueFrom:
52
- secretKeyRef:
53
- name: ${REVENUECAT_WEBHOOK_SECRET}
54
- key: latest
55
- - name: RESEND_API_KEY
56
- valueFrom:
57
- secretKeyRef:
58
- name: ${RESEND_API_KEY}
59
- key: latest
60
- - name: POSTHOG_API_KEY
61
- valueFrom:
62
- secretKeyRef:
63
- name: ${POSTHOG_API_KEY}
64
- key: latest
65
- - name: ATTACHMENT_BUCKET
66
- value: ${ATTACHMENT_BUCKET}
67
- - name: ATTACHMENT_PUBLIC_BASE_URL
68
- value: ${ATTACHMENT_PUBLIC_BASE_URL}
41
+ - name: AUTH_ENABLED
42
+ value: "true"
43
+ - name: AUTH_ISSUER
44
+ value: ${AUTH_ISSUER}
45
+ - name: AUTH_AUDIENCE
46
+ value: ${AUTH_AUDIENCE}
47
+ - name: AUTH_JWKS_URL
48
+ value: ${AUTH_JWKS_URL}
69
49
  traffic:
70
50
  - latestRevision: true
71
51
  percent: 100
@@ -0,0 +1,19 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: oven-sh/setup-bun@v2
15
+ - run: bun install
16
+ - run: bun lint
17
+ - run: bun test
18
+ - if: ${{ vars.GCX_ENABLED == 'true' && github.ref == 'refs/heads/main' }}
19
+ run: bun run dashboards
@@ -0,0 +1,19 @@
1
+ name: Deploy
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: oven-sh/setup-bun@v2
14
+ - run: bun install
15
+ - run: bun run deploy
16
+ env:
17
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
18
+ - if: ${{ vars.GCX_ENABLED == 'true' }}
19
+ run: bun run dashboards
@@ -0,0 +1,33 @@
1
+ .PHONY: dev migrate gen lint test create deploy dashboards auth destroy
2
+
3
+ SERVICE := npx --no-install service
4
+
5
+ dev:
6
+ bun run dev
7
+
8
+ migrate:
9
+ $(SERVICE) migrate
10
+
11
+ gen:
12
+ @echo "no generated code for workers"
13
+
14
+ lint:
15
+ bunx tsc --noEmit
16
+
17
+ test:
18
+ bun test
19
+
20
+ create:
21
+ $(SERVICE) create
22
+
23
+ deploy:
24
+ $(SERVICE) deploy $(ARGS)
25
+
26
+ dashboards:
27
+ $(SERVICE) dashboards
28
+
29
+ auth:
30
+ $(SERVICE) auth $(ARGS)
31
+
32
+ destroy:
33
+ $(SERVICE) destroy $(ARGS)
@@ -0,0 +1,75 @@
1
+ # {{SERVICE_NAME}}
2
+
3
+ Generated by `service create`.
4
+
5
+ This `{{PROFILE}}` profile targets `{{RUNTIME}} + {{FRAMEWORK}}` on Cloudflare Workers with:
6
+
7
+ - one `wrangler.toml`
8
+ - a lightweight waitlist/launch API
9
+ - the `service` CLI for create, deploy, doctor, dashboards, DNS, and destroy
10
+ - Cron Trigger wiring for scheduled follow-up work
11
+ - a Hyperdrive binding for Neon-backed Postgres persistence
12
+ - a production API origin at `https://{{API_HOSTNAME}}`
13
+
14
+ ## Commands
15
+
16
+ ```bash
17
+ wrangler dev
18
+ bun run test
19
+ bun run lint
20
+ bun run migrate
21
+ service create
22
+ service deploy
23
+ bun run dashboards
24
+ bun run doctor
25
+ bun run destroy
26
+ ```
27
+
28
+ ## Local Development
29
+
30
+ ```bash
31
+ bun install
32
+ bun run dev
33
+ ```
34
+
35
+ The Workers target starts with an HTTP waitlist API. Local unit tests use an
36
+ in-memory store. Deployed Workers use the `HYPERDRIVE` binding and create the
37
+ small waitlist/trigger schema on first use.
38
+
39
+ ## API
40
+
41
+ - `GET /healthz`
42
+ - `GET /readyz`
43
+ - `POST /v1/waitlist`
44
+ - `GET /v1/waitlist?email=<email>`
45
+ - `GET /v1/waitlist/:entryId`
46
+ - `POST /v1/triggers/waitlist`
47
+ - `POST /webhooks/:provider`
48
+ - `GET /webhooks/:provider/health`
49
+
50
+ ## Production
51
+
52
+ ```bash
53
+ service create
54
+ ```
55
+
56
+ `service create` deploys the Worker through Wrangler. The custom domain is
57
+ configured in `wrangler.toml`:
58
+
59
+ ```bash
60
+ https://{{API_HOSTNAME}}
61
+ ```
62
+
63
+ Use `service doctor` after create to verify Wrangler auth, route config, Cron,
64
+ Hyperdrive, dashboard tooling, auth tooling, and deployed health.
65
+
66
+ If the Hyperdrive binding id is empty, `service create` uses `DATABASE_URL`, or
67
+ `NEON_API_KEY` to create/resolve the generated Neon database and connection URI,
68
+ applies the waitlist schema, then runs `wrangler hyperdrive create` and writes
69
+ the returned id back into `wrangler.toml` before deploy.
70
+
71
+ You can also apply the schema manually:
72
+
73
+ ```bash
74
+ DATABASE_URL=postgres://... bun run migrate
75
+ ```
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "{{SERVICE_NAME}}",
3
+ "private": true,
4
+ "type": "module",
5
+ "bin": {
6
+ "service": "./scripts/workers/cli.ts"
7
+ },
8
+ "scripts": {
9
+ "dev": "wrangler dev",
10
+ "service": "bun run ./scripts/workers/cli.ts",
11
+ "migrate": "bun run ./scripts/workers/cli.ts migrate",
12
+ "seed": "bun run ./scripts/workers/cli.ts seed",
13
+ "lint": "bunx tsc --noEmit",
14
+ "test": "bun test",
15
+ "create": "bun run ./scripts/workers/cli.ts create",
16
+ "deploy": "bun run ./scripts/workers/cli.ts deploy",
17
+ "dashboards": "bun run ./scripts/workers/cli.ts dashboards",
18
+ "auth": "bun run ./scripts/workers/cli.ts auth",
19
+ "destroy": "bun run ./scripts/workers/cli.ts destroy"
20
+ },
21
+ "dependencies": {
22
+ "@anmho/authctl": "0.1.1",
23
+ "@clack/prompts": "^1.2.0",
24
+ "@neondatabase/api-client": "^2.7.1",
25
+ "hono": "^4.10.1",
26
+ "pg": "^8.16.3"
27
+ },
28
+ "devDependencies": {
29
+ "@cloudflare/workers-types": "latest",
30
+ "@types/pg": "^8.16.0",
31
+ "@types/bun": "latest",
32
+ "typescript": "^5.9.3",
33
+ "wrangler": "^4.49.0"
34
+ }
35
+ }