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,2 @@
1
+ h1:D9GgvtEf0xxnRDaTb/C3cPtRbncVXsK6Ef0KYQuLMRw=
2
+ 0000_init.sql h1:dBpLGyoeZNRpjT6RvQXiqx3p2ICAChKy2jVqCIYuWQg=
@@ -3,9 +3,15 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "bin": {
6
- "svc-cloudrun": "./scripts/cloudrun/cli.ts"
6
+ "service": "./scripts/cloudrun/cli.ts"
7
+ },
8
+ "scripts": {
9
+ "service": "bun run ./scripts/cloudrun/cli.ts",
10
+ "auth": "bun run ./scripts/cloudrun/cli.ts auth",
11
+ "dashboards": "bun run ./scripts/cloudrun/cli.ts dashboards"
7
12
  },
8
13
  "dependencies": {
14
+ "@anmho/authctl": "0.1.1",
9
15
  "@clack/prompts": "^1.2.0",
10
16
  "@neondatabase/api-client": "^2.7.1"
11
17
  }
@@ -1,13 +1,21 @@
1
- .PHONY: dev migrate gen lint test bootstrap deploy cleanup
1
+ .PHONY: dev migrate migrate-lint gen lint test create deploy dashboards auth destroy
2
2
 
3
- CLOUDRUN := npx --no-install svc-cloudrun
3
+ SERVICE := npx --no-install service
4
4
  WITH_ENV := set -a; [ ! -f .env.local ] || . ./.env.local; set +a;
5
+ ATLAS ?= atlas
5
6
 
6
7
  dev:
7
- @$(WITH_ENV) go run ./cmd/server
8
+ @bun run ./scripts/dev.ts go run ./cmd/server
8
9
 
9
10
  migrate:
10
- @$(WITH_ENV) go run ./cmd/migrate
11
+ @bun run ./scripts/ensure-local-db.ts
12
+ @bun run ./scripts/wait-for-db.ts
13
+ @$(WITH_ENV) $(ATLAS) migrate apply --env local
14
+
15
+ migrate-lint:
16
+ @bun run ./scripts/ensure-local-db.ts
17
+ @bun run ./scripts/wait-for-db.ts
18
+ @$(WITH_ENV) $(ATLAS) migrate lint --env local --latest 1
11
19
 
12
20
  gen:
13
21
  buf generate
@@ -15,15 +23,24 @@ gen:
15
23
  lint:
16
24
  go vet ./...
17
25
  buf lint
26
+ @bun run ./scripts/ensure-local-db.ts
27
+ @bun run ./scripts/wait-for-db.ts
28
+ @$(WITH_ENV) $(ATLAS) migrate lint --env local --latest 1
18
29
 
19
30
  test:
20
31
  bun test ./test
21
32
 
22
- bootstrap:
23
- $(CLOUDRUN) bootstrap
33
+ create:
34
+ $(SERVICE) create
24
35
 
25
36
  deploy:
26
- $(CLOUDRUN) deploy $(ARGS)
37
+ $(SERVICE) deploy $(ARGS)
38
+
39
+ dashboards:
40
+ $(SERVICE) dashboards
41
+
42
+ auth:
43
+ $(SERVICE) auth $(ARGS)
27
44
 
28
- cleanup:
29
- $(CLOUDRUN) cleanup $(ARGS)
45
+ destroy:
46
+ $(SERVICE) destroy $(ARGS)
@@ -0,0 +1,8 @@
1
+ env "local" {
2
+ url = getenv("DATABASE_URL")
3
+ dev = "docker://postgres/16/dev?search_path=public"
4
+
5
+ migration {
6
+ dir = "file://migrations"
7
+ }
8
+ }
@@ -4,9 +4,9 @@ plugins:
4
4
  out: gen
5
5
  opt:
6
6
  - paths=source_relative
7
- - Mchat/v1/chat.proto={{MODULE_PATH}}/gen/chat/v1
7
+ - Mwaitlist/v1/waitlist.proto={{MODULE_PATH}}/gen/waitlist/v1
8
8
  - local: protoc-gen-connect-go
9
9
  out: gen
10
10
  opt:
11
11
  - paths=source_relative
12
- - Mchat/v1/chat.proto={{MODULE_PATH}}/gen/chat/v1
12
+ - Mwaitlist/v1/waitlist.proto={{MODULE_PATH}}/gen/waitlist/v1
@@ -8,18 +8,19 @@ import (
8
8
  "strings"
9
9
  "time"
10
10
 
11
- "cloud.google.com/go/storage"
12
11
  "connectrpc.com/grpcreflect"
13
12
  "github.com/go-chi/chi/v5"
14
13
  _ "github.com/jackc/pgx/v5/stdlib"
15
14
  "golang.org/x/net/http2"
16
15
  "golang.org/x/net/http2/h2c"
17
16
 
18
- chatv1connect "{{MODULE_PATH}}/gen/chat/v1/chatv1connect"
17
+ waitlistv1connect "{{MODULE_PATH}}/gen/waitlist/v1/waitlistv1connect"
19
18
  "{{MODULE_PATH}}/internal/app"
19
+ "{{MODULE_PATH}}/internal/auth"
20
20
  "{{MODULE_PATH}}/internal/config"
21
21
  "{{MODULE_PATH}}/internal/connectapi"
22
22
  "{{MODULE_PATH}}/internal/httpapi"
23
+ temporalapp "{{MODULE_PATH}}/internal/temporal"
23
24
  )
24
25
 
25
26
  func main() {
@@ -32,24 +33,34 @@ func main() {
32
33
  if err != nil {
33
34
  log.Fatal(err)
34
35
  }
35
- storageClient, err := storage.NewClient(context.Background())
36
- if err != nil {
37
- log.Fatal(err)
36
+ service := app.NewWaitlistService(db)
37
+ if cfg.TemporalEnabled {
38
+ stopTemporal, err := temporalapp.StartWorker(temporalapp.WorkerConfig{
39
+ Address: cfg.TemporalAddress,
40
+ Namespace: cfg.TemporalNamespace,
41
+ TaskQueue: cfg.TemporalTaskQueue,
42
+ APIKey: cfg.TemporalAPIKey,
43
+ })
44
+ if err != nil {
45
+ log.Fatal(err)
46
+ }
47
+ defer stopTemporal()
48
+ log.Printf("Temporal worker polling %s", cfg.TemporalTaskQueue)
38
49
  }
39
50
 
40
- service := app.NewChatService(
41
- db,
42
- app.NewGCSStorage(cfg.AttachmentBucket, cfg.AttachmentPublicBaseURL, storageClient),
43
- app.GenericWebhookAdapter{},
44
- )
45
-
46
51
  router := chi.NewRouter()
52
+ router.Use(auth.Middleware(auth.Config{
53
+ Enabled: cfg.AuthEnabled,
54
+ Issuer: cfg.AuthIssuer,
55
+ Audience: cfg.AuthAudience,
56
+ JWKSURL: cfg.AuthJWKSURL,
57
+ }))
47
58
  connectPath, connectHandler := connectapi.NewHandler(service)
48
59
  router.Mount(connectPath, connectHandler)
49
60
  httpapi.RegisterRoutes(router, service)
50
61
 
51
62
  if localRPCIntrospectionEnabled() {
52
- reflector := grpcreflect.NewStaticReflector(chatv1connect.ChatServiceName)
63
+ reflector := grpcreflect.NewStaticReflector(waitlistv1connect.WaitlistServiceName)
53
64
  reflectionV1Path, reflectionV1Handler := grpcreflect.NewHandlerV1(reflector)
54
65
  reflectionV1AlphaPath, reflectionV1AlphaHandler := grpcreflect.NewHandlerV1Alpha(reflector)
55
66
  router.Mount(reflectionV1Path, reflectionV1Handler)