@shivaedev/platform 0.5.2 → 0.6.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.
Files changed (214) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +359 -106
  3. package/dist/errors/rejectedField.d.ts +7 -0
  4. package/dist/errors/rejectedField.d.ts.map +1 -0
  5. package/dist/errors/{rejected-field.js → rejectedField.js} +4 -2
  6. package/dist/errors/rejectedField.js.map +1 -0
  7. package/dist/errors/taxonomy.d.ts +10 -0
  8. package/dist/errors/taxonomy.d.ts.map +1 -1
  9. package/dist/errors/taxonomy.js +4 -0
  10. package/dist/errors/taxonomy.js.map +1 -1
  11. package/dist/rpc/identity.d.ts.map +1 -1
  12. package/dist/rpc/identity.js.map +1 -1
  13. package/dist/rpc/middleware.d.ts.map +1 -1
  14. package/dist/rpc/middleware.js.map +1 -1
  15. package/dist/server/appHost.d.ts +56 -0
  16. package/dist/server/appHost.d.ts.map +1 -0
  17. package/dist/server/appHost.js +55 -0
  18. package/dist/server/appHost.js.map +1 -0
  19. package/dist/server/better-auth/adapter.d.ts +10 -0
  20. package/dist/server/better-auth/adapter.d.ts.map +1 -0
  21. package/dist/{better-auth → server/better-auth}/adapter.js +26 -14
  22. package/dist/server/better-auth/adapter.js.map +1 -0
  23. package/dist/{better-auth → server/better-auth}/relation.d.ts +15 -15
  24. package/dist/server/better-auth/relation.d.ts.map +1 -0
  25. package/dist/{better-auth → server/better-auth}/relation.js +3 -3
  26. package/dist/server/better-auth/relation.js.map +1 -0
  27. package/dist/server/better-auth/rowAdapter.d.ts +8 -0
  28. package/dist/server/better-auth/rowAdapter.d.ts.map +1 -0
  29. package/dist/server/better-auth/rowAdapter.js +52 -0
  30. package/dist/server/better-auth/rowAdapter.js.map +1 -0
  31. package/dist/{better-auth → server/better-auth}/where.d.ts +2 -2
  32. package/dist/server/better-auth/where.d.ts.map +1 -0
  33. package/dist/{better-auth → server/better-auth}/where.js +23 -19
  34. package/dist/server/better-auth/where.js.map +1 -0
  35. package/dist/{node-http/subscription-signal.d.ts → server/node-http/subscriptionSignal.d.ts} +2 -2
  36. package/dist/server/node-http/subscriptionSignal.d.ts.map +1 -0
  37. package/dist/{node-http/subscription-signal.js → server/node-http/subscriptionSignal.js} +20 -13
  38. package/dist/server/node-http/subscriptionSignal.js.map +1 -0
  39. package/dist/server/rpc-server/adapters/betterAuthSessions.d.ts +4 -0
  40. package/dist/server/rpc-server/adapters/betterAuthSessions.d.ts.map +1 -0
  41. package/dist/server/rpc-server/adapters/betterAuthSessions.js +14 -0
  42. package/dist/server/rpc-server/adapters/betterAuthSessions.js.map +1 -0
  43. package/dist/server/rpc-server/boundary.d.ts +9 -0
  44. package/dist/server/rpc-server/boundary.d.ts.map +1 -0
  45. package/dist/server/rpc-server/boundary.js +18 -0
  46. package/dist/server/rpc-server/boundary.js.map +1 -0
  47. package/dist/server/rpc-server/local.d.ts +7 -0
  48. package/dist/server/rpc-server/local.d.ts.map +1 -0
  49. package/dist/server/rpc-server/local.js +66 -0
  50. package/dist/server/rpc-server/local.js.map +1 -0
  51. package/dist/{rpc-server → server/rpc-server}/origin.d.ts +2 -2
  52. package/dist/server/rpc-server/origin.d.ts.map +1 -0
  53. package/dist/server/rpc-server/origin.js +16 -0
  54. package/dist/server/rpc-server/origin.js.map +1 -0
  55. package/dist/server/rpc-server/redact.d.ts +3 -0
  56. package/dist/server/rpc-server/redact.d.ts.map +1 -0
  57. package/dist/{rpc-server → server/rpc-server}/redact.js +9 -7
  58. package/dist/server/rpc-server/redact.js.map +1 -0
  59. package/dist/server/rpc-server/redactCause.d.ts +6 -0
  60. package/dist/server/rpc-server/redactCause.d.ts.map +1 -0
  61. package/dist/server/rpc-server/redactCause.js +36 -0
  62. package/dist/server/rpc-server/redactCause.js.map +1 -0
  63. package/dist/server/rpc-server/sensitive.d.ts +5 -0
  64. package/dist/server/rpc-server/sensitive.d.ts.map +1 -0
  65. package/dist/{rpc-server → server/rpc-server}/sensitive.js +21 -17
  66. package/dist/server/rpc-server/sensitive.js.map +1 -0
  67. package/dist/server/rpc-server/session.d.ts +21 -0
  68. package/dist/server/rpc-server/session.d.ts.map +1 -0
  69. package/dist/server/rpc-server/session.js +37 -0
  70. package/dist/server/rpc-server/session.js.map +1 -0
  71. package/dist/{rpc-server → server/rpc-server}/tracing.d.ts +1 -1
  72. package/dist/server/rpc-server/tracing.d.ts.map +1 -0
  73. package/dist/server/rpc-server/tracing.js +42 -0
  74. package/dist/server/rpc-server/tracing.js.map +1 -0
  75. package/dist/server/rpc-server/transportHeaders.d.ts +4 -0
  76. package/dist/server/rpc-server/transportHeaders.d.ts.map +1 -0
  77. package/dist/server/rpc-server/transportHeaders.js +6 -0
  78. package/dist/server/rpc-server/transportHeaders.js.map +1 -0
  79. package/dist/server/runtime/makePlatform.d.ts +4 -0
  80. package/dist/server/runtime/makePlatform.d.ts.map +1 -0
  81. package/dist/{runtime/make.js → server/runtime/makePlatform.js} +10 -8
  82. package/dist/server/runtime/makePlatform.js.map +1 -0
  83. package/dist/server/runtime/types.d.ts +19 -0
  84. package/dist/server/runtime/types.d.ts.map +1 -0
  85. package/dist/{runtime → server/runtime}/types.js.map +1 -1
  86. package/dist/server/testing/makePlatformIt.d.ts +8 -0
  87. package/dist/server/testing/makePlatformIt.d.ts.map +1 -0
  88. package/dist/{testing/vitest.js → server/testing/makePlatformIt.js} +9 -5
  89. package/dist/server/testing/makePlatformIt.js.map +1 -0
  90. package/dist/server/testing/types.d.ts +28 -0
  91. package/dist/server/testing/types.d.ts.map +1 -0
  92. package/dist/{testing → server/testing}/types.js.map +1 -1
  93. package/docs/north-star.md +36 -0
  94. package/docs/roadmap.md +30 -0
  95. package/package.json +324 -54
  96. package/src/errors/{rejected-field.ts → rejectedField.ts} +3 -6
  97. package/src/errors/taxonomy.ts +2 -8
  98. package/src/rpc/identity.ts +0 -4
  99. package/src/rpc/middleware.ts +18 -9
  100. package/src/server/appHost.ts +134 -0
  101. package/src/{better-auth → server/better-auth}/adapter.ts +27 -31
  102. package/src/{better-auth → server/better-auth}/relation.ts +18 -20
  103. package/src/{better-auth/row-adapter.ts → server/better-auth/rowAdapter.ts} +19 -21
  104. package/src/{better-auth → server/better-auth}/where.ts +23 -33
  105. package/src/{node-http/subscription-signal.ts → server/node-http/subscriptionSignal.ts} +19 -22
  106. package/src/{rpc-server/adapters/better-auth-sessions.ts → server/rpc-server/adapters/betterAuthSessions.ts} +9 -10
  107. package/src/server/rpc-server/boundary.ts +26 -0
  108. package/src/server/rpc-server/local.ts +70 -0
  109. package/src/{rpc-server → server/rpc-server}/origin.ts +10 -13
  110. package/src/{rpc-server → server/rpc-server}/redact.ts +9 -11
  111. package/src/server/rpc-server/redactCause.ts +40 -0
  112. package/src/{rpc-server → server/rpc-server}/sensitive.ts +17 -22
  113. package/src/{rpc-server → server/rpc-server}/session.ts +22 -23
  114. package/src/{rpc-server → server/rpc-server}/tracing.ts +15 -18
  115. package/src/{rpc-server/transport.ts → server/rpc-server/transportHeaders.ts} +3 -3
  116. package/src/{runtime/make.ts → server/runtime/makePlatform.ts} +18 -26
  117. package/src/server/runtime/types.ts +24 -0
  118. package/src/server/testing/makePlatformIt.ts +76 -0
  119. package/src/server/testing/types.ts +38 -0
  120. package/dist/better-auth/adapter.d.ts +0 -10
  121. package/dist/better-auth/adapter.d.ts.map +0 -1
  122. package/dist/better-auth/adapter.js.map +0 -1
  123. package/dist/better-auth/relation.d.ts.map +0 -1
  124. package/dist/better-auth/relation.js.map +0 -1
  125. package/dist/better-auth/row-adapter.d.ts +0 -8
  126. package/dist/better-auth/row-adapter.d.ts.map +0 -1
  127. package/dist/better-auth/row-adapter.js +0 -46
  128. package/dist/better-auth/row-adapter.js.map +0 -1
  129. package/dist/better-auth/where.d.ts.map +0 -1
  130. package/dist/better-auth/where.js.map +0 -1
  131. package/dist/better-auth.d.ts +0 -2
  132. package/dist/better-auth.d.ts.map +0 -1
  133. package/dist/better-auth.js +0 -2
  134. package/dist/better-auth.js.map +0 -1
  135. package/dist/errors/rejected-field.d.ts +0 -7
  136. package/dist/errors/rejected-field.d.ts.map +0 -1
  137. package/dist/errors/rejected-field.js.map +0 -1
  138. package/dist/errors.d.ts +0 -3
  139. package/dist/errors.d.ts.map +0 -1
  140. package/dist/errors.js +0 -3
  141. package/dist/errors.js.map +0 -1
  142. package/dist/node-http/subscription-signal.d.ts.map +0 -1
  143. package/dist/node-http/subscription-signal.js.map +0 -1
  144. package/dist/node-http.d.ts +0 -2
  145. package/dist/node-http.d.ts.map +0 -1
  146. package/dist/node-http.js +0 -2
  147. package/dist/node-http.js.map +0 -1
  148. package/dist/rpc-server/adapters/better-auth-sessions.d.ts +0 -4
  149. package/dist/rpc-server/adapters/better-auth-sessions.d.ts.map +0 -1
  150. package/dist/rpc-server/adapters/better-auth-sessions.js +0 -11
  151. package/dist/rpc-server/adapters/better-auth-sessions.js.map +0 -1
  152. package/dist/rpc-server/origin.d.ts.map +0 -1
  153. package/dist/rpc-server/origin.js +0 -12
  154. package/dist/rpc-server/origin.js.map +0 -1
  155. package/dist/rpc-server/redact-cause.d.ts +0 -6
  156. package/dist/rpc-server/redact-cause.d.ts.map +0 -1
  157. package/dist/rpc-server/redact-cause.js +0 -28
  158. package/dist/rpc-server/redact-cause.js.map +0 -1
  159. package/dist/rpc-server/redact.d.ts +0 -3
  160. package/dist/rpc-server/redact.d.ts.map +0 -1
  161. package/dist/rpc-server/redact.js.map +0 -1
  162. package/dist/rpc-server/sensitive.d.ts +0 -5
  163. package/dist/rpc-server/sensitive.d.ts.map +0 -1
  164. package/dist/rpc-server/sensitive.js.map +0 -1
  165. package/dist/rpc-server/session.d.ts +0 -21
  166. package/dist/rpc-server/session.d.ts.map +0 -1
  167. package/dist/rpc-server/session.js +0 -31
  168. package/dist/rpc-server/session.js.map +0 -1
  169. package/dist/rpc-server/tracing.d.ts.map +0 -1
  170. package/dist/rpc-server/tracing.js +0 -34
  171. package/dist/rpc-server/tracing.js.map +0 -1
  172. package/dist/rpc-server/transport.d.ts +0 -4
  173. package/dist/rpc-server/transport.d.ts.map +0 -1
  174. package/dist/rpc-server/transport.js +0 -4
  175. package/dist/rpc-server/transport.js.map +0 -1
  176. package/dist/rpc-server.d.ts +0 -9
  177. package/dist/rpc-server.d.ts.map +0 -1
  178. package/dist/rpc-server.js +0 -9
  179. package/dist/rpc-server.js.map +0 -1
  180. package/dist/rpc.d.ts +0 -3
  181. package/dist/rpc.d.ts.map +0 -1
  182. package/dist/rpc.js +0 -3
  183. package/dist/rpc.js.map +0 -1
  184. package/dist/runtime/make.d.ts +0 -4
  185. package/dist/runtime/make.d.ts.map +0 -1
  186. package/dist/runtime/make.js.map +0 -1
  187. package/dist/runtime/types.d.ts +0 -19
  188. package/dist/runtime/types.d.ts.map +0 -1
  189. package/dist/runtime.d.ts +0 -3
  190. package/dist/runtime.d.ts.map +0 -1
  191. package/dist/runtime.js +0 -2
  192. package/dist/runtime.js.map +0 -1
  193. package/dist/testing/types.d.ts +0 -26
  194. package/dist/testing/types.d.ts.map +0 -1
  195. package/dist/testing/vitest.d.ts +0 -8
  196. package/dist/testing/vitest.d.ts.map +0 -1
  197. package/dist/testing/vitest.js.map +0 -1
  198. package/dist/testing.d.ts +0 -3
  199. package/dist/testing.d.ts.map +0 -1
  200. package/dist/testing.js +0 -2
  201. package/dist/testing.js.map +0 -1
  202. package/src/better-auth.ts +0 -4
  203. package/src/errors.ts +0 -2
  204. package/src/node-http.ts +0 -5
  205. package/src/rpc-server/redact-cause.ts +0 -41
  206. package/src/rpc-server.ts +0 -15
  207. package/src/rpc.ts +0 -2
  208. package/src/runtime/types.ts +0 -24
  209. package/src/runtime.ts +0 -7
  210. package/src/testing/types.ts +0 -41
  211. package/src/testing/vitest.ts +0 -69
  212. package/src/testing.ts +0 -8
  213. /package/dist/{runtime → server/runtime}/types.js +0 -0
  214. /package/dist/{testing → server/testing}/types.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/platform",
3
- "version": "0.5.2",
3
+ "version": "0.6.1",
4
4
  "description": "Opinionated Effect application infrastructure for ShivaeDev services",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/platform#readme",
6
6
  "bugs": {
@@ -15,97 +15,367 @@
15
15
  "sideEffects": false,
16
16
  "type": "module",
17
17
  "imports": {
18
- "#test/*": "./test/*",
18
+ "#test/*": "./src/test-support/*",
19
19
  "#*.ts": {
20
20
  "source": "./src/*.ts",
21
21
  "types": "./dist/*.d.ts",
22
22
  "default": "./dist/*.js"
23
+ },
24
+ "#errors/*.ts": {
25
+ "source": "./src/errors/*.ts",
26
+ "types": "./dist/errors/*.d.ts",
27
+ "default": "./dist/errors/*.js"
28
+ },
29
+ "#node-http/*.ts": {
30
+ "source": "./src/server/node-http/*.ts",
31
+ "types": "./dist/server/node-http/*.d.ts",
32
+ "default": "./dist/server/node-http/*.js"
33
+ },
34
+ "#rpc/*.ts": {
35
+ "source": "./src/rpc/*.ts",
36
+ "types": "./dist/rpc/*.d.ts",
37
+ "default": "./dist/rpc/*.js"
38
+ },
39
+ "#rpc-server/*.ts": {
40
+ "source": "./src/server/rpc-server/*.ts",
41
+ "types": "./dist/server/rpc-server/*.d.ts",
42
+ "default": "./dist/server/rpc-server/*.js"
43
+ },
44
+ "#runtime/*.ts": {
45
+ "source": "./src/server/runtime/*.ts",
46
+ "types": "./dist/server/runtime/*.d.ts",
47
+ "default": "./dist/server/runtime/*.js"
48
+ },
49
+ "#appHost.ts": {
50
+ "source": "./src/server/appHost.ts",
51
+ "types": "./dist/server/appHost.d.ts",
52
+ "default": "./dist/server/appHost.js"
53
+ },
54
+ "#better-auth/adapter.ts": {
55
+ "source": "./src/server/better-auth/adapter.ts",
56
+ "types": "./dist/server/better-auth/adapter.d.ts",
57
+ "default": "./dist/server/better-auth/adapter.js"
58
+ },
59
+ "#better-auth/relation.ts": {
60
+ "source": "./src/server/better-auth/relation.ts",
61
+ "types": "./dist/server/better-auth/relation.d.ts",
62
+ "default": "./dist/server/better-auth/relation.js"
63
+ },
64
+ "#better-auth/row-adapter.ts": {
65
+ "source": "./src/server/better-auth/rowAdapter.ts",
66
+ "types": "./dist/server/better-auth/rowAdapter.d.ts",
67
+ "default": "./dist/server/better-auth/rowAdapter.js"
68
+ },
69
+ "#better-auth/where.ts": {
70
+ "source": "./src/server/better-auth/where.ts",
71
+ "types": "./dist/server/better-auth/where.d.ts",
72
+ "default": "./dist/server/better-auth/where.js"
73
+ },
74
+ "#errors/rejected-field.ts": {
75
+ "source": "./src/errors/rejectedField.ts",
76
+ "types": "./dist/errors/rejectedField.d.ts",
77
+ "default": "./dist/errors/rejectedField.js"
78
+ },
79
+ "#errors/taxonomy.ts": {
80
+ "source": "./src/errors/taxonomy.ts",
81
+ "types": "./dist/errors/taxonomy.d.ts",
82
+ "default": "./dist/errors/taxonomy.js"
83
+ },
84
+ "#node-http/subscription-signal.ts": {
85
+ "source": "./src/server/node-http/subscriptionSignal.ts",
86
+ "types": "./dist/server/node-http/subscriptionSignal.d.ts",
87
+ "default": "./dist/server/node-http/subscriptionSignal.js"
88
+ },
89
+ "#rpc-server/adapters/better-auth-sessions.ts": {
90
+ "source": "./src/server/rpc-server/adapters/betterAuthSessions.ts",
91
+ "types": "./dist/server/rpc-server/adapters/betterAuthSessions.d.ts",
92
+ "default": "./dist/server/rpc-server/adapters/betterAuthSessions.js"
93
+ },
94
+ "#rpc-server/boundary.ts": {
95
+ "source": "./src/server/rpc-server/boundary.ts",
96
+ "types": "./dist/server/rpc-server/boundary.d.ts",
97
+ "default": "./dist/server/rpc-server/boundary.js"
98
+ },
99
+ "#rpc-server/local.ts": {
100
+ "source": "./src/server/rpc-server/local.ts",
101
+ "types": "./dist/server/rpc-server/local.d.ts",
102
+ "default": "./dist/server/rpc-server/local.js"
103
+ },
104
+ "#rpc-server/origin.ts": {
105
+ "source": "./src/server/rpc-server/origin.ts",
106
+ "types": "./dist/server/rpc-server/origin.d.ts",
107
+ "default": "./dist/server/rpc-server/origin.js"
108
+ },
109
+ "#rpc-server/redact-cause.ts": {
110
+ "source": "./src/server/rpc-server/redactCause.ts",
111
+ "types": "./dist/server/rpc-server/redactCause.d.ts",
112
+ "default": "./dist/server/rpc-server/redactCause.js"
113
+ },
114
+ "#rpc-server/redact.ts": {
115
+ "source": "./src/server/rpc-server/redact.ts",
116
+ "types": "./dist/server/rpc-server/redact.d.ts",
117
+ "default": "./dist/server/rpc-server/redact.js"
118
+ },
119
+ "#rpc-server/sensitive.ts": {
120
+ "source": "./src/server/rpc-server/sensitive.ts",
121
+ "types": "./dist/server/rpc-server/sensitive.d.ts",
122
+ "default": "./dist/server/rpc-server/sensitive.js"
123
+ },
124
+ "#rpc-server/session.ts": {
125
+ "source": "./src/server/rpc-server/session.ts",
126
+ "types": "./dist/server/rpc-server/session.d.ts",
127
+ "default": "./dist/server/rpc-server/session.js"
128
+ },
129
+ "#rpc-server/tracing.ts": {
130
+ "source": "./src/server/rpc-server/tracing.ts",
131
+ "types": "./dist/server/rpc-server/tracing.d.ts",
132
+ "default": "./dist/server/rpc-server/tracing.js"
133
+ },
134
+ "#rpc-server/transport.ts": {
135
+ "source": "./src/server/rpc-server/transportHeaders.ts",
136
+ "types": "./dist/server/rpc-server/transportHeaders.d.ts",
137
+ "default": "./dist/server/rpc-server/transportHeaders.js"
138
+ },
139
+ "#rpc/identity.ts": {
140
+ "source": "./src/rpc/identity.ts",
141
+ "types": "./dist/rpc/identity.d.ts",
142
+ "default": "./dist/rpc/identity.js"
143
+ },
144
+ "#rpc/middleware.ts": {
145
+ "source": "./src/rpc/middleware.ts",
146
+ "types": "./dist/rpc/middleware.d.ts",
147
+ "default": "./dist/rpc/middleware.js"
148
+ },
149
+ "#runtime/make.ts": {
150
+ "source": "./src/server/runtime/makePlatform.ts",
151
+ "types": "./dist/server/runtime/makePlatform.d.ts",
152
+ "default": "./dist/server/runtime/makePlatform.js"
153
+ },
154
+ "#runtime/types.ts": {
155
+ "source": "./src/server/runtime/types.ts",
156
+ "types": "./dist/server/runtime/types.d.ts",
157
+ "default": "./dist/server/runtime/types.js"
158
+ },
159
+ "#testing/types.ts": {
160
+ "source": "./src/server/testing/types.ts",
161
+ "types": "./dist/server/testing/types.d.ts",
162
+ "default": "./dist/server/testing/types.js"
163
+ },
164
+ "#testing/vitest.ts": {
165
+ "source": "./src/server/testing/makePlatformIt.ts",
166
+ "types": "./dist/server/testing/makePlatformIt.d.ts",
167
+ "default": "./dist/server/testing/makePlatformIt.js"
23
168
  }
24
169
  },
25
170
  "exports": {
26
- "./better-auth": {
27
- "types": "./dist/better-auth.d.ts",
28
- "source": "./src/better-auth.ts",
29
- "import": "./dist/better-auth.js",
30
- "default": "./dist/better-auth.js"
31
- },
32
- "./runtime": {
33
- "types": "./dist/runtime.d.ts",
34
- "source": "./src/runtime.ts",
35
- "import": "./dist/runtime.js",
36
- "default": "./dist/runtime.js"
37
- },
38
- "./node-http": {
39
- "types": "./dist/node-http.d.ts",
40
- "source": "./src/node-http.ts",
41
- "import": "./dist/node-http.js",
42
- "default": "./dist/node-http.js"
43
- },
44
- "./testing": {
45
- "types": "./dist/testing.d.ts",
46
- "source": "./src/testing.ts",
47
- "import": "./dist/testing.js",
48
- "default": "./dist/testing.js"
49
- },
50
- "./errors": {
51
- "types": "./dist/errors.d.ts",
52
- "source": "./src/errors.ts",
53
- "import": "./dist/errors.js",
54
- "default": "./dist/errors.js"
55
- },
56
- "./rpc": {
57
- "types": "./dist/rpc.d.ts",
58
- "source": "./src/rpc.ts",
59
- "import": "./dist/rpc.js",
60
- "default": "./dist/rpc.js"
61
- },
62
- "./rpc-server": {
63
- "types": "./dist/rpc-server.d.ts",
64
- "source": "./src/rpc-server.ts",
65
- "import": "./dist/rpc-server.js",
66
- "default": "./dist/rpc-server.js"
171
+ "./appHost.ts": {
172
+ "types": "./dist/server/appHost.d.ts",
173
+ "source": "./src/server/appHost.ts",
174
+ "import": "./dist/server/appHost.js",
175
+ "default": "./dist/server/appHost.js"
176
+ },
177
+ "./better-auth/adapter.ts": {
178
+ "types": "./dist/server/better-auth/adapter.d.ts",
179
+ "source": "./src/server/better-auth/adapter.ts",
180
+ "import": "./dist/server/better-auth/adapter.js",
181
+ "default": "./dist/server/better-auth/adapter.js"
182
+ },
183
+ "./better-auth/relation.ts": {
184
+ "types": "./dist/server/better-auth/relation.d.ts",
185
+ "source": "./src/server/better-auth/relation.ts",
186
+ "import": "./dist/server/better-auth/relation.js",
187
+ "default": "./dist/server/better-auth/relation.js"
188
+ },
189
+ "./better-auth/row-adapter.ts": {
190
+ "types": "./dist/server/better-auth/rowAdapter.d.ts",
191
+ "source": "./src/server/better-auth/rowAdapter.ts",
192
+ "import": "./dist/server/better-auth/rowAdapter.js",
193
+ "default": "./dist/server/better-auth/rowAdapter.js"
194
+ },
195
+ "./better-auth/where.ts": {
196
+ "types": "./dist/server/better-auth/where.d.ts",
197
+ "source": "./src/server/better-auth/where.ts",
198
+ "import": "./dist/server/better-auth/where.js",
199
+ "default": "./dist/server/better-auth/where.js"
200
+ },
201
+ "./errors/rejected-field.ts": {
202
+ "types": "./dist/errors/rejectedField.d.ts",
203
+ "source": "./src/errors/rejectedField.ts",
204
+ "import": "./dist/errors/rejectedField.js",
205
+ "default": "./dist/errors/rejectedField.js"
206
+ },
207
+ "./errors/taxonomy.ts": {
208
+ "types": "./dist/errors/taxonomy.d.ts",
209
+ "source": "./src/errors/taxonomy.ts",
210
+ "import": "./dist/errors/taxonomy.js",
211
+ "default": "./dist/errors/taxonomy.js"
212
+ },
213
+ "./node-http/subscription-signal.ts": {
214
+ "types": "./dist/server/node-http/subscriptionSignal.d.ts",
215
+ "source": "./src/server/node-http/subscriptionSignal.ts",
216
+ "import": "./dist/server/node-http/subscriptionSignal.js",
217
+ "default": "./dist/server/node-http/subscriptionSignal.js"
218
+ },
219
+ "./rpc/identity.ts": {
220
+ "types": "./dist/rpc/identity.d.ts",
221
+ "source": "./src/rpc/identity.ts",
222
+ "import": "./dist/rpc/identity.js",
223
+ "default": "./dist/rpc/identity.js"
224
+ },
225
+ "./rpc/middleware.ts": {
226
+ "types": "./dist/rpc/middleware.d.ts",
227
+ "source": "./src/rpc/middleware.ts",
228
+ "import": "./dist/rpc/middleware.js",
229
+ "default": "./dist/rpc/middleware.js"
230
+ },
231
+ "./rpc-server/adapters/better-auth-sessions.ts": {
232
+ "types": "./dist/server/rpc-server/adapters/betterAuthSessions.d.ts",
233
+ "source": "./src/server/rpc-server/adapters/betterAuthSessions.ts",
234
+ "import": "./dist/server/rpc-server/adapters/betterAuthSessions.js",
235
+ "default": "./dist/server/rpc-server/adapters/betterAuthSessions.js"
236
+ },
237
+ "./rpc-server/boundary.ts": {
238
+ "types": "./dist/server/rpc-server/boundary.d.ts",
239
+ "source": "./src/server/rpc-server/boundary.ts",
240
+ "import": "./dist/server/rpc-server/boundary.js",
241
+ "default": "./dist/server/rpc-server/boundary.js"
242
+ },
243
+ "./rpc-server/local.ts": {
244
+ "types": "./dist/server/rpc-server/local.d.ts",
245
+ "source": "./src/server/rpc-server/local.ts",
246
+ "import": "./dist/server/rpc-server/local.js",
247
+ "default": "./dist/server/rpc-server/local.js"
248
+ },
249
+ "./rpc-server/origin.ts": {
250
+ "types": "./dist/server/rpc-server/origin.d.ts",
251
+ "source": "./src/server/rpc-server/origin.ts",
252
+ "import": "./dist/server/rpc-server/origin.js",
253
+ "default": "./dist/server/rpc-server/origin.js"
254
+ },
255
+ "./rpc-server/redact-cause.ts": {
256
+ "types": "./dist/server/rpc-server/redactCause.d.ts",
257
+ "source": "./src/server/rpc-server/redactCause.ts",
258
+ "import": "./dist/server/rpc-server/redactCause.js",
259
+ "default": "./dist/server/rpc-server/redactCause.js"
260
+ },
261
+ "./rpc-server/redact.ts": {
262
+ "types": "./dist/server/rpc-server/redact.d.ts",
263
+ "source": "./src/server/rpc-server/redact.ts",
264
+ "import": "./dist/server/rpc-server/redact.js",
265
+ "default": "./dist/server/rpc-server/redact.js"
266
+ },
267
+ "./rpc-server/sensitive.ts": {
268
+ "types": "./dist/server/rpc-server/sensitive.d.ts",
269
+ "source": "./src/server/rpc-server/sensitive.ts",
270
+ "import": "./dist/server/rpc-server/sensitive.js",
271
+ "default": "./dist/server/rpc-server/sensitive.js"
272
+ },
273
+ "./rpc-server/session.ts": {
274
+ "types": "./dist/server/rpc-server/session.d.ts",
275
+ "source": "./src/server/rpc-server/session.ts",
276
+ "import": "./dist/server/rpc-server/session.js",
277
+ "default": "./dist/server/rpc-server/session.js"
278
+ },
279
+ "./rpc-server/tracing.ts": {
280
+ "types": "./dist/server/rpc-server/tracing.d.ts",
281
+ "source": "./src/server/rpc-server/tracing.ts",
282
+ "import": "./dist/server/rpc-server/tracing.js",
283
+ "default": "./dist/server/rpc-server/tracing.js"
284
+ },
285
+ "./rpc-server/transport.ts": {
286
+ "types": "./dist/server/rpc-server/transportHeaders.d.ts",
287
+ "source": "./src/server/rpc-server/transportHeaders.ts",
288
+ "import": "./dist/server/rpc-server/transportHeaders.js",
289
+ "default": "./dist/server/rpc-server/transportHeaders.js"
290
+ },
291
+ "./runtime/make.ts": {
292
+ "types": "./dist/server/runtime/makePlatform.d.ts",
293
+ "source": "./src/server/runtime/makePlatform.ts",
294
+ "import": "./dist/server/runtime/makePlatform.js",
295
+ "default": "./dist/server/runtime/makePlatform.js"
296
+ },
297
+ "./runtime/types.ts": {
298
+ "types": "./dist/server/runtime/types.d.ts",
299
+ "source": "./src/server/runtime/types.ts",
300
+ "import": "./dist/server/runtime/types.js",
301
+ "default": "./dist/server/runtime/types.js"
302
+ },
303
+ "./testing/types.ts": {
304
+ "types": "./dist/server/testing/types.d.ts",
305
+ "source": "./src/server/testing/types.ts",
306
+ "import": "./dist/server/testing/types.js",
307
+ "default": "./dist/server/testing/types.js"
308
+ },
309
+ "./testing/vitest.ts": {
310
+ "types": "./dist/server/testing/makePlatformIt.d.ts",
311
+ "source": "./src/server/testing/makePlatformIt.ts",
312
+ "import": "./dist/server/testing/makePlatformIt.js",
313
+ "default": "./dist/server/testing/makePlatformIt.js"
67
314
  },
68
315
  "./package.json": "./package.json"
69
316
  },
70
317
  "files": [
71
318
  "dist",
72
319
  "src",
320
+ "!src/**/*.test.ts",
321
+ "!src/**/*.spec.ts",
322
+ "!src/**/test-support",
323
+ "docs",
73
324
  "CHANGELOG.md",
74
325
  "README.md"
75
326
  ],
327
+ "dependencies": {
328
+ "@shivaedev/effect-contract": "0.4.1",
329
+ "@shivaedev/effect-sql": "0.2.1",
330
+ "@shivaedev/types": "0.2.0"
331
+ },
76
332
  "devDependencies": {
333
+ "@effect/platform-node": "4.0.0-rc.112",
334
+ "@effect/sql-pg": "4.0.0-rc.112",
77
335
  "@effect/vitest": "4.0.0-rc.112",
78
336
  "@prisma-next/adapter-postgres": "0.15.0",
79
337
  "@prisma-next/contract": "0.15.0",
80
338
  "@prisma-next/postgres": "0.15.0",
81
339
  "@prisma-next/sql-contract": "0.15.0",
340
+ "@prisma-next/sql-orm-client": "0.15.0",
82
341
  "@prisma-next/target-postgres": "0.15.0",
83
- "@shivaedev/effect-prisma": "0.7.1",
84
- "@shivaedev/effect-trpc": "0.5.1",
85
- "@shivaedev/quality": "0.8.1",
86
- "@shivaedev/types": "0.1.1",
342
+ "@shivaedev/effect-prisma": "0.8.0",
343
+ "@shivaedev/effect-trpc": "0.6.1",
344
+ "@shivaedev/quality": "0.19.0",
87
345
  "@trpc/client": "11.18.0",
88
346
  "@trpc/server": "11.18.0",
89
- "@types/node": "24.10.1",
347
+ "@types/node": "24.19.1",
90
348
  "@typescript/native": "npm:typescript@7.0.2",
91
- "better-auth": "1.6.30",
349
+ "better-auth": "1.6.33",
92
350
  "effect": "4.0.0-rc.112",
93
351
  "superjson": "2.2.6",
94
352
  "typescript": "npm:@typescript/typescript6@6.0.2",
95
- "vitest": "4.1.9"
353
+ "vitest": "4.1.11"
96
354
  },
97
355
  "peerDependencies": {
356
+ "@effect/platform-node": "4.0.0-rc.112",
357
+ "@effect/sql-pg": "4.0.0-rc.112",
98
358
  "@effect/vitest": "4.0.0-rc.112",
99
- "@shivaedev/effect-prisma": "0.7.1",
100
- "@shivaedev/effect-trpc": "0.5.1",
359
+ "@prisma-next/sql-orm-client": "0.15.0",
360
+ "@shivaedev/effect-prisma": "0.8.0",
361
+ "@shivaedev/effect-trpc": "0.6.1",
101
362
  "@trpc/server": "11.18.0",
102
- "better-auth": "1.6.30",
363
+ "better-auth": "1.6.33",
103
364
  "effect": "4.0.0-rc.112"
104
365
  },
105
366
  "peerDependenciesMeta": {
367
+ "@effect/platform-node": {
368
+ "optional": true
369
+ },
370
+ "@effect/sql-pg": {
371
+ "optional": true
372
+ },
106
373
  "@effect/vitest": {
107
374
  "optional": true
108
375
  },
376
+ "@prisma-next/sql-orm-client": {
377
+ "optional": true
378
+ },
109
379
  "@shivaedev/effect-prisma": {
110
380
  "optional": true
111
381
  },
@@ -127,7 +397,7 @@
127
397
  "provenance": true
128
398
  },
129
399
  "scripts": {
130
- "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc6 --project tsconfig.build.json",
400
+ "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc --project tsconfig.build.json",
131
401
  "ready": "pnpm typecheck && pnpm test && pnpm build",
132
402
  "test": "vitest run",
133
403
  "typecheck": "tsc --noEmit"
@@ -1,13 +1,10 @@
1
1
  import { Option, Schema } from "effect";
2
-
3
2
  export interface RejectedField {
4
3
  readonly field: string;
5
4
  readonly message: string;
6
5
  }
7
-
8
6
  const Rejected = Schema.Struct({ _tag: Schema.String, field: Schema.String, message: Schema.String });
9
-
10
7
  const decode = Schema.decodeUnknownOption(Rejected);
11
-
12
- export const rejectedField = (error: unknown): Option.Option<RejectedField> =>
13
- Option.map(decode(error), ({ field, message }) => ({ field, message }));
8
+ export function rejectedField(error: unknown): Option.Option<RejectedField> {
9
+ return Option.map(decode(error), ({ field, message }) => ({ field, message }));
10
+ }
@@ -2,19 +2,13 @@ import { Schema } from "effect";
2
2
 
3
3
  const described = { message: Schema.String };
4
4
  const perField = { field: Schema.optionalKey(Schema.String), message: Schema.String };
5
-
6
5
  export class NotFound extends Schema.TaggedError<NotFound>()("NotFound", described) {}
7
-
8
6
  export class Unauthorized extends Schema.TaggedError<Unauthorized>()("Unauthorized", described) {}
9
-
10
7
  export class Forbidden extends Schema.TaggedError<Forbidden>()("Forbidden", described) {}
11
-
12
8
  export class BadRequest extends Schema.TaggedError<BadRequest>()("BadRequest", perField) {}
13
-
14
9
  export class Conflict extends Schema.TaggedError<Conflict>()("Conflict", perField) {}
15
-
16
10
  export class PreconditionFailed extends Schema.TaggedError<PreconditionFailed>()("PreconditionFailed", described) {}
17
-
18
11
  export class TooManyRequests extends Schema.TaggedError<TooManyRequests>()("TooManyRequests", described) {}
19
-
20
12
  export class AuthUnavailable extends Schema.TaggedError<AuthUnavailable>()("AuthUnavailable", described) {}
13
+ export class InternalServerError extends Schema.TaggedError<InternalServerError>()("InternalServerError", described) {}
14
+ export class ServiceUnavailable extends Schema.TaggedError<ServiceUnavailable>()("ServiceUnavailable", described) {}
@@ -1,11 +1,7 @@
1
1
  import { Context, type Option } from "effect";
2
-
3
2
  export class RequestId extends Context.Service<RequestId, string>()("@shivaedev/platform/rpc/RequestId") {}
4
-
5
3
  export interface IdentityValue {
6
4
  readonly id: string;
7
5
  }
8
-
9
6
  export class Identity extends Context.Service<Identity, IdentityValue>()("@shivaedev/platform/rpc/Identity") {}
10
-
11
7
  export class OptionalIdentity extends Context.Service<OptionalIdentity, Option.Option<IdentityValue>>()("@shivaedev/platform/rpc/OptionalIdentity") {}
@@ -2,14 +2,23 @@ import { Schema } from "effect";
2
2
  import { RpcMiddleware } from "effect/unstable/rpc";
3
3
  import { AuthUnavailable, Forbidden, Unauthorized } from "#errors/taxonomy.ts";
4
4
  import type { Identity, OptionalIdentity, RequestId } from "./identity.ts";
5
-
6
- export class RequestTracing extends RpcMiddleware.Service<RequestTracing, { provides: RequestId }>()("@shivaedev/platform/rpc/RequestTracing") {}
7
-
8
- export class Authenticated extends RpcMiddleware.Service<Authenticated, { provides: Identity }>()("@shivaedev/platform/rpc/Authenticated", {
5
+ export class RequestTracing extends RpcMiddleware.Service<
6
+ RequestTracing,
7
+ {
8
+ provides: RequestId;
9
+ }
10
+ >()("@shivaedev/platform/rpc/RequestTracing") {}
11
+ export class Authenticated extends RpcMiddleware.Service<
12
+ Authenticated,
13
+ {
14
+ provides: Identity;
15
+ }
16
+ >()("@shivaedev/platform/rpc/Authenticated", {
9
17
  error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]),
10
18
  }) {}
11
-
12
- export class MaybeAuthenticated extends RpcMiddleware.Service<MaybeAuthenticated, { provides: OptionalIdentity }>()(
13
- "@shivaedev/platform/rpc/MaybeAuthenticated",
14
- { error: Schema.Union([AuthUnavailable, Forbidden]) },
15
- ) {}
19
+ export class MaybeAuthenticated extends RpcMiddleware.Service<
20
+ MaybeAuthenticated,
21
+ {
22
+ provides: OptionalIdentity;
23
+ }
24
+ >()("@shivaedev/platform/rpc/MaybeAuthenticated", { error: Schema.Union([AuthUnavailable, Forbidden]) }) {}
@@ -0,0 +1,134 @@
1
+ import { createServer } from "node:http";
2
+ import { NodeHttpServer, NodeServices } from "@effect/platform-node";
3
+ import * as PgClient from "@effect/sql-pg/PgClient";
4
+ import { Config, Context, type Duration, Effect, Layer, Option, type Redacted } from "effect";
5
+ import { HttpRouter, HttpServerRequest, HttpStaticServer } from "effect/unstable/http";
6
+ import * as Reactivity from "effect/unstable/reactivity/Reactivity";
7
+ import { type Rpc, type RpcGroup, RpcSerialization, RpcServer } from "effect/unstable/rpc";
8
+ import type { Migrator } from "effect/unstable/sql";
9
+ import { makeLiveServer } from "@shivaedev/effect-contract/makeLiveServer.ts";
10
+ import { migratePostgres } from "@shivaedev/effect-sql/migrations.ts";
11
+ import { type PostgresChangesOptions, postgresChanges } from "@shivaedev/effect-sql/postgresChanges.ts";
12
+ import type { Authenticated, MaybeAuthenticated, RequestTracing } from "#rpc/middleware.ts";
13
+ import { localRpcGuard } from "#rpc-server/local.ts";
14
+ import { authenticatedLayer, maybeAuthenticatedLayer, type SessionPolicy, type SessionShape } from "#rpc-server/session.ts";
15
+ import { requestTracingLayer } from "#rpc-server/tracing.ts";
16
+ export class AppChanges extends Context.Service<AppChanges, Effect.Success<typeof makeLiveServer>>()("@shivaedev/platform/AppChanges") {}
17
+ export interface AppDatabaseOptions<R = never> {
18
+ readonly config?: {
19
+ readonly databaseUrl?: Redacted.Redacted<string>;
20
+ readonly applicationName?: string;
21
+ readonly changes?: Omit<PostgresChangesOptions, "client" | "resync">;
22
+ };
23
+ readonly migrations: {
24
+ readonly loader: Migrator.Loader<R>;
25
+ readonly table?: string;
26
+ readonly lockTimeout?: Duration.Input;
27
+ };
28
+ }
29
+ export function appDatabase<R>(options: AppDatabaseOptions<R>) {
30
+ const pool = Layer.unwrap(
31
+ Effect.gen(function* () {
32
+ const url = options.config?.databaseUrl ?? (yield* Config.redacted("DATABASE_URL"));
33
+ return PgClient.layer({
34
+ url,
35
+ ...(options.config?.applicationName === undefined ? {} : { applicationName: options.config.applicationName }),
36
+ });
37
+ }),
38
+ );
39
+ const migrated = Layer.effectDiscard(migratePostgres({ ...options.migrations, lockTimeout: options.migrations.lockTimeout ?? "5 seconds" })).pipe(
40
+ Layer.provideMerge(pool),
41
+ );
42
+ const live = Layer.effect(AppChanges, makeLiveServer).pipe(Layer.provideMerge(Reactivity.layer));
43
+ const base = Layer.merge(migrated, live);
44
+ const changes = options.config?.changes;
45
+ if (changes === undefined) {
46
+ return base;
47
+ }
48
+ return Layer.unwrap(
49
+ Effect.gen(function* () {
50
+ const client = yield* PgClient.PgClient;
51
+ const hints = yield* AppChanges;
52
+ return postgresChanges({ ...changes, client, resync: hints.resync });
53
+ }),
54
+ ).pipe(Layer.provideMerge(base));
55
+ }
56
+ export interface AppHostOptions<
57
+ TRpcs extends Rpc.Any,
58
+ THandlers,
59
+ THandlerError,
60
+ THandlerRequirements,
61
+ TServices,
62
+ TServiceError,
63
+ TServiceRequirements,
64
+ TMigrations,
65
+ TSession extends SessionShape,
66
+ > extends AppDatabaseOptions<TMigrations> {
67
+ readonly assets?: string;
68
+ readonly config?: AppDatabaseOptions<TMigrations>["config"] & {
69
+ readonly port?: number;
70
+ readonly host?: string;
71
+ readonly trustedProxy?: string;
72
+ };
73
+ readonly group: RpcGroup.RpcGroup<TRpcs>;
74
+ readonly handlers: Layer.Layer<THandlers, THandlerError, THandlerRequirements>;
75
+ readonly services: Layer.Layer<TServices, TServiceError, TServiceRequirements>;
76
+ readonly sessions: SessionPolicy<TSession>;
77
+ }
78
+ export function appHost<
79
+ TRpcs extends Rpc.Any,
80
+ THandlers,
81
+ THandlerError,
82
+ THandlerRequirements,
83
+ TServices,
84
+ TServiceError,
85
+ TServiceRequirements,
86
+ TMigrations,
87
+ TSession extends SessionShape,
88
+ >(
89
+ options: AppHostOptions<
90
+ TRpcs,
91
+ THandlers,
92
+ THandlerError,
93
+ THandlerRequirements,
94
+ TServices,
95
+ TServiceError,
96
+ TServiceRequirements,
97
+ TMigrations,
98
+ TSession
99
+ >,
100
+ ) {
101
+ // Named middleware types keep NodeNext declarations on the package aliases.
102
+ const middleware: Layer.Layer<Authenticated | MaybeAuthenticated | RequestTracing> = Layer.mergeAll(
103
+ authenticatedLayer(options.sessions),
104
+ maybeAuthenticatedLayer(options.sessions),
105
+ requestTracingLayer(),
106
+ );
107
+ const routes = HttpRouter.use((router) =>
108
+ Effect.gen(function* () {
109
+ const trustedProxy = options.config?.trustedProxy ?? Option.getOrUndefined(yield* Config.string("TRUSTED_PROXY").pipe(Config.option));
110
+ const wire = yield* RpcSerialization.RpcSerialization;
111
+ const handler = yield* RpcServer.toHttpEffect(options.group);
112
+ yield* router.add("POST", "/rpc", (request) =>
113
+ localRpcGuard(handler, trustedProxy).pipe(
114
+ Effect.provideService(HttpServerRequest.HttpServerRequest, request),
115
+ Effect.provideService(RpcSerialization.RpcSerialization, wire),
116
+ ),
117
+ );
118
+ }),
119
+ ).pipe(Layer.provide(Layer.merge(options.handlers, middleware)), Layer.provide(RpcSerialization.layerNdjson));
120
+ const assets = options.assets === undefined ? Layer.empty : HttpStaticServer.layer({ root: options.assets });
121
+ const application = options.services.pipe(Layer.provideMerge(appDatabase(options)));
122
+ const server = Layer.unwrap(
123
+ Effect.gen(function* () {
124
+ const port = options.config?.port ?? (yield* Config.int("PORT").pipe(Config.withDefault(3000)));
125
+ const host = options.config?.host ?? (yield* Config.string("HOST").pipe(Config.withDefault("127.0.0.1")));
126
+ return NodeHttpServer.layer(createServer, { host, port });
127
+ }),
128
+ );
129
+ return HttpRouter.serve(Layer.merge(routes, assets), { disableLogger: true }).pipe(
130
+ Layer.provideMerge(application),
131
+ Layer.provideMerge(server),
132
+ Layer.provide(NodeServices.layer),
133
+ );
134
+ }