@shivaedev/platform 0.6.0 → 0.7.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 (204) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +371 -112
  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 +1 -1
  14. package/dist/rpc/middleware.d.ts.map +1 -1
  15. package/dist/rpc/middleware.js +1 -1
  16. package/dist/rpc/middleware.js.map +1 -1
  17. package/dist/server/appHost.d.ts +61 -0
  18. package/dist/server/appHost.d.ts.map +1 -0
  19. package/dist/server/appHost.js +14 -0
  20. package/dist/server/appHost.js.map +1 -0
  21. package/dist/server/appHostHttp.d.ts +11 -0
  22. package/dist/server/appHostHttp.d.ts.map +1 -0
  23. package/dist/server/appHostHttp.js +51 -0
  24. package/dist/server/appHostHttp.js.map +1 -0
  25. package/dist/{better-auth → server/better-auth}/adapter.d.ts +1 -1
  26. package/dist/server/better-auth/adapter.d.ts.map +1 -0
  27. package/dist/{better-auth → server/better-auth}/adapter.js +26 -14
  28. package/dist/server/better-auth/adapter.js.map +1 -0
  29. package/dist/{better-auth → server/better-auth}/relation.d.ts +15 -15
  30. package/dist/server/better-auth/relation.d.ts.map +1 -0
  31. package/dist/{better-auth → server/better-auth}/relation.js +2 -2
  32. package/dist/server/better-auth/relation.js.map +1 -0
  33. package/dist/server/better-auth/rowAdapter.d.ts +8 -0
  34. package/dist/server/better-auth/rowAdapter.d.ts.map +1 -0
  35. package/dist/server/better-auth/rowAdapter.js +52 -0
  36. package/dist/server/better-auth/rowAdapter.js.map +1 -0
  37. package/dist/{better-auth → server/better-auth}/where.d.ts +1 -1
  38. package/dist/server/better-auth/where.d.ts.map +1 -0
  39. package/dist/{better-auth → server/better-auth}/where.js +22 -18
  40. package/dist/server/better-auth/where.js.map +1 -0
  41. package/dist/server/boundedRpcRequest.d.ts +3 -0
  42. package/dist/server/boundedRpcRequest.d.ts.map +1 -0
  43. package/dist/server/boundedRpcRequest.js +41 -0
  44. package/dist/server/boundedRpcRequest.js.map +1 -0
  45. package/dist/server/databaseLayer.d.ts +6 -0
  46. package/dist/server/databaseLayer.d.ts.map +1 -0
  47. package/dist/server/databaseLayer.js +29 -0
  48. package/dist/server/databaseLayer.js.map +1 -0
  49. package/dist/server/hostOptions.d.ts +28 -0
  50. package/dist/server/hostOptions.d.ts.map +1 -0
  51. package/dist/server/hostOptions.js +2 -0
  52. package/dist/server/hostOptions.js.map +1 -0
  53. package/dist/{node-http/subscription-signal.d.ts → server/node-http/subscriptionSignal.d.ts} +2 -2
  54. package/dist/server/node-http/subscriptionSignal.d.ts.map +1 -0
  55. package/dist/{node-http/subscription-signal.js → server/node-http/subscriptionSignal.js} +20 -13
  56. package/dist/server/node-http/subscriptionSignal.js.map +1 -0
  57. package/dist/server/rpc-server/adapters/betterAuthSessions.d.ts +4 -0
  58. package/dist/server/rpc-server/adapters/betterAuthSessions.d.ts.map +1 -0
  59. package/dist/server/rpc-server/adapters/betterAuthSessions.js +14 -0
  60. package/dist/server/rpc-server/adapters/betterAuthSessions.js.map +1 -0
  61. package/dist/server/rpc-server/boundary.d.ts +9 -0
  62. package/dist/server/rpc-server/boundary.d.ts.map +1 -0
  63. package/dist/server/rpc-server/boundary.js +18 -0
  64. package/dist/server/rpc-server/boundary.js.map +1 -0
  65. package/dist/server/rpc-server/local.d.ts +7 -0
  66. package/dist/server/rpc-server/local.d.ts.map +1 -0
  67. package/dist/server/rpc-server/local.js +70 -0
  68. package/dist/server/rpc-server/local.js.map +1 -0
  69. package/dist/{rpc-server → server/rpc-server}/origin.d.ts +3 -3
  70. package/dist/server/rpc-server/origin.d.ts.map +1 -0
  71. package/dist/server/rpc-server/origin.js +16 -0
  72. package/dist/server/rpc-server/origin.js.map +1 -0
  73. package/dist/server/rpc-server/redact.d.ts +3 -0
  74. package/dist/server/rpc-server/redact.d.ts.map +1 -0
  75. package/dist/{rpc-server → server/rpc-server}/redact.js +9 -7
  76. package/dist/server/rpc-server/redact.js.map +1 -0
  77. package/dist/server/rpc-server/redactCause.d.ts +6 -0
  78. package/dist/server/rpc-server/redactCause.d.ts.map +1 -0
  79. package/dist/server/rpc-server/redactCause.js +36 -0
  80. package/dist/server/rpc-server/redactCause.js.map +1 -0
  81. package/dist/server/rpc-server/sensitive.d.ts +5 -0
  82. package/dist/server/rpc-server/sensitive.d.ts.map +1 -0
  83. package/dist/{rpc-server → server/rpc-server}/sensitive.js +21 -17
  84. package/dist/server/rpc-server/sensitive.js.map +1 -0
  85. package/dist/server/rpc-server/session.d.ts +21 -0
  86. package/dist/server/rpc-server/session.d.ts.map +1 -0
  87. package/dist/server/rpc-server/session.js +37 -0
  88. package/dist/server/rpc-server/session.js.map +1 -0
  89. package/dist/{rpc-server → server/rpc-server}/tracing.d.ts +1 -1
  90. package/dist/server/rpc-server/tracing.d.ts.map +1 -0
  91. package/dist/server/rpc-server/tracing.js +42 -0
  92. package/dist/server/rpc-server/tracing.js.map +1 -0
  93. package/dist/server/rpc-server/transportHeaders.d.ts +4 -0
  94. package/dist/server/rpc-server/transportHeaders.d.ts.map +1 -0
  95. package/dist/server/rpc-server/transportHeaders.js +6 -0
  96. package/dist/server/rpc-server/transportHeaders.js.map +1 -0
  97. package/dist/server/rpc-server/trustedProxy.d.ts +6 -0
  98. package/dist/server/rpc-server/trustedProxy.d.ts.map +1 -0
  99. package/dist/server/rpc-server/trustedProxy.js +35 -0
  100. package/dist/server/rpc-server/trustedProxy.js.map +1 -0
  101. package/dist/server/runtime/makePlatform.d.ts +4 -0
  102. package/dist/server/runtime/makePlatform.d.ts.map +1 -0
  103. package/dist/{runtime/make.js → server/runtime/makePlatform.js} +11 -9
  104. package/dist/server/runtime/makePlatform.js.map +1 -0
  105. package/dist/server/runtime/types.d.ts +19 -0
  106. package/dist/server/runtime/types.d.ts.map +1 -0
  107. package/dist/{runtime → server/runtime}/types.js.map +1 -1
  108. package/dist/server/testing/makePlatformIt.d.ts +8 -0
  109. package/dist/server/testing/makePlatformIt.d.ts.map +1 -0
  110. package/dist/{testing/vitest.js → server/testing/makePlatformIt.js} +7 -3
  111. package/dist/server/testing/makePlatformIt.js.map +1 -0
  112. package/dist/server/testing/types.d.ts +28 -0
  113. package/dist/server/testing/types.d.ts.map +1 -0
  114. package/dist/{testing → server/testing}/types.js.map +1 -1
  115. package/docs/north-star.md +36 -0
  116. package/docs/roadmap.md +30 -0
  117. package/package.json +333 -32
  118. package/src/errors/{rejected-field.ts → rejectedField.ts} +3 -6
  119. package/src/errors/taxonomy.ts +2 -8
  120. package/src/rpc/identity.ts +0 -4
  121. package/src/rpc/middleware.ts +19 -10
  122. package/src/server/appHost.ts +130 -0
  123. package/src/server/appHostHttp.ts +101 -0
  124. package/src/{better-auth → server/better-auth}/adapter.ts +26 -30
  125. package/src/{better-auth → server/better-auth}/relation.ts +17 -19
  126. package/src/{better-auth/row-adapter.ts → server/better-auth/rowAdapter.ts} +19 -21
  127. package/src/{better-auth → server/better-auth}/where.ts +22 -32
  128. package/src/server/boundedRpcRequest.ts +47 -0
  129. package/src/server/databaseLayer.ts +36 -0
  130. package/src/server/hostOptions.ts +25 -0
  131. package/src/{node-http/subscription-signal.ts → server/node-http/subscriptionSignal.ts} +19 -22
  132. package/src/{rpc-server/adapters/better-auth-sessions.ts → server/rpc-server/adapters/betterAuthSessions.ts} +10 -11
  133. package/src/server/rpc-server/boundary.ts +26 -0
  134. package/src/server/rpc-server/local.ts +72 -0
  135. package/src/{rpc-server → server/rpc-server}/origin.ts +11 -14
  136. package/src/{rpc-server → server/rpc-server}/redact.ts +9 -11
  137. package/src/server/rpc-server/redactCause.ts +40 -0
  138. package/src/{rpc-server → server/rpc-server}/sensitive.ts +17 -22
  139. package/src/{rpc-server → server/rpc-server}/session.ts +23 -24
  140. package/src/{rpc-server → server/rpc-server}/tracing.ts +16 -19
  141. package/src/{rpc-server/transport.ts → server/rpc-server/transportHeaders.ts} +4 -4
  142. package/src/server/rpc-server/trustedProxy.ts +36 -0
  143. package/src/{runtime/make.ts → server/runtime/makePlatform.ts} +19 -27
  144. package/src/server/runtime/types.ts +24 -0
  145. package/src/{testing/vitest.ts → server/testing/makePlatformIt.ts} +27 -23
  146. package/src/server/testing/types.ts +38 -0
  147. package/dist/better-auth/adapter.d.ts.map +0 -1
  148. package/dist/better-auth/adapter.js.map +0 -1
  149. package/dist/better-auth/relation.d.ts.map +0 -1
  150. package/dist/better-auth/relation.js.map +0 -1
  151. package/dist/better-auth/row-adapter.d.ts +0 -8
  152. package/dist/better-auth/row-adapter.d.ts.map +0 -1
  153. package/dist/better-auth/row-adapter.js +0 -46
  154. package/dist/better-auth/row-adapter.js.map +0 -1
  155. package/dist/better-auth/where.d.ts.map +0 -1
  156. package/dist/better-auth/where.js.map +0 -1
  157. package/dist/errors/rejected-field.d.ts +0 -7
  158. package/dist/errors/rejected-field.d.ts.map +0 -1
  159. package/dist/errors/rejected-field.js.map +0 -1
  160. package/dist/node-http/subscription-signal.d.ts.map +0 -1
  161. package/dist/node-http/subscription-signal.js.map +0 -1
  162. package/dist/rpc-server/adapters/better-auth-sessions.d.ts +0 -4
  163. package/dist/rpc-server/adapters/better-auth-sessions.d.ts.map +0 -1
  164. package/dist/rpc-server/adapters/better-auth-sessions.js +0 -11
  165. package/dist/rpc-server/adapters/better-auth-sessions.js.map +0 -1
  166. package/dist/rpc-server/origin.d.ts.map +0 -1
  167. package/dist/rpc-server/origin.js +0 -12
  168. package/dist/rpc-server/origin.js.map +0 -1
  169. package/dist/rpc-server/redact-cause.d.ts +0 -6
  170. package/dist/rpc-server/redact-cause.d.ts.map +0 -1
  171. package/dist/rpc-server/redact-cause.js +0 -28
  172. package/dist/rpc-server/redact-cause.js.map +0 -1
  173. package/dist/rpc-server/redact.d.ts +0 -3
  174. package/dist/rpc-server/redact.d.ts.map +0 -1
  175. package/dist/rpc-server/redact.js.map +0 -1
  176. package/dist/rpc-server/sensitive.d.ts +0 -5
  177. package/dist/rpc-server/sensitive.d.ts.map +0 -1
  178. package/dist/rpc-server/sensitive.js.map +0 -1
  179. package/dist/rpc-server/session.d.ts +0 -21
  180. package/dist/rpc-server/session.d.ts.map +0 -1
  181. package/dist/rpc-server/session.js +0 -31
  182. package/dist/rpc-server/session.js.map +0 -1
  183. package/dist/rpc-server/tracing.d.ts.map +0 -1
  184. package/dist/rpc-server/tracing.js +0 -34
  185. package/dist/rpc-server/tracing.js.map +0 -1
  186. package/dist/rpc-server/transport.d.ts +0 -4
  187. package/dist/rpc-server/transport.d.ts.map +0 -1
  188. package/dist/rpc-server/transport.js +0 -4
  189. package/dist/rpc-server/transport.js.map +0 -1
  190. package/dist/runtime/make.d.ts +0 -4
  191. package/dist/runtime/make.d.ts.map +0 -1
  192. package/dist/runtime/make.js.map +0 -1
  193. package/dist/runtime/types.d.ts +0 -19
  194. package/dist/runtime/types.d.ts.map +0 -1
  195. package/dist/testing/types.d.ts +0 -28
  196. package/dist/testing/types.d.ts.map +0 -1
  197. package/dist/testing/vitest.d.ts +0 -8
  198. package/dist/testing/vitest.d.ts.map +0 -1
  199. package/dist/testing/vitest.js.map +0 -1
  200. package/src/rpc-server/redact-cause.ts +0 -41
  201. package/src/runtime/types.ts +0 -24
  202. package/src/testing/types.ts +0 -43
  203. /package/dist/{runtime → server/runtime}/types.js +0 -0
  204. /package/dist/{testing → server/testing}/types.js +0 -0
@@ -1,43 +1,47 @@
1
1
  import { all, and, not, or } from "@prisma-next/sql-orm-client";
2
- const escapeLike = (value) => value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
3
- const nonNullValues = (value) => (Array.isArray(value) ? value : [value]).filter((item) => item !== null);
4
- const insensitiveStrings = (field, where, values) => {
2
+ function escapeLike(value) {
3
+ return value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
4
+ }
5
+ function nonNullValues(value) {
6
+ return (Array.isArray(value) ? value : [value]).filter((item) => item !== null);
7
+ }
8
+ function insensitiveStrings(field, where, values) {
5
9
  const ilike = field.ilike;
6
10
  if (where.mode !== "insensitive" || ilike === undefined || !values.every((item) => typeof item === "string")) {
7
11
  return undefined;
8
12
  }
9
13
  return values.map((item) => ilike(escapeLike(String(item))));
10
- };
11
- const membership = (field, where) => {
14
+ }
15
+ function membership(field, where) {
12
16
  const values = nonNullValues(where.value);
13
17
  if (values.length === 0) {
14
18
  return and(field.isNull(), field.isNotNull());
15
19
  }
16
20
  const matches = insensitiveStrings(field, where, values);
17
21
  return matches === undefined ? field.in(values) : or(...matches);
18
- };
19
- const exclusion = (field, where) => {
22
+ }
23
+ function exclusion(field, where) {
20
24
  const values = nonNullValues(where.value);
21
25
  if (values.length === 0) {
22
26
  return undefined;
23
27
  }
24
28
  const matches = insensitiveStrings(field, where, values);
25
29
  return matches === undefined ? field.notIn(values) : and(...matches.map((match) => not(match)));
26
- };
27
- const likePattern = (operator, escaped) => {
30
+ }
31
+ function likePattern(operator, escaped) {
28
32
  if (operator === "contains") {
29
33
  return `%${escaped}%`;
30
34
  }
31
35
  return operator === "starts_with" ? `${escaped}%` : `%${escaped}`;
32
- };
33
- const pattern = (field, where) => {
36
+ }
37
+ function pattern(field, where) {
34
38
  if (typeof where.value !== "string") {
35
39
  throw new TypeError(`${where.operator} requires a string value`);
36
40
  }
37
41
  const text = likePattern(where.operator, escapeLike(where.value));
38
42
  return where.mode === "insensitive" && field.ilike !== undefined ? field.ilike(text) : field.like(text);
39
- };
40
- const insensitiveEquality = (field, where) => {
43
+ }
44
+ function insensitiveEquality(field, where) {
41
45
  const value = where.value;
42
46
  const operator = where.operator ?? "eq";
43
47
  if (where.mode !== "insensitive" || typeof value !== "string" || field.ilike === undefined) {
@@ -50,8 +54,8 @@ const insensitiveEquality = (field, where) => {
50
54
  return not(field.ilike(escapeLike(value)));
51
55
  }
52
56
  return undefined;
53
- };
54
- const comparison = (field, where) => {
57
+ }
58
+ function comparison(field, where) {
55
59
  const value = where.value;
56
60
  switch (where.operator ?? "eq") {
57
61
  case "eq":
@@ -75,8 +79,8 @@ const comparison = (field, where) => {
75
79
  case "ends_with":
76
80
  return pattern(field, where);
77
81
  }
78
- };
79
- export const whereExpression = (fields, where) => {
82
+ }
83
+ export function whereExpression(fields, where) {
80
84
  const conjunctions = [];
81
85
  const disjunctions = [];
82
86
  for (const condition of where) {
@@ -97,5 +101,5 @@ export const whereExpression = (fields, where) => {
97
101
  return all();
98
102
  }
99
103
  return conjunctions.length === 1 ? conjunctions[0] : and(...conjunctions);
100
- };
104
+ }
101
105
  //# sourceMappingURL=where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.js","sourceRoot":"","sources":["../../../src/server/better-auth/where.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type HttpServerRequest } from "effect/http";
2
+ export declare function boundedRpcRequest(request: HttpServerRequest.HttpServerRequest): HttpServerRequest.HttpServerRequest;
3
+ //# sourceMappingURL=boundedRpcRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundedRpcRequest.d.ts","sourceRoot":"","sources":["../../src/server/boundedRpcRequest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,CA0CnH"}
@@ -0,0 +1,41 @@
1
+ import { NodeHttpServerRequest, NodeStream } from "@effect/platform-node";
2
+ import { Effect, Stream } from "effect";
3
+ import { HttpIncomingMessage, HttpServerError } from "effect/http";
4
+ export function boundedRpcRequest(request) {
5
+ const incoming = NodeHttpServerRequest.toIncomingMessage(request);
6
+ function error(cause) {
7
+ return new HttpServerError.HttpServerError({ reason: new HttpServerError.RequestParseError({ cause, request }) });
8
+ }
9
+ const text = Effect.gen(function* () {
10
+ const limit = yield* HttpIncomingMessage.MaxBodySize;
11
+ const chunks = [];
12
+ let size = 0n;
13
+ yield* NodeStream.fromReadable({
14
+ closeOnDone: false,
15
+ evaluate: () => incoming,
16
+ onError: error,
17
+ }).pipe(Stream.runForEach((chunk) => {
18
+ size += BigInt(chunk.byteLength);
19
+ if (limit !== undefined && size > limit) {
20
+ return Effect.fail(error(new Error("RPC body exceeds MAX_BODY_SIZE")));
21
+ }
22
+ chunks.push(chunk);
23
+ return Effect.void;
24
+ }));
25
+ return Buffer.concat(chunks).toString("utf8");
26
+ }).pipe(Effect.onError(() => Effect.sync(() => incoming.resume())), Effect.cached, Effect.runSync);
27
+ const arrayBuffer = Effect.map(text, (body) => new TextEncoder().encode(body).buffer);
28
+ // The native text reader destroys the HTTP socket on overflow, preventing a 4xx response.
29
+ return new Proxy(request, {
30
+ get: (target, key, receiver) => {
31
+ if (key === "text") {
32
+ return text;
33
+ }
34
+ if (key === "arrayBuffer") {
35
+ return arrayBuffer;
36
+ }
37
+ return Reflect.get(target, key, receiver);
38
+ },
39
+ });
40
+ }
41
+ //# sourceMappingURL=boundedRpcRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundedRpcRequest.js","sourceRoot":"","sources":["../../src/server/boundedRpcRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAE3F,MAAM,UAAU,iBAAiB,CAAC,OAA4C;IAC7E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClE,SAAS,KAAK,CAAC,KAAc;QAC5B,OAAO,IAAI,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,eAAe,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC;QACrD,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAA8C;YAC3E,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK;SACd,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBACzC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,MAAM,CAAC,IAAI,CAAC;QACpB,CAAC,CAAC,CACF,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAC1D,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACd,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IACtF,0FAA0F;IAC1F,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACzB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;YAC9B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC;YACpB,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import * as PgClient from "@effect/sql-pg/PgClient";
2
+ import { Config, Layer } from "effect";
3
+ import * as Reactivity from "effect/reactivity/Reactivity";
4
+ import type { AppChanges, AppDatabaseOptions } from "./appHost.ts";
5
+ export declare function databaseLayer<R>(options: AppDatabaseOptions<R>, changesService: typeof AppChanges): Layer.Layer<AppChanges | PgClient.PgClient | Reactivity.Reactivity | import("effect/sql/SqlClient").SqlClient, Config.ConfigError | import("effect/sql/Migrator").MigrationError | import("effect/sql/SqlError").SqlError, Exclude<Exclude<R, import("effect/Scope").Scope>, PgClient.PgClient | import("effect/sql/SqlClient").SqlClient>>;
6
+ //# sourceMappingURL=databaseLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databaseLayer.d.ts","sourceRoot":"","sources":["../../src/server/databaseLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAI3D,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEnE,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,UAAU,+UA2BjG"}
@@ -0,0 +1,29 @@
1
+ import * as PgClient from "@effect/sql-pg/PgClient";
2
+ import { Config, Effect, Layer } from "effect";
3
+ import * as Reactivity from "effect/reactivity/Reactivity";
4
+ import { makeLiveServer } from "@shivaedev/effect-contract/makeLiveServer.ts";
5
+ import { migratePostgres } from "@shivaedev/effect-sql/migrations.ts";
6
+ import { postgresChanges } from "@shivaedev/effect-sql/postgresChanges.ts";
7
+ export function databaseLayer(options, changesService) {
8
+ const pool = Layer.unwrap(Effect.gen(function* () {
9
+ const url = options.config?.databaseUrl ?? (yield* Config.Redacted("DATABASE_URL"));
10
+ return PgClient.layer({
11
+ url,
12
+ ...(options.config?.maxConnections === undefined ? {} : { maxConnections: options.config.maxConnections }),
13
+ ...(options.config?.applicationName === undefined ? {} : { applicationName: options.config.applicationName }),
14
+ });
15
+ }));
16
+ const migrated = Layer.effectDiscard(migratePostgres({ ...options.migrations, lockTimeout: options.migrations.lockTimeout ?? "5 seconds" })).pipe(Layer.provideMerge(pool));
17
+ const live = Layer.effect(changesService, makeLiveServer).pipe(Layer.provideMerge(Reactivity.layer));
18
+ const base = Layer.merge(migrated, live);
19
+ const changes = options.config?.changes;
20
+ if (changes === undefined) {
21
+ return base;
22
+ }
23
+ return Layer.unwrap(Effect.gen(function* () {
24
+ const client = yield* PgClient.PgClient;
25
+ const hints = yield* changesService;
26
+ return postgresChanges({ ...changes, client, resync: hints.resync });
27
+ })).pipe(Layer.provideMerge(base));
28
+ }
29
+ //# sourceMappingURL=databaseLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databaseLayer.js","sourceRoot":"","sources":["../../src/server/databaseLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,MAAM,UAAU,aAAa,CAAI,OAA8B,EAAE,cAAiC;IACjG,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACpF,OAAO,QAAQ,CAAC,KAAK,CAAC;YACrB,GAAG;YACH,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1G,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;SAC7G,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAChJ,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CACxB,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;IACxC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;QACpC,OAAO,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Layer } from "effect";
2
+ import type { HttpRouter, HttpStaticServer } from "effect/http";
3
+ import type { Rpc, RpcGroup } from "effect/rpc";
4
+ import type { SessionPolicy, SessionShape } from "#rpc-server/session.ts";
5
+ import type { AppDatabaseOptions } from "./appHost.ts";
6
+ export interface HostOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements> {
7
+ readonly assets?: string | Parameters<typeof HttpStaticServer.layer>[0];
8
+ readonly config?: AppDatabaseOptions["config"] & {
9
+ readonly port?: number;
10
+ readonly host?: string;
11
+ readonly trustedProxy?: string;
12
+ readonly maxBodySize?: number;
13
+ readonly disablePreemptiveShutdown?: boolean;
14
+ };
15
+ readonly group: RpcGroup.RpcGroup<TRpcs>;
16
+ readonly handlers: Layer.Layer<THandlers, THandlerError, THandlerRequirements>;
17
+ readonly routes?: Layer.Layer<never, never, HttpRouter.HttpRouter | HttpRouter.Request<"Error", unknown>>;
18
+ readonly rpcPath?: HttpRouter.PathInput;
19
+ readonly services: Layer.Layer<TServices, TServiceError, TServiceRequirements>;
20
+ }
21
+ export type HostPolicy<TSession extends SessionShape> = {
22
+ readonly policy?: undefined;
23
+ readonly sessions: SessionPolicy<TSession>;
24
+ } | {
25
+ readonly policy: "loopback";
26
+ readonly sessions?: never;
27
+ };
28
+ //# sourceMappingURL=hostOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostOptions.d.ts","sourceRoot":"","sources":["../../src/server/hostOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB;IACjJ,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;KAC7C,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1G,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,YAAY,IACjD;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hostOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostOptions.js","sourceRoot":"","sources":["../../src/server/hostOptions.ts"],"names":[],"mappings":""}
@@ -8,5 +8,5 @@ export interface NodeSubscriptionSignal {
8
8
  readonly dispose: () => void;
9
9
  readonly signal: AbortSignal;
10
10
  }
11
- export declare const nodeSubscriptionSignal: (options: NodeSubscriptionSignalOptions) => NodeSubscriptionSignal;
12
- //# sourceMappingURL=subscription-signal.d.ts.map
11
+ export declare function nodeSubscriptionSignal(options: NodeSubscriptionSignalOptions): NodeSubscriptionSignal;
12
+ //# sourceMappingURL=subscriptionSignal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionSignal.d.ts","sourceRoot":"","sources":["../../../src/server/node-http/subscriptionSignal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;CACrD;AACD,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC7B;AAYD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,sBAAsB,CA0CrG"}
@@ -1,11 +1,15 @@
1
- const property = (value, key) => (typeof value === "object" && value !== null ? Reflect.get(value, key) : undefined);
2
- const isIncomingMessage = (value) => typeof property(value, "socket") === "object" && typeof property(value, "once") === "function";
3
- const nodeRequestFrom = (request) => {
1
+ function property(value, key) {
2
+ return typeof value === "object" && value !== null ? Reflect.get(value, key) : undefined;
3
+ }
4
+ function isIncomingMessage(value) {
5
+ return typeof property(value, "socket") === "object" && typeof property(value, "once") === "function";
6
+ }
7
+ function nodeRequestFrom(request) {
4
8
  const req = property(property(property(request, "runtime"), "node"), "req");
5
9
  return isIncomingMessage(req) ? req : undefined;
6
- };
10
+ }
7
11
  // Under Bun's node:http compatibility layer a Web request signal may miss an abandoned socket, so node close events cover long-lived responses.
8
- export const nodeSubscriptionSignal = (options) => {
12
+ export function nodeSubscriptionSignal(options) {
9
13
  const controller = new AbortController();
10
14
  const signals = [controller.signal];
11
15
  if (options.request !== undefined) {
@@ -18,15 +22,18 @@ export const nodeSubscriptionSignal = (options) => {
18
22
  }
19
23
  const nodeRequest = options.nodeRequest ?? nodeRequestFrom(options.request);
20
24
  if (nodeRequest === undefined) {
21
- return { dispose: () => { }, signal: AbortSignal.any(signals) };
25
+ return { dispose: () => undefined, signal: AbortSignal.any(signals) };
22
26
  }
23
- const socket = nodeRequest.socket;
24
- const onRequestClose = () => {
25
- if (!nodeRequest.complete) {
27
+ const request = nodeRequest;
28
+ const socket = request.socket;
29
+ function onRequestClose() {
30
+ if (!request.complete) {
26
31
  controller.abort();
27
32
  }
28
- };
29
- const onSocketClose = () => controller.abort();
33
+ }
34
+ function onSocketClose() {
35
+ return controller.abort();
36
+ }
30
37
  nodeRequest.once("close", onRequestClose);
31
38
  socket.once("close", onSocketClose);
32
39
  if (nodeRequest.destroyed || socket.destroyed) {
@@ -44,5 +51,5 @@ export const nodeSubscriptionSignal = (options) => {
44
51
  },
45
52
  signal: AbortSignal.any(signals),
46
53
  };
47
- };
48
- //# sourceMappingURL=subscription-signal.js.map
54
+ }
55
+ //# sourceMappingURL=subscriptionSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionSignal.js","sourceRoot":"","sources":["../../../src/server/node-http/subscriptionSignal.ts"],"names":[],"mappings":"AAUA,SAAS,QAAQ,CAAC,KAAc,EAAE,GAAW;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AACD,SAAS,iBAAiB,CAAC,KAAc;IACxC,OAAO,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC;AACvG,CAAC;AACD,SAAS,eAAe,CAAC,OAA4B;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5E,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AACD,gJAAgJ;AAChJ,MAAM,UAAU,sBAAsB,CAAC,OAAsC;IAC5E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,GAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,SAAS,cAAc;QACtB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvB,UAAU,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;IACF,CAAC;IACD,SAAS,aAAa;QACrB,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO;YACR,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;YAChB,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;KAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SessionProvider, SessionShape } from "#rpc-server/session.ts";
2
+ export type GetSession<TSession extends SessionShape> = (headers: globalThis.Headers) => Promise<TSession | null>;
3
+ export declare function betterAuthSessions<TSession extends SessionShape>(getSession: GetSession<TSession>): SessionProvider<TSession>;
4
+ //# sourceMappingURL=betterAuthSessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"betterAuthSessions.d.ts","sourceRoot":"","sources":["../../../../src/server/rpc-server/adapters/betterAuthSessions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC5E,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,YAAY,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAOlH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAQ7H"}
@@ -0,0 +1,14 @@
1
+ import { Effect, Option } from "effect";
2
+ import { AuthUnavailable } from "#errors/taxonomy.ts";
3
+ import { redact } from "#rpc-server/redact.ts";
4
+ function unavailable(cause) {
5
+ return Effect.andThen(Effect.logError("Authentication provider failed", redact(cause)), Effect.fail(new AuthUnavailable({ message: "Authentication is temporarily unavailable" })));
6
+ }
7
+ export function betterAuthSessions(getSession) {
8
+ const betterAuthSession = Effect.fn("PlatformRpc.betterAuthSession")(function* (headers) {
9
+ const session = yield* Effect.tryPromise(() => getSession(new globalThis.Headers(headers))).pipe(Effect.catch((error) => unavailable(error.cause)));
10
+ return Option.fromNullishOr(session);
11
+ });
12
+ return { get: betterAuthSession };
13
+ }
14
+ //# sourceMappingURL=betterAuthSessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"betterAuthSessions.js","sourceRoot":"","sources":["../../../../src/server/rpc-server/adapters/betterAuthSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,SAAS,WAAW,CAAC,KAAc;IAClC,OAAO,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAChE,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC,CAC1F,CAAC;AACH,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAgC,UAAgC;IACjG,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAwB;QACvG,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/F,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CACjD,CAAC;QACF,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Effect, Schema } from "effect";
2
+ export interface RpcBoundaryOptions<E> {
3
+ readonly message?: string;
4
+ readonly unexpected: (message: string) => E;
5
+ }
6
+ export declare function rpcBoundary<TSchema extends Schema.ConstraintDecoder<{
7
+ readonly message: string;
8
+ }>>(schema: TSchema, options: RpcBoundaryOptions<TSchema["Type"]>): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, TSchema["Type"], R>;
9
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC;CAC5C;AACD,wBAAgB,WAAW,CAC1B,OAAO,SAAS,MAAM,CAAC,iBAAiB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB,CAAC,EACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAEtD,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAapF"}
@@ -0,0 +1,18 @@
1
+ import { Cause, Effect, Schema } from "effect";
2
+ import { isSensitiveKey, redactText } from "./sensitive.js";
3
+ export function rpcBoundary(schema, options) {
4
+ const declared = Schema.is(schema);
5
+ return (self) => Effect.catchCause(self, (cause) => {
6
+ if (Cause.hasInterruptsOnly(cause)) {
7
+ return Effect.failCause(Cause.fromReasons(cause.reasons.filter(Cause.isInterruptReason)));
8
+ }
9
+ const reason = cause.reasons[0];
10
+ if (cause.reasons.length === 1 && reason && Cause.isFailReason(reason) && declared(reason.error)) {
11
+ return Effect.fail(reason.error);
12
+ }
13
+ const rejection = options.unexpected(redactText(options.message ?? "Internal server error", isSensitiveKey));
14
+ Object.defineProperty(rejection, "cause", { configurable: true, enumerable: false, value: cause });
15
+ return Effect.failCause(Cause.fromReasons([...Cause.fail(rejection).reasons, ...cause.reasons.filter(Cause.isInterruptReason)]));
16
+ });
17
+ }
18
+ //# sourceMappingURL=boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../../src/server/rpc-server/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5D,MAAM,UAAU,WAAW,CAIzB,MAAe,EAAE,OAA4C;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,CAAU,IAA4B,EAAwC,EAAE,CACtF,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;QACjC,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAClG,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,IAAI,uBAAuB,EAAE,cAAc,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClI,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Effect } from "effect";
2
+ import { HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ import { RpcSerialization } from "effect/rpc";
4
+ export declare function sameOrigin(request: HttpServerRequest.HttpServerRequest): boolean;
5
+ export declare function loopbackOnly<E, R>(handler: (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, R>): (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, R>;
6
+ export declare function localRpcGuard<E, R>(effect: Effect.Effect<HttpServerResponse.HttpServerResponse, E, R>, trustedProxy?: string): Effect.Effect<HttpServerResponse.HttpServerResponse, E, R | HttpServerRequest.HttpServerRequest | RpcSerialization.RpcSerialization>;
7
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqB9C,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAWhF;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,aAEpG,iBAAiB,CAAC,iBAAiB,gEAIpD;AAiBD,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,wIAW5H"}
@@ -0,0 +1,70 @@
1
+ import { Effect, Option } from "effect";
2
+ import { HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ import { RpcSerialization } from "effect/rpc";
4
+ import { proxyAddresses, proxyMatches } from "./trustedProxy.js";
5
+ function loopbackAddress(address) {
6
+ const unmapped = unmapAddress(address);
7
+ return unmapped === "::1" || (/^127(?:\.\d{1,3}){3}$/u.test(unmapped) && unmapped.split(".").every((part) => Number(part) <= 255));
8
+ }
9
+ function unmapAddress(address) {
10
+ return address.replace(/^::ffff:/iu, "");
11
+ }
12
+ function loopbackHost(host) {
13
+ if (host === undefined) {
14
+ return false;
15
+ }
16
+ const authority = /^(?<hostname>\[[^\]]+\]|[^:]+)(?::(?<port>\d{1,5}))?$/u.exec(host)?.groups;
17
+ if (authority === undefined || (authority.port !== undefined && Number(authority.port) > 65_535)) {
18
+ return false;
19
+ }
20
+ const hostname = authority.hostname?.toLowerCase();
21
+ return hostname !== undefined && (hostname === "localhost" || hostname === "[::1]" || loopbackAddress(hostname));
22
+ }
23
+ export function sameOrigin(request) {
24
+ const origin = request.headers.origin;
25
+ if (origin === undefined) {
26
+ return true;
27
+ }
28
+ try {
29
+ const url = new URL(origin);
30
+ return url.protocol === "http:" && url.origin === origin && url.host === request.headers.host;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export function loopbackOnly(handler) {
37
+ return (request) => loopbackHost(request.headers.host) && Option.match(request.remoteAddress, { onNone: () => true, onSome: loopbackAddress })
38
+ ? handler(request)
39
+ : Effect.succeed(HttpServerResponse.text("Only loopback hosts are served", { status: 403 }));
40
+ }
41
+ function proxyOrigin(request, trustedProxy) {
42
+ if (trustedProxy === undefined || !Option.exists(request.remoteAddress, (address) => proxyMatches(trustedProxy, address))) {
43
+ return false;
44
+ }
45
+ const host = request.headers["x-forwarded-host"];
46
+ const protocol = request.headers["x-forwarded-proto"];
47
+ if (host === undefined || !/^(?:\[[\da-f:]+\]|[\da-z.-]+)(?::\d{1,5})?$/iu.test(host) || (protocol !== "http" && protocol !== "https")) {
48
+ return false;
49
+ }
50
+ try {
51
+ const url = new URL(`${protocol}://${host}`);
52
+ return request.headers.origin === undefined || request.headers.origin === url.origin;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ export function localRpcGuard(effect, trustedProxy) {
59
+ const addresses = trustedProxy === undefined ? undefined : proxyAddresses(trustedProxy);
60
+ return Effect.gen(function* () {
61
+ const request = yield* HttpServerRequest.HttpServerRequest;
62
+ const serialization = yield* RpcSerialization.RpcSerialization;
63
+ const local = loopbackHost(request.headers.host) && Option.exists(request.remoteAddress, loopbackAddress);
64
+ const contentType = request.headers["content-type"]?.split(";")[0]?.trim().toLowerCase();
65
+ return ((local && sameOrigin(request)) || proxyOrigin(request, addresses)) && contentType === serialization.contentType
66
+ ? yield* effect
67
+ : HttpServerResponse.text("Local same-origin requests only", { status: 403 });
68
+ });
69
+ }
70
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/server/rpc-server/local.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Option } from "effect";
2
- import { Headers } from "effect/unstable/http";
2
+ import { Headers } from "effect/http";
3
3
  export interface OriginRequest {
4
4
  readonly headers: Headers.Headers;
5
5
  readonly origin: Option.Option<string>;
@@ -10,6 +10,6 @@ export interface TrustedOriginsOptions {
10
10
  readonly allow: readonly string[];
11
11
  readonly missing: "allow" | "reject";
12
12
  }
13
- export declare const trustedOrigins: (options: TrustedOriginsOptions) => OriginPolicy;
14
- export declare const originRequest: (headers: Headers.Headers, rpc: string) => OriginRequest;
13
+ export declare function trustedOrigins(options: TrustedOriginsOptions): OriginPolicy;
14
+ export declare function originRequest(headers: Headers.Headers, rpc: string): OriginRequest;
15
15
  //# sourceMappingURL=origin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;AAC/D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC;AACD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,YAAY,CAM3E;AACD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAMlF"}
@@ -0,0 +1,16 @@
1
+ import { Option } from "effect";
2
+ import { Headers } from "effect/http";
3
+ export function trustedOrigins(options) {
4
+ return ({ origin }) => Option.match(origin, {
5
+ onNone: () => options.missing === "allow",
6
+ onSome: (value) => options.allow.includes(value),
7
+ });
8
+ }
9
+ export function originRequest(headers, rpc) {
10
+ return {
11
+ headers,
12
+ origin: Headers.get(headers, "origin"),
13
+ rpc,
14
+ };
15
+ }
16
+ //# sourceMappingURL=origin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origin.js","sourceRoot":"","sources":["../../../src/server/rpc-server/origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAWtC,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC5D,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACrB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO;QACzC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;KAChD,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,OAAwB,EAAE,GAAW;IAClE,OAAO;QACN,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;QACtC,GAAG;KACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type SensitiveKey } from "./sensitive.ts";
2
+ export declare function redact(value: unknown, sensitive?: SensitiveKey): unknown;
3
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/redact.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoDzF,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAExF"}
@@ -2,7 +2,7 @@ import { Predicate, Redacted } from "effect";
2
2
  import { isSensitiveKey, REDACTED, redactText } from "./sensitive.js";
3
3
  const MAX_DEPTH = 8;
4
4
  const MAX_ENTRIES = 50;
5
- const binary = (value) => {
5
+ function binary(value) {
6
6
  if (ArrayBuffer.isView(value)) {
7
7
  return `<${value.constructor.name} ${value.byteLength} bytes>`;
8
8
  }
@@ -10,8 +10,8 @@ const binary = (value) => {
10
10
  return `<ArrayBuffer ${value.byteLength} bytes>`;
11
11
  }
12
12
  return undefined;
13
- };
14
- const entriesOf = (value) => {
13
+ }
14
+ function entriesOf(value) {
15
15
  const entries = Object.entries(value);
16
16
  if (!Predicate.isError(value)) {
17
17
  return entries;
@@ -22,8 +22,8 @@ const entriesOf = (value) => {
22
22
  ["stack", value.stack],
23
23
  ];
24
24
  return value.cause === undefined ? [...shape, ...entries] : [...shape, ...entries, ["cause", value.cause]];
25
- };
26
- const walk = (value, sensitive, depth) => {
25
+ }
26
+ function walk(value, sensitive, depth) {
27
27
  if (Redacted.isRedacted(value)) {
28
28
  return REDACTED;
29
29
  }
@@ -49,6 +49,8 @@ const walk = (value, sensitive, depth) => {
49
49
  .slice(0, MAX_ENTRIES)
50
50
  .map(([key, nested]) => [key, sensitive(key) ? REDACTED : walk(nested, sensitive, depth + 1)]);
51
51
  return Object.fromEntries(entries.length > MAX_ENTRIES ? [...kept, ["<truncated>", `${entries.length - MAX_ENTRIES} more keys`]] : kept);
52
- };
53
- export const redact = (value, sensitive = isSensitiveKey) => walk(value, sensitive, 0);
52
+ }
53
+ export function redact(value, sensitive = isSensitiveKey) {
54
+ return walk(value, sensitive, 0);
55
+ }
54
56
  //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/server/rpc-server/redact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Cause, ErrorReporter } from "effect";
2
+ import { type SensitiveKey } from "./sensitive.ts";
3
+ export declare function redactDefect(defect: unknown, sensitive?: SensitiveKey): unknown;
4
+ export declare function redactCause<E>(cause: Cause.Cause<E>, sensitive?: SensitiveKey): Cause.Cause<E>;
5
+ export declare function redactingErrorReporter(reporter: ErrorReporter.ErrorReporter, sensitive?: SensitiveKey): ErrorReporter.ErrorReporter;
6
+ //# sourceMappingURL=redactCause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactCause.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/redactCause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,aAAa,EAAa,MAAM,QAAQ,CAAC;AAElE,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoB/E,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAE/F;AACD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,GAAE,YAA6B,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAQ9G;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,GAAE,YAA6B,GAAG,aAAa,CAAC,aAAa,CAKnJ"}