@shivaedev/server 0.9.3 → 0.11.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.
- package/CHANGELOG.md +46 -0
- package/README.md +24 -19
- package/dist/appDatabase.d.ts +14 -0
- package/dist/appDatabase.d.ts.map +1 -0
- package/dist/{databaseLayer.js → appDatabase.js} +6 -6
- package/dist/appDatabase.js.map +1 -0
- package/dist/appHost.d.ts +1 -14
- package/dist/appHost.d.ts.map +1 -1
- package/dist/appHost.js +5 -10
- package/dist/appHost.js.map +1 -1
- package/dist/appHostHttp.d.ts +29 -29
- package/dist/appHostHttp.d.ts.map +1 -1
- package/dist/appHostHttp.js +7 -7
- package/dist/appHostHttp.js.map +1 -1
- package/dist/bearerSocketRpc.d.ts +5 -0
- package/dist/bearerSocketRpc.d.ts.map +1 -0
- package/dist/bearerSocketRpc.js +69 -0
- package/dist/bearerSocketRpc.js.map +1 -0
- package/dist/hostChanges.d.ts +2 -3
- package/dist/hostChanges.d.ts.map +1 -1
- package/dist/hostChanges.js +9 -14
- package/dist/hostChanges.js.map +1 -1
- package/dist/hostRpcRoutes.d.ts +2 -3
- package/dist/hostRpcRoutes.d.ts.map +1 -1
- package/dist/hostRpcRoutes.js +4 -2
- package/dist/hostRpcRoutes.js.map +1 -1
- package/dist/otlpHttpClient.js +2 -2
- package/dist/otlpHttpClient.js.map +1 -1
- package/dist/redactingDiagnostics.d.ts +0 -2
- package/dist/redactingDiagnostics.d.ts.map +1 -1
- package/dist/redactingDiagnostics.js +1 -4
- package/dist/redactingDiagnostics.js.map +1 -1
- package/dist/redactingTracer.d.ts.map +1 -1
- package/dist/redactingTracer.js +6 -5
- package/dist/redactingTracer.js.map +1 -1
- package/dist/safeOtlpSerialization.d.ts +0 -2
- package/dist/safeOtlpSerialization.d.ts.map +1 -1
- package/dist/safeOtlpSerialization.js +5 -12
- package/dist/safeOtlpSerialization.js.map +1 -1
- package/dist/setupDatabases.d.ts +1 -1
- package/dist/setupDatabases.d.ts.map +1 -1
- package/dist/setupDatabases.js +1 -1
- package/dist/setupDatabases.js.map +1 -1
- package/dist/socketRpc.d.ts.map +1 -1
- package/dist/socketRpc.js +6 -4
- package/dist/socketRpc.js.map +1 -1
- package/package.json +11 -17
- package/src/{databaseLayer.ts → appDatabase.ts} +6 -6
- package/src/appHost.ts +5 -11
- package/src/appHostHttp.ts +8 -11
- package/src/bearerSocketRpc.ts +80 -0
- package/src/hostChanges.ts +12 -22
- package/src/hostRpcRoutes.ts +4 -6
- package/src/otlpHttpClient.ts +2 -2
- package/src/redactingDiagnostics.ts +1 -5
- package/src/redactingTracer.ts +7 -5
- package/src/safeOtlpSerialization.ts +5 -12
- package/src/setupDatabases.ts +1 -1
- package/src/socketRpc.ts +6 -6
- package/dist/databaseLayer.d.ts +0 -14
- package/dist/databaseLayer.d.ts.map +0 -1
- package/dist/databaseLayer.js.map +0 -1
- package/dist/redactOtlpUrl.d.ts +0 -2
- package/dist/redactOtlpUrl.d.ts.map +0 -1
- package/dist/redactOtlpUrl.js +0 -41
- package/dist/redactOtlpUrl.js.map +0 -1
- package/dist/schemaSensitiveAst.d.ts +0 -7
- package/dist/schemaSensitiveAst.d.ts.map +0 -1
- package/dist/schemaSensitiveAst.js +0 -102
- package/dist/schemaSensitiveAst.js.map +0 -1
- package/dist/schemaSensitiveKeys.d.ts +0 -6
- package/dist/schemaSensitiveKeys.d.ts.map +0 -1
- package/dist/schemaSensitiveKeys.js +0 -47
- package/dist/schemaSensitiveKeys.js.map +0 -1
- package/src/redactOtlpUrl.ts +0 -48
- package/src/schemaSensitiveAst.ts +0 -106
- package/src/schemaSensitiveKeys.ts +0 -49
package/dist/hostChanges.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Context, Effect, Layer, Option, Stream } from "effect";
|
|
2
2
|
import { Headers } from "effect/http";
|
|
3
|
+
import { Rpc } from "effect/rpc";
|
|
4
|
+
import { LiveServer } from "@shivaedev/contract/LiveServer.ts";
|
|
3
5
|
import { CurrentViewer } from "@shivaedev/contract/readPolicy.ts";
|
|
4
6
|
import { Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
5
7
|
import { recheckSession } from "@shivaedev/identity/server/recheckSession.ts";
|
|
8
|
+
import { revalidateStream } from "@shivaedev/identity/server/revalidateStream.ts";
|
|
6
9
|
import { resolveChanges } from "@shivaedev/identity/server/sessionKeys.ts";
|
|
7
|
-
import { revalidateSession } from "@shivaedev/identity/server/socketSession.ts";
|
|
8
10
|
import { rerunQuery } from "#rerunQuery.ts";
|
|
9
|
-
export function hostChanges(group,
|
|
11
|
+
export function hostChanges(group, sessions) {
|
|
10
12
|
return Layer.effectContext(Effect.gen(function* () {
|
|
11
|
-
const changes = yield* Effect.serviceOption(
|
|
13
|
+
const changes = yield* Effect.serviceOption(LiveServer);
|
|
12
14
|
const services = yield* Effect.context();
|
|
13
15
|
const handlers = new Map();
|
|
14
16
|
function subscribe(rpc, queries, options) {
|
|
@@ -17,16 +19,17 @@ export function hostChanges(group, changesService, sessions) {
|
|
|
17
19
|
const viewer = yield* CurrentViewer;
|
|
18
20
|
const authorized = authorizeSession(sessions, rpc._tag, viewer, subscription.authorized);
|
|
19
21
|
const stream = Option.isSome(changes)
|
|
20
|
-
? changes.value.subscribe({ ...subscription, authorized }, context, rerunQuery(group, options))
|
|
22
|
+
? Stream.unwrap(changes.value.subscribe({ ...subscription, authorized }, context, rerunQuery(group, options)))
|
|
21
23
|
: Stream.concat(Stream.succeed({ _tag: "Resync" }), Stream.never);
|
|
22
24
|
if (sessions === undefined || Option.isNone(viewer)) {
|
|
23
25
|
return stream;
|
|
24
26
|
}
|
|
25
|
-
|
|
27
|
+
const revalidation = Effect.never.pipe(revalidateStream(sessions, rpc, viewer.value.id, recheckSession(sessions, Headers.empty, rpc._tag)));
|
|
28
|
+
return Stream.interruptWhen(stream, revalidation);
|
|
26
29
|
}));
|
|
27
30
|
}
|
|
28
31
|
for (const rpc of group.requests.values()) {
|
|
29
|
-
if (!rpc._tag.endsWith(".$changes")) {
|
|
32
|
+
if (!(Rpc.isRpc(rpc) && rpc._tag.endsWith(".$changes"))) {
|
|
30
33
|
continue;
|
|
31
34
|
}
|
|
32
35
|
const provided = services.mapUnsafe.get(rpc.key);
|
|
@@ -49,12 +52,4 @@ function authorizeSession(sessions, tag, viewer, policy) {
|
|
|
49
52
|
}
|
|
50
53
|
return recheckSession(sessions, Headers.empty, tag).pipe(Effect.map((current) => Option.isNone(viewer) || (Option.isSome(current) && current.value.user.id === viewer.value.id)), Effect.flatMap((allowed) => allowed ? policy : Effect.fail(new Unauthorized({ message: "Authentication required" }))));
|
|
51
54
|
}
|
|
52
|
-
function sessionRevoked(sessions, tag, id) {
|
|
53
|
-
return Effect.gen(function* () {
|
|
54
|
-
const current = yield* recheckSession(sessions, Headers.empty, tag).pipe(Effect.catchTag("AuthUnavailable", () => Effect.succeed(undefined)));
|
|
55
|
-
if (current !== undefined && (Option.isNone(current) || current.value.user.id !== id)) {
|
|
56
|
-
return yield* new Unauthorized({ message: "Authentication required" });
|
|
57
|
-
}
|
|
58
|
-
}).pipe((check) => revalidateSession(check, sessions.streamRevalidationInterval ?? "30 seconds"));
|
|
59
|
-
}
|
|
60
55
|
//# sourceMappingURL=hostChanges.js.map
|
package/dist/hostChanges.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostChanges.js","sourceRoot":"","sources":["../src/hostChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hostChanges.js","sourceRoot":"","sources":["../src/hostChanges.ts"],"names":[],"mappings":"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"}
|
package/dist/hostRpcRoutes.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { Effect, Layer } from "effect";
|
|
2
2
|
import { HttpRouter } from "effect/http";
|
|
3
3
|
import { type Rpc, type RpcGroup, RpcSerialization } from "effect/rpc";
|
|
4
|
+
import type { schemaSensitiveKeys } from "@shivaedev/errors/schemaSensitiveKeys.ts";
|
|
4
5
|
import type { RequestTracing } from "@shivaedev/identity/middleware.ts";
|
|
5
6
|
import { type SessionShape } from "@shivaedev/identity/server/session.ts";
|
|
6
|
-
import type { AppChanges } from "#appHost.ts";
|
|
7
7
|
import type { HostPolicy } from "#hostOptions.ts";
|
|
8
8
|
import type { hostTransport } from "#hostTransport.ts";
|
|
9
|
-
import type { schemaSensitiveKeys } from "#schemaSensitiveKeys.ts";
|
|
10
9
|
export declare function hostRpcRoutes<TRpcs extends Rpc.Any, THandlers, TError, TRequirements, TSession extends SessionShape>(options: {
|
|
11
10
|
readonly group: RpcGroup.RpcGroup<TRpcs>;
|
|
12
11
|
readonly handlers: Layer.Layer<THandlers, TError, TRequirements>;
|
|
13
12
|
readonly rpcPath?: HttpRouter.PathInput;
|
|
14
|
-
} & HostPolicy<TSession>,
|
|
13
|
+
} & HostPolicy<TSession>, { bodySize, trustedProxy, nativeOrigins }: Effect.Success<ReturnType<typeof hostTransport>>, sensitive: ReturnType<typeof schemaSensitiveKeys>): Layer.Layer<never, TError | import("@shivaedev/contract/readPolicyErrors.ts").MissingReadPolicies, Exclude<TRequirements, RpcSerialization.RpcSerialization> | Exclude<Exclude<HttpRouter.HttpRouter, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
|
|
15
14
|
readonly _tag: `${string}.$changes`;
|
|
16
15
|
}>>>, RpcSerialization.RpcSerialization> | Exclude<Exclude<RpcSerialization.RpcSerialization, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
|
|
17
16
|
readonly _tag: `${string}.$changes`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostRpcRoutes.d.ts","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAmC,UAAU,EAAyC,MAAM,aAAa,CAAC;AAEjH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hostRpcRoutes.d.ts","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAmC,UAAU,EAAyC,MAAM,aAAa,CAAC;AAEjH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAqC,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3G,OAAO,EAA+C,KAAK,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAGvH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,wBAAgB,aAAa,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,SAAS,YAAY,EACnH,OAAO,EAAE;IACR,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC;CACxC,GAAG,UAAU,CAAC,QAAQ,CAAC,EACxB,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,EAC3F,SAAS,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC;;;;;;;;0CA4CjD"}
|
package/dist/hostRpcRoutes.js
CHANGED
|
@@ -2,6 +2,7 @@ import { ByteSize, Effect, Layer } from "effect";
|
|
|
2
2
|
import { HttpEffect, HttpIncomingMessage, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
|
|
3
3
|
import * as HttpStatus from "effect/http/HttpStatus";
|
|
4
4
|
import { RpcSerialization } from "effect/rpc";
|
|
5
|
+
import { validateReadPolicies } from "@shivaedev/contract/validateReadPolicies.ts";
|
|
5
6
|
import { localRpcGuard } from "@shivaedev/identity/server/local.ts";
|
|
6
7
|
import { authenticatedLayer, maybeAuthenticatedLayer } from "@shivaedev/identity/server/session.ts";
|
|
7
8
|
import { boundedRpcRequest } from "#boundedRpcRequest.ts";
|
|
@@ -10,11 +11,12 @@ import { hostRpc, rpcCacheControl } from "#hostRpc.ts";
|
|
|
10
11
|
import { redactingRpcSerialization } from "#redactingRpcSerialization.ts";
|
|
11
12
|
import { rpcRequestTracing } from "#rpcRequestTracing.ts";
|
|
12
13
|
import { socketRpc } from "#socketRpc.ts";
|
|
13
|
-
export function hostRpcRoutes(options,
|
|
14
|
+
export function hostRpcRoutes(options, { bodySize, trustedProxy, nativeOrigins }, sensitive) {
|
|
14
15
|
const middleware = options.policy === "loopback"
|
|
15
16
|
? rpcRequestTracing(sensitive)
|
|
16
17
|
: Layer.mergeAll(authenticatedLayer(options.sessions), maybeAuthenticatedLayer(options.sessions), rpcRequestTracing(sensitive));
|
|
17
18
|
return HttpRouter.use((router) => Effect.gen(function* () {
|
|
19
|
+
yield* validateReadPolicies(options.group);
|
|
18
20
|
const wire = redactingRpcSerialization(yield* RpcSerialization.RpcSerialization, sensitive, sensitive.maskFailure, sensitive.forRpc);
|
|
19
21
|
const httpGroup = options.group.omit(...[...options.group.requests.keys()].filter((tag) => tag.endsWith(".$changes")));
|
|
20
22
|
const handler = yield* hostRpc(httpGroup).pipe(Effect.provideService(RpcSerialization.RpcSerialization, wire));
|
|
@@ -25,6 +27,6 @@ export function hostRpcRoutes(options, changesService, { bodySize, trustedProxy,
|
|
|
25
27
|
}));
|
|
26
28
|
yield* router.add("GET", options.rpcPath ?? "/rpc", socketRpc(websocket, options, trustedProxy, nativeOrigins).pipe(Effect.provideService(RpcSerialization.RpcSerialization, wire)));
|
|
27
29
|
yield* router.add("POST", options.rpcPath ?? "/rpc", (request) => guarded.pipe(Effect.provideService(HttpIncomingMessage.MaxBodySize, ByteSize.bytes(bodySize)), Effect.provideService(HttpServerRequest.HttpServerRequest, boundedRpcRequest(request)), Effect.provideService(RpcSerialization.RpcSerialization, wire), HttpEffect.withPreResponseHandler(rpcCacheControl)));
|
|
28
|
-
})).pipe(Layer.provide(Layer.merge(middleware, hostChanges(options.group,
|
|
30
|
+
})).pipe(Layer.provide(Layer.merge(middleware, hostChanges(options.group, options.policy === "loopback" ? undefined : options.sessions).pipe(Layer.provideMerge(options.handlers)))), Layer.provide(RpcSerialization.layerNdjson));
|
|
29
31
|
}
|
|
30
32
|
//# sourceMappingURL=hostRpcRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostRpcRoutes.js","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjH,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAA2B,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hostRpcRoutes.js","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"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"}
|
package/dist/otlpHttpClient.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Effect, Layer } from "effect";
|
|
2
2
|
import { FetchHttpClient, HttpClient, HttpClientError } from "effect/http";
|
|
3
3
|
import * as HttpStatus from "effect/http/HttpStatus";
|
|
4
|
+
import { redactText } from "@shivaedev/errors/sensitive.ts";
|
|
4
5
|
import { RedactionPolicy } from "#RedactionPolicy.ts";
|
|
5
|
-
import { redactOtlpText } from "#safeOtlpSerialization.ts";
|
|
6
6
|
function timeoutError(request) {
|
|
7
7
|
return new HttpClientError.HttpClientError({
|
|
8
8
|
reason: new HttpClientError.TransportError({ description: "OTLP export request timed out", request }),
|
|
@@ -30,7 +30,7 @@ export function otlpHttpClient(timeout = 10_000) {
|
|
|
30
30
|
warned = false;
|
|
31
31
|
return Effect.void;
|
|
32
32
|
}
|
|
33
|
-
return warnOnce(response.text.pipe(Effect.orElseSucceed(() => "Unable to read collector response"), Effect.map((body) => ({ "otlp.response":
|
|
33
|
+
return warnOnce(response.text.pipe(Effect.orElseSucceed(() => "Unable to read collector response"), Effect.map((body) => ({ "otlp.response": redactText(body, sensitive), "otlp.status": response.status }))));
|
|
34
34
|
}), HttpClient.tapError((error) => warnOnce(Effect.succeed({ "otlp.failure": error.reason._tag }))));
|
|
35
35
|
})).pipe(Layer.provide(FetchHttpClient.layer));
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AACnG,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
|
-
import type { SensitiveKey } from "@shivaedev/errors/sensitive.ts";
|
|
3
2
|
import { type HostRedactionPolicy } from "#RedactionPolicy.ts";
|
|
4
|
-
export declare function redactRecord(values: Readonly<Record<string, unknown>>, sensitive: SensitiveKey): Record<string, unknown>;
|
|
5
3
|
export declare function redactingDiagnostics(policy: HostRedactionPolicy): Layer.Layer<never, never, never>;
|
|
6
4
|
//# sourceMappingURL=redactingDiagnostics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactingDiagnostics.d.ts","sourceRoot":"","sources":["../src/redactingDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,EAAsB,MAAM,QAAQ,CAAC;AAGnF,OAAO,
|
|
1
|
+
{"version":3,"file":"redactingDiagnostics.d.ts","sourceRoot":"","sources":["../src/redactingDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,EAAsB,MAAM,QAAQ,CAAC;AAGnF,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,qBAAqB,CAAC;AAWhF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,oCA0B/D"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { Context, Effect, ErrorReporter, Layer, Logger, References } from "effect";
|
|
2
|
-
import { redact } from "@shivaedev/errors/redact.ts";
|
|
2
|
+
import { redact, redactRecord } from "@shivaedev/errors/redact.ts";
|
|
3
3
|
import { redactDiagnosticCause, redactingErrorReporter } from "@shivaedev/errors/redactCause.ts";
|
|
4
4
|
import { redactionForRpc } from "#RedactionPolicy.ts";
|
|
5
|
-
export function redactRecord(values, sensitive) {
|
|
6
|
-
return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, sensitive(key) ? "<redacted>" : redact(value, sensitive)]));
|
|
7
|
-
}
|
|
8
5
|
function requestErrorReporter(reporter, policy) {
|
|
9
6
|
return {
|
|
10
7
|
[ErrorReporter.TypeId]: ErrorReporter.TypeId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactingDiagnostics.js","sourceRoot":"","sources":["../src/redactingDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"redactingDiagnostics.js","sourceRoot":"","sources":["../src/redactingDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAA4B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEhF,SAAS,oBAAoB,CAAC,QAAqC,EAAE,MAA2B;IAC/F,OAAO;QACN,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM;QAC5C,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YACnB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAChH,OAAO,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;KACD,CAAC;AACH,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,MAA2B;IAC/D,OAAO,KAAK,CAAC,aAAa,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,qBAAqB,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CAC1B,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC;gBACJ,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACxI,CAAC;oBAAS,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACF,CAAC,CAAC,CACF,CACD,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAC3D,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CACnI,CAAC;IACH,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactingTracer.d.ts","sourceRoot":"","sources":["../src/redactingTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAI7D,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"redactingTracer.d.ts","sourceRoot":"","sources":["../src/redactingTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAI7D,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,qBAAqB,CAAC;AA4BhF,wBAAgB,eAAe,CAAC,SAAS,EAAE,mBAAmB,oCAoB7D"}
|
package/dist/redactingTracer.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Effect, Exit, Layer, Option, Tracer } from "effect";
|
|
2
|
-
import {
|
|
2
|
+
import { redactRecord } from "@shivaedev/errors/redact.ts";
|
|
3
3
|
import { redactDiagnosticCause } from "@shivaedev/errors/redactCause.ts";
|
|
4
|
-
import { REDACTED } from "@shivaedev/errors/sensitive.ts";
|
|
5
4
|
import { redactionForRpc } from "#RedactionPolicy.ts";
|
|
6
|
-
import { redactRecord } from "#redactingDiagnostics.ts";
|
|
7
5
|
function redactLinks(values, sensitive) {
|
|
8
6
|
return values.map((link) => ({ ...link, attributes: redactRecord(link.attributes, sensitive) }));
|
|
9
7
|
}
|
|
10
8
|
function redactSpan(span, policy) {
|
|
11
9
|
const end = span.end.bind(span);
|
|
12
10
|
const attribute = span.attribute.bind(span);
|
|
11
|
+
function safeAttribute(key, value) {
|
|
12
|
+
return attribute(key, redactRecord({ [key]: value }, sensitive)[key]);
|
|
13
|
+
}
|
|
13
14
|
const event = span.event.bind(span);
|
|
14
15
|
const addLinks = span.addLinks.bind(span);
|
|
15
16
|
function sensitive(key) {
|
|
@@ -17,10 +18,10 @@ function redactSpan(span, policy) {
|
|
|
17
18
|
}
|
|
18
19
|
return Object.assign(span, {
|
|
19
20
|
addLinks: (values) => addLinks(redactLinks(values, sensitive)),
|
|
20
|
-
attribute:
|
|
21
|
+
attribute: safeAttribute,
|
|
21
22
|
end: (time, exit) => {
|
|
22
23
|
for (const [key, value] of span.attributes) {
|
|
23
|
-
|
|
24
|
+
safeAttribute(key, value);
|
|
24
25
|
}
|
|
25
26
|
end(time, Exit.isFailure(exit) ? Exit.failCause(redactDiagnosticCause(exit.cause, sensitive)) : exit);
|
|
26
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactingTracer.js","sourceRoot":"","sources":["../src/redactingTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"redactingTracer.js","sourceRoot":"","sources":["../src/redactingTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAA4B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEhF,SAAS,WAAW,CAAC,MAAkC,EAAE,SAAuB;IAC/E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AACD,SAAS,UAAU,CAAC,IAAiB,EAAE,MAA2B;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,aAAa,CAAC,GAAW,EAAE,KAAc;QACjD,OAAO,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,SAAS,SAAS,CAAC,GAAW;QAC7B,OAAO,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAC1B,QAAQ,EAAE,CAAC,MAAkC,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1F,SAAS,EAAE,aAAa;QACxB,GAAG,EAAE,CAAC,IAAY,EAAE,IAAiC,EAAE,EAAE;YACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5C,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvG,CAAC;QACD,KAAK,EAAE,CAAC,IAAY,EAAE,IAAY,EAAE,UAAoC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,IAAI,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;KACjJ,CAAC,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,SAA8B;IAC7D,OAAO,KAAK,CAAC,MAAM,CAClB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,IAAI,CAAC;QACX,GAAG,MAAM;QACT,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;gBACvB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aAC9F,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAChH,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC;KACD,CAAC,CACF,CACD,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
2
|
import { OtlpSerialization } from "effect/observability";
|
|
3
|
-
import { type SensitiveKey } from "@shivaedev/errors/sensitive.ts";
|
|
4
|
-
export declare function redactOtlpText(value: string, key?: string, sensitive?: SensitiveKey): string;
|
|
5
3
|
export declare const safeOtlpSerialization: Layer.Layer<OtlpSerialization.OtlpSerialization, never, OtlpSerialization.OtlpSerialization>;
|
|
6
4
|
//# sourceMappingURL=safeOtlpSerialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeOtlpSerialization.d.ts","sourceRoot":"","sources":["../src/safeOtlpSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"safeOtlpSerialization.d.ts","sourceRoot":"","sources":["../src/safeOtlpSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA0DzD,eAAO,MAAM,qBAAqB,8FAUjC,CAAC"}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { Effect, Layer } from "effect";
|
|
2
2
|
import { OtlpSerialization } from "effect/observability";
|
|
3
|
-
import {
|
|
3
|
+
import { REDACTED, redactText } from "@shivaedev/errors/sensitive.ts";
|
|
4
4
|
import { RedactionPolicy, redactionForRpc } from "#RedactionPolicy.ts";
|
|
5
|
-
import { redactOtlpUrl } from "#redactOtlpUrl.ts";
|
|
6
|
-
function otlpSensitive(sensitive) {
|
|
7
|
-
return (key) => sensitive(key) || ["db.user", "db.user.name", "db.connection_string"].includes(key.toLowerCase());
|
|
8
|
-
}
|
|
9
|
-
export function redactOtlpText(value, key = "", sensitive = isSensitiveKey) {
|
|
10
|
-
return redactText(redactOtlpUrl(value, key), otlpSensitive(sensitive));
|
|
11
|
-
}
|
|
12
5
|
function attributeValue(value, key, sensitive) {
|
|
13
6
|
return {
|
|
14
7
|
...value,
|
|
15
|
-
...(typeof value.stringValue === "string" ? { stringValue:
|
|
8
|
+
...(typeof value.stringValue === "string" ? { stringValue: redactText(value.stringValue, sensitive, undefined, key) } : {}),
|
|
16
9
|
...(value.arrayValue ? { arrayValue: { values: value.arrayValue.values.map((item) => attributeValue(item, key, sensitive)) } } : {}),
|
|
17
10
|
...(value.kvlistValue ? { kvlistValue: { values: attributes(value.kvlistValue.values, sensitive) } } : {}),
|
|
18
11
|
};
|
|
@@ -34,7 +27,7 @@ function spanName(span) {
|
|
|
34
27
|
return span.name;
|
|
35
28
|
}
|
|
36
29
|
function redactTraces(data, policy) {
|
|
37
|
-
const resourceSensitive =
|
|
30
|
+
const resourceSensitive = policy;
|
|
38
31
|
return {
|
|
39
32
|
...data,
|
|
40
33
|
resourceSpans: data.resourceSpans.map((resource) => ({
|
|
@@ -44,9 +37,9 @@ function redactTraces(data, policy) {
|
|
|
44
37
|
...scope,
|
|
45
38
|
spans: scope.spans.map((span) => {
|
|
46
39
|
const method = span.attributes.find(({ key }) => key === "rpc.method")?.value.stringValue;
|
|
47
|
-
const sensitive =
|
|
40
|
+
const sensitive = redactionForRpc(policy, method);
|
|
48
41
|
function text(value) {
|
|
49
|
-
return
|
|
42
|
+
return redactText(value, sensitive);
|
|
50
43
|
}
|
|
51
44
|
return {
|
|
52
45
|
...span,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeOtlpSerialization.js","sourceRoot":"","sources":["../src/safeOtlpSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"safeOtlpSerialization.js","sourceRoot":"","sources":["../src/safeOtlpSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAqB,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAA4B,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjG,SAAS,cAAc,CAAC,KAA4B,EAAE,GAAW,EAAE,SAAuB;IACzF,OAAO;QACN,GAAG,KAAK;QACR,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3H,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1G,CAAC;AACH,CAAC;AACD,SAAS,UAAU,CAAC,MAA+B,EAAE,SAAuB;IAC3E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,GAAG;QACH,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC;KACzF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,IAAoG;IACrH,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,qBAAqB,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;QACnG,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;QACzF,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAClE,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAA0B,EAAE,MAA2B;IAC5E,MAAM,iBAAiB,GAAG,MAAM,CAAC;IACjC,OAAO;QACN,GAAG,IAAI;QACP,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpD,GAAG,QAAQ;YACX,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE;YAC3G,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/C,GAAG,KAAK;gBACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;oBAC1F,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAClD,SAAS,IAAI,CAAC,KAAa;wBAC1B,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBACrC,CAAC;oBACD,OAAO;wBACN,GAAG,IAAI;wBACP,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;wBAClD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC/H,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;wBAClG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC1B,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;qBAChH,CAAC;gBACH,CAAC,CAAC;aACF,CAAC,CAAC;SACH,CAAC,CAAC;KACH,CAAC;AACH,CAAC;AACD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAChD,iBAAiB,CAAC,iBAAiB,EACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC;IACzC,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,GAAG,aAAa;QAChB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACrE,CAAC,CAAC;AACJ,CAAC,CAAC,CACF,CAAC"}
|
package/dist/setupDatabases.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Config, Effect } from "effect";
|
|
2
|
-
export declare const setupDatabases: () => Effect.Effect<void, Config.ConfigError,
|
|
2
|
+
export declare const setupDatabases: () => Effect.Effect<void, Config.ConfigError | import("@shivaedev/local-postgres/server/LocalPostgresError.ts").LocalPostgresError | import("@shivaedev/local-postgres/server/PostgresCommandError.ts").PostgresCommandError | import("@shivaedev/local-postgres/server/localConnections.ts").PostgresSettingError | import("@shivaedev/local-postgres/server/PostgresVersionMismatch.ts").PostgresVersionMismatch, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
|
|
3
3
|
//# sourceMappingURL=setupDatabases.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupDatabases.d.ts","sourceRoot":"","sources":["../src/setupDatabases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"setupDatabases.d.ts","sourceRoot":"","sources":["../src/setupDatabases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,eAAO,MAAM,cAAc,udAQzB,CAAC"}
|
package/dist/setupDatabases.js
CHANGED
|
@@ -7,6 +7,6 @@ export const setupDatabases = Effect.fn("Platform.setupDatabases")(function* ()
|
|
|
7
7
|
"DOCKER_HOST": Config.String("DOCKER_HOST").pipe(Config.withDefault("")),
|
|
8
8
|
"TEST_DATABASE_URL": Config.String("TEST_DATABASE_URL"),
|
|
9
9
|
});
|
|
10
|
-
yield*
|
|
10
|
+
yield* localPostgres(config).prepareDatabases([config.DATABASE_URL, config.TEST_DATABASE_URL]);
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=setupDatabases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupDatabases.js","sourceRoot":"","sources":["../src/setupDatabases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAC7C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9E,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IACH,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"setupDatabases.js","sourceRoot":"","sources":["../src/setupDatabases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAC7C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9E,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IACH,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC"}
|
package/dist/socketRpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketRpc.d.ts","sourceRoot":"","sources":["../src/socketRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAW,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"socketRpc.d.ts","sourceRoot":"","sources":["../src/socketRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAW,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAI7E,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAG1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,SAAS,CAAC,QAAQ,SAAS,YAAY,EACtD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,EACvH,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,SAAS,MAAM,EAAE,kHAiBhC"}
|
package/dist/socketRpc.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { Headers, HttpServerRequest, HttpServerResponse } from "effect/http";
|
|
3
3
|
import * as HttpStatus from "effect/http/HttpStatus";
|
|
4
|
+
import { isAuthUnavailable, isForbidden } from "@shivaedev/errors/taxonomy.ts";
|
|
4
5
|
import { localTransport } from "@shivaedev/identity/server/local.ts";
|
|
5
6
|
import { resolveSession } from "@shivaedev/identity/server/session.ts";
|
|
6
7
|
import { makeSocketSession, SocketSession } from "@shivaedev/identity/server/socketSession.ts";
|
|
8
|
+
import { bearerSocketRpc } from "#bearerSocketRpc.ts";
|
|
7
9
|
export function socketRpc(handler, policy, trustedProxy, nativeOrigins) {
|
|
8
10
|
return Effect.gen(function* () {
|
|
9
11
|
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
@@ -11,15 +13,15 @@ export function socketRpc(handler, policy, trustedProxy, nativeOrigins) {
|
|
|
11
13
|
return HttpServerResponse.text("Local same-origin requests only", { status: HttpStatus.fromLiteral("Forbidden") });
|
|
12
14
|
}
|
|
13
15
|
if (policy.policy !== "loopback") {
|
|
16
|
+
if (new URL(request.url, "http://localhost").searchParams.get("auth") === "frame") {
|
|
17
|
+
return yield* bearerSocketRpc(handler, policy.sessions);
|
|
18
|
+
}
|
|
14
19
|
yield* resolveSession(policy.sessions, Headers.empty, "$connect");
|
|
15
20
|
const session = yield* makeSocketSession(policy.sessions.streamRevalidationInterval ?? "30 seconds");
|
|
16
21
|
return yield* Effect.provideService(handler, SocketSession, session);
|
|
17
22
|
}
|
|
18
23
|
return yield* handler;
|
|
19
|
-
}).pipe(Effect.
|
|
20
|
-
AuthUnavailable: authUnavailable,
|
|
21
|
-
Forbidden: forbidden,
|
|
22
|
-
}));
|
|
24
|
+
}).pipe(Effect.catchIf(isAuthUnavailable, authUnavailable), Effect.catchIf(isForbidden, forbidden));
|
|
23
25
|
}
|
|
24
26
|
function authUnavailable() {
|
|
25
27
|
return Effect.succeed(HttpServerResponse.empty({ status: HttpStatus.fromLiteral("ServiceUnavailable") }));
|
package/dist/socketRpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketRpc.js","sourceRoot":"","sources":["../src/socketRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAqB,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"socketRpc.js","sourceRoot":"","sources":["../src/socketRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAqB,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,MAAM,UAAU,SAAS,CACxB,OAAuH,EACvH,MAA4B,EAC5B,YAAgC,EAChC,aAAgC;IAEhC,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,OAAO,kBAAkB,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnF,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC;YACD,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,IAAI,YAAY,CAAC,CAAC;YACrG,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;IACvB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,CAAC;AACD,SAAS,SAAS;IACjB,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "The Effect application host: HTTP and RPC serving, health, OTLP export, database and migrations, and development mode",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect"
|
|
@@ -46,29 +46,27 @@
|
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@shivaedev/changes": "0.6.0",
|
|
49
|
-
"@shivaedev/contract": "0.
|
|
50
|
-
"@shivaedev/errors": "0.
|
|
49
|
+
"@shivaedev/contract": "0.28.0",
|
|
50
|
+
"@shivaedev/errors": "0.2.0",
|
|
51
51
|
"@shivaedev/http": "0.3.1",
|
|
52
|
-
"@shivaedev/identity": "0.
|
|
53
|
-
"@shivaedev/local-postgres": "0.
|
|
52
|
+
"@shivaedev/identity": "0.11.0",
|
|
53
|
+
"@shivaedev/local-postgres": "0.8.0",
|
|
54
54
|
"@shivaedev/sql": "0.27.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@effect/platform-node": "4.0.6",
|
|
58
58
|
"@effect/sql-pg": "4.0.6",
|
|
59
59
|
"@effect/vitest": "4.0.6",
|
|
60
|
-
"@shivaedev/access": "0.3.
|
|
61
|
-
"@shivaedev/admin": "0.
|
|
62
|
-
"@shivaedev/jobs": "0.
|
|
63
|
-
"@shivaedev/quality": "0.
|
|
60
|
+
"@shivaedev/access": "0.3.2",
|
|
61
|
+
"@shivaedev/admin": "0.13.0",
|
|
62
|
+
"@shivaedev/jobs": "0.26.0",
|
|
63
|
+
"@shivaedev/quality": "0.49.0",
|
|
64
64
|
"@shivaedev/test": "0.12.0",
|
|
65
65
|
"@shivaedev/test-sql": "0.15.0",
|
|
66
|
-
"@shivaedev/test-story": "0.
|
|
66
|
+
"@shivaedev/test-story": "0.29.0",
|
|
67
67
|
"@types/node": "24.19.2",
|
|
68
|
-
"@types/pg": "8.20.0",
|
|
69
68
|
"better-auth": "1.7.12",
|
|
70
69
|
"effect": "4.0.6",
|
|
71
|
-
"pg": "8.23.0",
|
|
72
70
|
"pg-boss": "12.38.0",
|
|
73
71
|
"typescript": "7.0.2",
|
|
74
72
|
"vitest": "5.0.5"
|
|
@@ -78,8 +76,7 @@
|
|
|
78
76
|
"@effect/sql-pg": "4.0.6",
|
|
79
77
|
"@effect/vitest": "4.0.6",
|
|
80
78
|
"better-auth": "1.7.12",
|
|
81
|
-
"effect": "4.0.6"
|
|
82
|
-
"pg": "8.23.0"
|
|
79
|
+
"effect": "4.0.6"
|
|
83
80
|
},
|
|
84
81
|
"peerDependenciesMeta": {
|
|
85
82
|
"@effect/platform-node": {
|
|
@@ -93,9 +90,6 @@
|
|
|
93
90
|
},
|
|
94
91
|
"better-auth": {
|
|
95
92
|
"optional": true
|
|
96
|
-
},
|
|
97
|
-
"pg": {
|
|
98
|
-
"optional": true
|
|
99
93
|
}
|
|
100
94
|
},
|
|
101
95
|
"engines": {
|
|
@@ -3,7 +3,7 @@ import * as PgClient from "@effect/sql-pg/PgClient";
|
|
|
3
3
|
import { Config, Context, Duration, Effect, Fiber, Layer, Option, Redacted, Schedule } from "effect";
|
|
4
4
|
import * as Reactivity from "effect/reactivity/Reactivity";
|
|
5
5
|
import { Migrator } from "effect/sql";
|
|
6
|
-
import {
|
|
6
|
+
import { LiveServer } from "@shivaedev/contract/LiveServer.ts";
|
|
7
7
|
import { assertPostgresMigrations, postgresMigrationError } from "@shivaedev/sql/assertPostgresMigrations.ts";
|
|
8
8
|
import { coordinateWorkerRelease } from "@shivaedev/sql/coordinateWorkerRelease.ts";
|
|
9
9
|
import { migratePostgres } from "@shivaedev/sql/migrations.ts";
|
|
@@ -11,7 +11,7 @@ import { type PendingPostgresMigrations, pendingPostgresMigrations } from "@shiv
|
|
|
11
11
|
import { type PostgresChangesOptions, postgresChanges } from "@shivaedev/sql/postgresChanges.ts";
|
|
12
12
|
import { type PostgresOptions, postgresLayer } from "@shivaedev/sql/postgresLayer.ts";
|
|
13
13
|
import { WorkerRelease } from "@shivaedev/sql/WorkerRelease.ts";
|
|
14
|
-
import type {
|
|
14
|
+
import type { AppDatabaseOptions } from "#appHost.ts";
|
|
15
15
|
|
|
16
16
|
export interface DatabaseConfig extends PostgresOptions {
|
|
17
17
|
readonly changes?: Partial<Omit<PostgresChangesOptions, "client" | "listenerClient" | "connectionSetting" | "resync">>;
|
|
@@ -19,14 +19,14 @@ export interface DatabaseConfig extends PostgresOptions {
|
|
|
19
19
|
readonly listenDatabaseUrl?: Redacted.Redacted<string>;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function
|
|
22
|
+
export function appDatabase<R, E = never>(options: AppDatabaseOptions<R, E>) {
|
|
23
23
|
const pool = Layer.unwrap(
|
|
24
24
|
Effect.map(options.config?.databaseUrl === undefined ? Config.Redacted("DATABASE_URL") : Effect.succeed(options.config.databaseUrl), (url) =>
|
|
25
25
|
postgresLayer(url, options.config),
|
|
26
26
|
),
|
|
27
27
|
);
|
|
28
28
|
const prepared = Layer.effectDiscard(prepareMigrations(options.migrations)).pipe(Layer.provideMerge(pool));
|
|
29
|
-
const live =
|
|
29
|
+
const live = LiveServer.layer.pipe(Layer.provideMerge(Reactivity.layer));
|
|
30
30
|
const migrations = options.migrations;
|
|
31
31
|
const worker =
|
|
32
32
|
migrations.mode === "wait" && migrations.release !== undefined
|
|
@@ -37,7 +37,7 @@ export function databaseLayer<R, E>(options: AppDatabaseOptions<R, E>, changesSe
|
|
|
37
37
|
return Layer.unwrap(
|
|
38
38
|
Effect.gen(function* () {
|
|
39
39
|
const client = yield* PgClient.PgClient;
|
|
40
|
-
const hints = yield*
|
|
40
|
+
const hints = yield* LiveServer;
|
|
41
41
|
const url = options.config?.databaseUrl ?? (yield* Config.Redacted("DATABASE_URL"));
|
|
42
42
|
const name = yield* Config.String("APP_NAME").pipe(Config.withDefault(new URL(Redacted.value(url)).pathname));
|
|
43
43
|
const channel = changes?.channel ?? `changes_${createHash("sha256").update(name).digest("hex").slice(0, 32)}`;
|
|
@@ -53,7 +53,7 @@ export function databaseLayer<R, E>(options: AppDatabaseOptions<R, E>, changesSe
|
|
|
53
53
|
if (listenUrl !== undefined) {
|
|
54
54
|
connectionSetting = options.config?.listenDatabaseUrl === undefined ? "LISTEN_DATABASE_URL" : "config.listenDatabaseUrl";
|
|
55
55
|
}
|
|
56
|
-
return postgresChanges({ ...changes, channel, client, connectionSetting, listenerClient, resync: hints.resync });
|
|
56
|
+
return postgresChanges({ ...changes, channel, client, connectionSetting, listenerClient, resync: hints.resync() });
|
|
57
57
|
}),
|
|
58
58
|
).pipe(Layer.provideMerge(base));
|
|
59
59
|
}
|