@voltro/cli 0.23.0 → 0.25.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 (99) hide show
  1. package/CHANGELOG.md +537 -0
  2. package/THIRD-PARTY-NOTICES.md +2 -2
  3. package/bin/voltro.mjs +39 -4
  4. package/dist/{apiBuild-JQtIhZPy.js → apiBuild-BqhCSytw.js} +46 -24
  5. package/dist/apiBuild-N1R4V792.js +2 -0
  6. package/dist/bin.js +3 -3
  7. package/dist/{commands-Bsu9Buln.js → commands-7EmYJ9Xg.js} +2796 -2478
  8. package/dist/dbCommand-CIrdFLp9.js +2 -0
  9. package/dist/{dbCommand-GI7-BVZt.js → dbCommand-FUU12FvD.js} +285 -246
  10. package/dist/{dev-DRxF_qOB.js → dev-BvHT7WZa.js} +1 -1
  11. package/dist/{dev-jM07kq_D.js → dev-MacSQ1Ll.js} +2042 -1631
  12. package/dist/fileConventions-3bffWssN.js +30 -0
  13. package/dist/frameworkTableAssembly-BsnCKzQ6.js +2 -0
  14. package/dist/{frameworkTableAssembly-sg41s14F.js → frameworkTableAssembly-Cw5zJz6n.js} +2 -2
  15. package/dist/index.js +1 -1
  16. package/dist/inspect-C9gjHwBk.js +2 -0
  17. package/dist/{inspect-_ldwsAwH.js → inspect-DuLUrZp9.js} +14 -1
  18. package/dist/{inspectMetrics-dcC7gnxu.js → inspectMetrics-EQwH7BI4.js} +15 -15
  19. package/dist/manifestBuild-BVwS1Z_6.js +2 -0
  20. package/dist/{manifestBuild-Bs1Uw22_.js → manifestBuild-Dneq4_Jx.js} +1 -1
  21. package/dist/serveCommand-5ZFiNO1R.js +1241 -0
  22. package/dist/serveEntry.js +2 -2
  23. package/dist/{start-C_4VUDT8.js → start-C-ZWSDpg.js} +2 -2
  24. package/dist/startEntry.js +2 -2
  25. package/package.json +17 -17
  26. package/templates/AGENTS.core.md +12 -5
  27. package/templates/AGENTS.md +14 -7
  28. package/templates/agent-docs/_index.md +2 -2
  29. package/templates/agent-docs/_manifest.json +3 -3
  30. package/templates/agent-docs/authentication.md +21 -0
  31. package/templates/agent-docs/cli.md +32 -0
  32. package/templates/agent-docs/data.md +491 -167
  33. package/templates/agent-docs/database/migrations.md +132 -63
  34. package/templates/agent-docs/database/schema.md +80 -0
  35. package/templates/agent-docs/database/seedsdialects.md +12 -0
  36. package/templates/agent-docs/deployment.md +75 -1
  37. package/templates/agent-docs/plugins.md +1 -1
  38. package/templates/agent-docs/reference.md +2 -2
  39. package/templates/agent-docs/security.md +18 -0
  40. package/templates/agent-docs/templates/apibackends.md +5 -5
  41. package/templates/agent-docs/templates/overview.md +1 -1
  42. package/templates/agent-docs/whats-new.md +263 -169
  43. package/templates/agent-docs/workflows.md +74 -20
  44. package/templates/apps/api-ai/package.json +8 -7
  45. package/templates/apps/api-auth/package.json +9 -8
  46. package/templates/apps/api-backend/package.json +8 -7
  47. package/templates/apps/api-backend-deactivation/package.json +8 -7
  48. package/templates/apps/api-backend-mail/package.json +9 -8
  49. package/templates/apps/api-backend-mariadb/package.json +10 -9
  50. package/templates/apps/api-backend-storage/package.json +9 -8
  51. package/templates/apps/api-data-advanced/package.json +9 -8
  52. package/templates/apps/api-durable/README.md +2 -1
  53. package/templates/apps/api-durable/events/orders.event.ts +18 -0
  54. package/templates/apps/api-durable/mutations/orders.place.mutation.server.ts +17 -15
  55. package/templates/apps/api-durable/package.json +9 -8
  56. package/templates/apps/api-durable/triggers/order.placed.trigger.tsx +6 -4
  57. package/templates/apps/api-feature-flags/package.json +10 -9
  58. package/templates/apps/api-governance/package.json +9 -8
  59. package/templates/apps/api-kv/package.json +9 -8
  60. package/templates/apps/api-moderation/package.json +9 -8
  61. package/templates/apps/api-observability/package.json +9 -8
  62. package/templates/apps/api-ratelimit/package.json +9 -8
  63. package/templates/apps/api-rbac/package.json +9 -8
  64. package/templates/apps/api-rest/package.json +8 -7
  65. package/templates/apps/api-saas/package.json +12 -11
  66. package/templates/apps/api-search/package.json +9 -8
  67. package/templates/apps/api-versioning/package.json +9 -8
  68. package/templates/apps/api-webhooks/README.md +2 -2
  69. package/templates/apps/api-webhooks/events/orders.event.ts +35 -0
  70. package/templates/apps/api-webhooks/package.json +10 -9
  71. package/templates/apps/api-webhooks/template.json +1 -1
  72. package/templates/apps/changelog/package.json +7 -6
  73. package/templates/apps/edge-functions/package.json +3 -2
  74. package/templates/apps/frontend-admin/package.json +9 -8
  75. package/templates/apps/frontend-app/package.json +9 -8
  76. package/templates/apps/frontend-blank/package.json +8 -7
  77. package/templates/apps/frontend-contact/package.json +8 -7
  78. package/templates/apps/frontend-contact/src/globals.d.ts +6 -0
  79. package/templates/apps/frontend-dashboard/package.json +8 -7
  80. package/templates/apps/frontend-docs/package.json +8 -7
  81. package/templates/apps/frontend-docs/src/globals.d.ts +6 -0
  82. package/templates/apps/frontend-i18n/package.json +7 -6
  83. package/templates/apps/frontend-landing/package.json +8 -7
  84. package/templates/apps/frontend-landing/src/globals.d.ts +6 -0
  85. package/templates/apps/frontend-spa/package.json +8 -7
  86. package/templates/apps/frontend-spa/src/globals.d.ts +6 -0
  87. package/templates/apps/frontend-ssr/package.json +8 -7
  88. package/templates/apps/frontend-ssr/src/globals.d.ts +6 -0
  89. package/templates/apps/frontend-ssr-api/package.json +9 -8
  90. package/templates/apps/frontend-static-blog/package.json +7 -6
  91. package/templates/apps/frontend-static-blog/src/globals.d.ts +6 -0
  92. package/dist/apiBuild-CD-4JLLA.js +0 -2
  93. package/dist/dbCommand-CSguuUQn.js +0 -2
  94. package/dist/fileConventions-CBNPZVOV.js +0 -29
  95. package/dist/frameworkTableAssembly-DRJrAVr1.js +0 -2
  96. package/dist/inspect-BA67TF6v.js +0 -2
  97. package/dist/manifestBuild-i-fRHg_H.js +0 -2
  98. package/dist/serveCommand-Cl8sicD5.js +0 -1162
  99. package/templates/apps/api-webhooks/events/order.completed.webhook.tsx +0 -22
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-audit": "0.23.0",
19
- "@voltro/plugin-governance": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-audit": "0.25.0",
20
+ "@voltro/plugin-governance": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,23 +5,24 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "test": "voltro test",
9
10
  "typecheck": "tsc --noEmit"
10
11
  },
11
12
  "dependencies": {
12
13
  "@effect/platform": "^0.97.0",
13
14
  "@effect/rpc": "^0.76.0",
14
- "@voltro/cli": "0.23.0",
15
- "@voltro/database": "0.23.0",
16
- "@voltro/env": "0.23.0",
17
- "@voltro/kv": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/protocol": "0.23.0",
20
- "@voltro/runtime": "0.23.0",
15
+ "@voltro/cli": "0.25.0",
16
+ "@voltro/database": "0.25.0",
17
+ "@voltro/env": "0.25.0",
18
+ "@voltro/kv": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/protocol": "0.25.0",
21
+ "@voltro/runtime": "0.25.0",
21
22
  "effect": "^3.22.0"
22
23
  },
23
24
  "devDependencies": {
24
- "@voltro/testing": "0.23.0",
25
+ "@voltro/testing": "0.25.0",
25
26
  "typescript": "^6.0.3",
26
27
  "vitest": "^4.1.10"
27
28
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-moderation": "0.23.0",
19
- "@voltro/plugin-multitenancy": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-moderation": "0.25.0",
20
+ "@voltro/plugin-multitenancy": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/plugin-multitenancy": "0.23.0",
18
- "@voltro/plugin-prometheus": "0.23.0",
19
- "@voltro/plugin-sentry": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/plugin-multitenancy": "0.25.0",
19
+ "@voltro/plugin-prometheus": "0.25.0",
20
+ "@voltro/plugin-sentry": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/plugin-ratelimit": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/plugin-ratelimit": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/plugin-rbac": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/plugin-rbac": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,16 +13,16 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/plugin-openapi": "0.23.0",
18
- "@voltro/protocol": "0.23.0",
19
- "@voltro/runtime": "0.23.0",
20
- "@voltro/sql-postgres": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/plugin-openapi": "0.25.0",
19
+ "@voltro/protocol": "0.25.0",
20
+ "@voltro/runtime": "0.25.0",
21
+ "@voltro/sql-postgres": "0.25.0",
21
22
  "effect": "^3.22.0"
22
23
  },
23
24
  "devDependencies": {
24
- "@voltro/testing": "0.23.0",
25
+ "@voltro/testing": "0.25.0",
25
26
  "typescript": "^6.0.3",
26
27
  "vitest": "^4.1.10"
27
28
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,20 +13,20 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/plugin-analytics-postgres": "0.23.0",
18
- "@voltro/plugin-billing": "0.23.0",
19
- "@voltro/plugin-multitenancy": "0.23.0",
20
- "@voltro/plugin-notifications": "0.23.0",
21
- "@voltro/plugin-presence": "0.23.0",
22
- "@voltro/protocol": "0.23.0",
23
- "@voltro/runtime": "0.23.0",
24
- "@voltro/sql-postgres": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/plugin-analytics-postgres": "0.25.0",
19
+ "@voltro/plugin-billing": "0.25.0",
20
+ "@voltro/plugin-multitenancy": "0.25.0",
21
+ "@voltro/plugin-notifications": "0.25.0",
22
+ "@voltro/plugin-presence": "0.25.0",
23
+ "@voltro/protocol": "0.25.0",
24
+ "@voltro/runtime": "0.25.0",
25
+ "@voltro/sql-postgres": "0.25.0",
25
26
  "effect": "^3.22.0"
26
27
  },
27
28
  "devDependencies": {
28
- "@voltro/testing": "0.23.0",
29
+ "@voltro/testing": "0.25.0",
29
30
  "typescript": "^6.0.3",
30
31
  "vitest": "^4.1.10"
31
32
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/plugin-search": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/plugin-search": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,17 +13,17 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/plugin-versioning": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/plugin-versioning": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
22
23
  "effect": "^3.22.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/testing": "0.23.0",
26
+ "@voltro/testing": "0.25.0",
26
27
  "typescript": "^6.0.3",
27
28
  "vitest": "^4.1.10"
28
29
  }
@@ -15,7 +15,7 @@ apps/acme/api/
15
15
  ├── .env # VOLTRO_WEBHOOK_SECRET_ORDERS (dev signing secret)
16
16
  ├── database/schema.ts # orders + webhookTables() bookkeeping
17
17
  ├── webhooks/orders.webhook.tsx # INCOMING — signature-verified receiver
18
- ├── events/order.completed.webhook.tsx # OUTGOING — defineOutgoingEvent
18
+ ├── events/orders.event.ts # OUTGOING — defineEvent + webhook:
19
19
  ├── mutations/orders.fulfill.mutation.ts # create order + emit (+ .server.ts)
20
20
  └── queries/orders.list.query.ts # reactive list (+ .server.ts)
21
21
  ```
@@ -68,7 +68,7 @@ curl -s -o /dev/null -w '%{http_code}\n' -X POST http://localhost:4000/webhooks/
68
68
 
69
69
  ```ts
70
70
  // events/order.completed.webhook.tsx
71
- export default defineOutgoingEvent({ id: 'order.completed', payload: Schema.Struct({ … }), version: 1 })
71
+ export const orderCompleted = defineEvent({ name: 'order.completed', key: Schema.Struct({}), payload: Schema.Struct({ … }), webhook: { version: 1 } })
72
72
 
73
73
  // mutations/orders.fulfill.mutation.server.ts — after the row commits:
74
74
  const { eventId, deliveries } = await useWebhooks(ctx).emit('order.completed', { orderId, tenantId, … })
@@ -0,0 +1,35 @@
1
+ // OUTGOING event — an event THIS app emits, declared ONCE and reaching every
2
+ // audience that wants it.
3
+ //
4
+ // External systems subscribe at runtime via
5
+ // `ctx.webhooks.subscribe({ event: 'order.completed', url })`; each subscriber
6
+ // is a row in `_voltro_webhook_targets`. A publish fans out to every matching
7
+ // target through a DURABLE delivery workflow — HMAC-signing the outbound
8
+ // request, retrying with backoff, honouring Retry-After — and each attempt is
9
+ // recorded in `_voltro_webhook_deliveries`.
10
+ //
11
+ // The `webhook:` block is what opts it into that. Without it this is an ordinary
12
+ // declared event: connected clients and workflow triggers, no HTTP delivery.
13
+ //
14
+ // `key: Schema.Struct({})` is correct rather than a placeholder — a webhook
15
+ // event is delivered to subscribed TARGETS, so there is nothing for a routing
16
+ // key to address. Add one only if you also want browser clients to subscribe
17
+ // per-something with `useEvent`.
18
+
19
+ import { defineEvent } from '@voltro/protocol'
20
+ import { Schema } from 'effect'
21
+
22
+ export const orderCompleted = defineEvent({
23
+ name: 'order.completed',
24
+ key: Schema.Struct({}),
25
+ payload: Schema.Struct({
26
+ orderId: Schema.String,
27
+ tenantId: Schema.String,
28
+ sku: Schema.String,
29
+ totalCents: Schema.Number,
30
+ }),
31
+ webhook: {
32
+ description: 'An order moved to "fulfilled" — payment captured, items shipped.',
33
+ version: 1,
34
+ },
35
+ })
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "migrate": "voltro migrate",
9
10
  "test": "voltro test",
10
11
  "typecheck": "tsc --noEmit"
@@ -12,18 +13,18 @@
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
15
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/database": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/plugin-multitenancy": "0.23.0",
19
- "@voltro/plugin-webhooks": "0.23.0",
20
- "@voltro/protocol": "0.23.0",
21
- "@voltro/runtime": "0.23.0",
22
- "@voltro/sql-postgres": "0.23.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/database": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/plugin-multitenancy": "0.25.0",
20
+ "@voltro/plugin-webhooks": "0.25.0",
21
+ "@voltro/protocol": "0.25.0",
22
+ "@voltro/runtime": "0.25.0",
23
+ "@voltro/sql-postgres": "0.25.0",
23
24
  "effect": "^3.22.0"
24
25
  },
25
26
  "devDependencies": {
26
- "@voltro/testing": "0.23.0",
27
+ "@voltro/testing": "0.25.0",
27
28
  "typescript": "^6.0.3",
28
29
  "vitest": "^4.1.10"
29
30
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "api-webhooks",
3
3
  "kind": "api",
4
- "summary": "First-class webhooks both ways: a signature-verified INCOMING receiver (*.webhook.tsx, genericProvider HMAC) that rejects unsigned/forged requests before your handler runs, plus an OUTGOING defineOutgoingEvent a mutation emits to subscribed targets via a durable delivery workflow.",
4
+ "summary": "First-class webhooks both ways: a signature-verified INCOMING receiver (*.webhook.tsx, genericProvider HMAC) that rejects unsigned/forged requests before your handler runs, plus an OUTGOING event declared with defineEvent({ …, webhook }) that a mutation publishes to subscribed targets via a durable delivery workflow.",
5
5
  "tags": ["api", "webhooks", "integrations", "hmac", "signature", "stripe", "events"]
6
6
  }
@@ -5,18 +5,19 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "build": "tsx scripts/generate-rss.mjs && voltro build .",
9
10
  "start": "voltro start .",
10
11
  "typecheck": "tsc --noEmit",
11
12
  "test": "voltro test"
12
13
  },
13
14
  "dependencies": {
14
- "@voltro/changelog": "0.23.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/client": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/i18n": "0.23.0",
19
- "@voltro/web": "0.23.0",
15
+ "@voltro/changelog": "0.25.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/client": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/i18n": "0.25.0",
20
+ "@voltro/web": "0.25.0",
20
21
  "react": "^19.0.0",
21
22
  "react-dom": "^19.0.0"
22
23
  },
@@ -4,6 +4,7 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
7
+ "lint": "voltro doctor .",
7
8
  "list": "voltro serverless list .",
8
9
  "build": "voltro serverless build .",
9
10
  "serve": "voltro serverless serve .",
@@ -11,8 +12,8 @@
11
12
  },
12
13
  "dependencies": {
13
14
  "@effect/platform": "^0.97.0",
14
- "@voltro/cli": "0.23.0",
15
- "@voltro/serverless": "0.23.0",
15
+ "@voltro/cli": "0.25.0",
16
+ "@voltro/serverless": "0.25.0",
16
17
  "effect": "^3.22.0"
17
18
  },
18
19
  "devDependencies": {
@@ -5,24 +5,25 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "build": "voltro build .",
9
10
  "start": "voltro start .",
10
11
  "typecheck": "tsc --noEmit",
11
12
  "test": "voltro test"
12
13
  },
13
14
  "dependencies": {
14
- "@{{projectName}}/api": "0.23.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/client": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/i18n": "0.23.0",
19
- "@voltro/ui-shadcn": "0.23.0",
20
- "@voltro/web": "0.23.0",
15
+ "@{{projectName}}/api": "0.25.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/client": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/i18n": "0.25.0",
20
+ "@voltro/ui-shadcn": "0.25.0",
21
+ "@voltro/web": "0.25.0",
21
22
  "react": "^19.0.0",
22
23
  "react-dom": "^19.0.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/devtools": "0.23.0",
26
+ "@voltro/devtools": "0.25.0",
26
27
  "@types/react": "^19.0.0",
27
28
  "@types/react-dom": "^19.0.0",
28
29
  "typescript": "^6.0.3",
@@ -5,24 +5,25 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "build": "voltro build .",
9
10
  "start": "voltro start .",
10
11
  "test": "voltro test",
11
12
  "typecheck": "tsc --noEmit"
12
13
  },
13
14
  "dependencies": {
14
- "@{{projectName}}/api": "0.23.0",
15
- "@voltro/cli": "0.23.0",
16
- "@voltro/client": "0.23.0",
17
- "@voltro/env": "0.23.0",
18
- "@voltro/i18n": "0.23.0",
19
- "@voltro/ui-shadcn": "0.23.0",
20
- "@voltro/web": "0.23.0",
15
+ "@{{projectName}}/api": "0.25.0",
16
+ "@voltro/cli": "0.25.0",
17
+ "@voltro/client": "0.25.0",
18
+ "@voltro/env": "0.25.0",
19
+ "@voltro/i18n": "0.25.0",
20
+ "@voltro/ui-shadcn": "0.25.0",
21
+ "@voltro/web": "0.25.0",
21
22
  "react": "^19.0.0",
22
23
  "react-dom": "^19.0.0"
23
24
  },
24
25
  "devDependencies": {
25
- "@voltro/devtools": "0.23.0",
26
+ "@voltro/devtools": "0.25.0",
26
27
  "@types/react": "^19.0.0",
27
28
  "@types/react-dom": "^19.0.0",
28
29
  "typescript": "^6.0.3",
@@ -5,23 +5,24 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "build": "voltro build .",
9
10
  "start": "voltro start .",
10
11
  "test": "voltro test",
11
12
  "typecheck": "tsc --noEmit"
12
13
  },
13
14
  "dependencies": {
14
- "@voltro/cli": "0.23.0",
15
- "@voltro/client": "0.23.0",
16
- "@voltro/env": "0.23.0",
17
- "@voltro/i18n": "0.23.0",
18
- "@voltro/ui-shadcn": "0.23.0",
19
- "@voltro/web": "0.23.0",
15
+ "@voltro/cli": "0.25.0",
16
+ "@voltro/client": "0.25.0",
17
+ "@voltro/env": "0.25.0",
18
+ "@voltro/i18n": "0.25.0",
19
+ "@voltro/ui-shadcn": "0.25.0",
20
+ "@voltro/web": "0.25.0",
20
21
  "react": "^19.0.0",
21
22
  "react-dom": "^19.0.0"
22
23
  },
23
24
  "devDependencies": {
24
- "@voltro/devtools": "0.23.0",
25
+ "@voltro/devtools": "0.25.0",
25
26
  "@types/react": "^19.0.0",
26
27
  "@types/react-dom": "^19.0.0",
27
28
  "typescript": "^6.0.3",
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "voltro dev .",
8
+ "lint": "voltro doctor .",
8
9
  "build": "voltro build .",
9
10
  "start": "voltro start .",
10
11
  "fn:dev": "voltro serverless dev functions/sendMessage.serverless.ts",
@@ -14,18 +15,18 @@
14
15
  },
15
16
  "dependencies": {
16
17
  "@effect/platform": "^0.97.0",
17
- "@voltro/cli": "0.23.0",
18
- "@voltro/client": "0.23.0",
19
- "@voltro/env": "0.23.0",
20
- "@voltro/i18n": "0.23.0",
21
- "@voltro/serverless": "0.23.0",
22
- "@voltro/web": "0.23.0",
18
+ "@voltro/cli": "0.25.0",
19
+ "@voltro/client": "0.25.0",
20
+ "@voltro/env": "0.25.0",
21
+ "@voltro/i18n": "0.25.0",
22
+ "@voltro/serverless": "0.25.0",
23
+ "@voltro/web": "0.25.0",
23
24
  "effect": "^3.22.0",
24
25
  "react": "^19.0.0",
25
26
  "react-dom": "^19.0.0"
26
27
  },
27
28
  "devDependencies": {
28
- "@voltro/devtools": "0.23.0",
29
+ "@voltro/devtools": "0.25.0",
29
30
  "@types/react": "^19.0.0",
30
31
  "@types/react-dom": "^19.0.0",
31
32
  "typescript": "^6.0.3",
@@ -0,0 +1,6 @@
1
+ // Ambient declarations.
2
+ //
3
+ // `declare module '*.css'`: TypeScript with `moduleResolution: Bundler`
4
+ // rejects a bare `import './globals.css'` unless the asset module is
5
+ // declared. Vite resolves it at build time; the declaration is type-only.
6
+ declare module '*.css'