@shivaedev/platform 0.18.2 → 0.20.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 (87) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +30 -9
  3. package/dist/server/RedactionPolicy.d.ts +4 -0
  4. package/dist/server/RedactionPolicy.d.ts.map +1 -0
  5. package/dist/server/RedactionPolicy.js +4 -0
  6. package/dist/server/RedactionPolicy.js.map +1 -0
  7. package/dist/server/appHost.js +3 -3
  8. package/dist/server/appHost.js.map +1 -1
  9. package/dist/server/appHostHttp.d.ts +4 -4
  10. package/dist/server/appHostHttp.d.ts.map +1 -1
  11. package/dist/server/appHostHttp.js +17 -11
  12. package/dist/server/appHostHttp.js.map +1 -1
  13. package/dist/server/commandChanges.d.ts +4 -0
  14. package/dist/server/commandChanges.d.ts.map +1 -0
  15. package/dist/server/commandChanges.js +39 -0
  16. package/dist/server/commandChanges.js.map +1 -0
  17. package/dist/server/databaseLayer.d.ts +2 -2
  18. package/dist/server/databaseLayer.d.ts.map +1 -1
  19. package/dist/server/databaseLayer.js +6 -5
  20. package/dist/server/databaseLayer.js.map +1 -1
  21. package/dist/server/hostChanges.d.ts +5 -0
  22. package/dist/server/hostChanges.d.ts.map +1 -0
  23. package/dist/server/hostChanges.js +23 -0
  24. package/dist/server/hostChanges.js.map +1 -0
  25. package/dist/server/hostOptions.d.ts +1 -0
  26. package/dist/server/hostOptions.d.ts.map +1 -1
  27. package/dist/server/otlpHttpClient.d.ts.map +1 -1
  28. package/dist/server/otlpHttpClient.js +3 -1
  29. package/dist/server/otlpHttpClient.js.map +1 -1
  30. package/dist/server/otlpTracing.d.ts.map +1 -1
  31. package/dist/server/otlpTracing.js +4 -1
  32. package/dist/server/otlpTracing.js.map +1 -1
  33. package/dist/server/redactingDiagnostics.d.ts +5 -0
  34. package/dist/server/redactingDiagnostics.d.ts.map +1 -0
  35. package/dist/server/redactingDiagnostics.js +25 -0
  36. package/dist/server/redactingDiagnostics.js.map +1 -0
  37. package/dist/server/redactingRpcSerialization.d.ts +4 -0
  38. package/dist/server/redactingRpcSerialization.d.ts.map +1 -0
  39. package/dist/server/redactingRpcSerialization.js +74 -0
  40. package/dist/server/redactingRpcSerialization.js.map +1 -0
  41. package/dist/server/redactingTracer.d.ts +4 -0
  42. package/dist/server/redactingTracer.d.ts.map +1 -0
  43. package/dist/server/redactingTracer.js +32 -0
  44. package/dist/server/redactingTracer.js.map +1 -0
  45. package/dist/server/rpc-server/redact.d.ts +2 -1
  46. package/dist/server/rpc-server/redact.d.ts.map +1 -1
  47. package/dist/server/rpc-server/redact.js +26 -18
  48. package/dist/server/rpc-server/redact.js.map +1 -1
  49. package/dist/server/rpc-server/redactCause.d.ts +2 -1
  50. package/dist/server/rpc-server/redactCause.d.ts.map +1 -1
  51. package/dist/server/rpc-server/redactCause.js +64 -8
  52. package/dist/server/rpc-server/redactCause.js.map +1 -1
  53. package/dist/server/rpc-server/sensitive.d.ts +2 -1
  54. package/dist/server/rpc-server/sensitive.d.ts.map +1 -1
  55. package/dist/server/rpc-server/sensitive.js +8 -2
  56. package/dist/server/rpc-server/sensitive.js.map +1 -1
  57. package/dist/server/rpc-server/tracing.d.ts +1 -1
  58. package/dist/server/rpc-server/tracing.d.ts.map +1 -1
  59. package/dist/server/rpc-server/tracing.js +11 -4
  60. package/dist/server/rpc-server/tracing.js.map +1 -1
  61. package/dist/server/safeOtlpSerialization.d.ts +2 -1
  62. package/dist/server/safeOtlpSerialization.d.ts.map +1 -1
  63. package/dist/server/safeOtlpSerialization.js +32 -21
  64. package/dist/server/safeOtlpSerialization.js.map +1 -1
  65. package/dist/server/schemaSensitiveKeys.d.ts +5 -0
  66. package/dist/server/schemaSensitiveKeys.d.ts.map +1 -0
  67. package/dist/server/schemaSensitiveKeys.js +143 -0
  68. package/dist/server/schemaSensitiveKeys.js.map +1 -0
  69. package/package.json +6 -6
  70. package/src/server/RedactionPolicy.ts +4 -0
  71. package/src/server/appHost.ts +3 -3
  72. package/src/server/appHostHttp.ts +23 -9
  73. package/src/server/commandChanges.ts +46 -0
  74. package/src/server/databaseLayer.ts +7 -6
  75. package/src/server/hostChanges.ts +27 -0
  76. package/src/server/hostOptions.ts +1 -0
  77. package/src/server/otlpHttpClient.ts +3 -1
  78. package/src/server/otlpTracing.ts +4 -1
  79. package/src/server/redactingDiagnostics.ts +33 -0
  80. package/src/server/redactingRpcSerialization.ts +85 -0
  81. package/src/server/redactingTracer.ts +37 -0
  82. package/src/server/rpc-server/redact.ts +26 -18
  83. package/src/server/rpc-server/redactCause.ts +73 -9
  84. package/src/server/rpc-server/sensitive.ts +8 -2
  85. package/src/server/rpc-server/tracing.ts +11 -5
  86. package/src/server/safeOtlpSerialization.ts +44 -34
  87. package/src/server/schemaSensitiveKeys.ts +148 -0
@@ -1,12 +1,12 @@
1
1
  import * as PgClient from "@effect/sql-pg/PgClient";
2
- import { Config, Layer, type Redacted } from "effect";
2
+ import { Config, Layer, Redacted } from "effect";
3
3
  import * as Reactivity from "effect/reactivity/Reactivity";
4
4
  import type { SqlNameTransforms } from "@shivaedev/effect-sql/clientOptions.ts";
5
5
  import { type PostgresChangesOptions } from "@shivaedev/effect-sql/postgresChanges.ts";
6
6
  import type { AppChanges, AppDatabaseOptions } from "#server/appHost.ts";
7
7
  export interface DatabaseConfig extends SqlNameTransforms {
8
8
  readonly applicationName?: string;
9
- readonly changes?: Omit<PostgresChangesOptions, "client" | "resync">;
9
+ readonly changes?: Partial<Omit<PostgresChangesOptions, "client" | "resync">>;
10
10
  readonly databaseUrl?: Redacted.Redacted<string>;
11
11
  readonly maxConnections?: number;
12
12
  }
@@ -1 +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,KAAK,QAAQ,EAAY,MAAM,QAAQ,CAAC;AACxE,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAG3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,KAAK,sBAAsB,EAAmB,MAAM,0CAA0C,CAAC;AACxG,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,UAAU,+UA4BjG"}
1
+ {"version":3,"file":"databaseLayer.d.ts","sourceRoot":"","sources":["../../src/server/databaseLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAU,KAAK,EAAE,QAAQ,EAAY,MAAM,QAAQ,CAAC;AACnE,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAG3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,KAAK,sBAAsB,EAAmB,MAAM,0CAA0C,CAAC;AACxG,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,UAAU,+UA4BjG"}
@@ -1,5 +1,6 @@
1
+ import { createHash } from "node:crypto";
1
2
  import * as PgClient from "@effect/sql-pg/PgClient";
2
- import { Config, Effect, Layer, Schedule } from "effect";
3
+ import { Config, Effect, Layer, Redacted, Schedule } from "effect";
3
4
  import * as Reactivity from "effect/reactivity/Reactivity";
4
5
  import { makeLiveServer } from "@shivaedev/effect-contract/makeLiveServer.ts";
5
6
  import { assertPostgresMigrations } from "@shivaedev/effect-sql/assertPostgresMigrations.ts";
@@ -22,13 +23,13 @@ export function databaseLayer(options, changesService) {
22
23
  const live = Layer.effect(changesService, makeLiveServer).pipe(Layer.provideMerge(Reactivity.layer));
23
24
  const base = Layer.merge(prepared, live);
24
25
  const changes = options.config?.changes;
25
- if (changes === undefined) {
26
- return base;
27
- }
28
26
  return Layer.unwrap(Effect.gen(function* () {
29
27
  const client = yield* PgClient.PgClient;
30
28
  const hints = yield* changesService;
31
- return postgresChanges({ ...changes, client, resync: hints.resync });
29
+ const url = options.config?.databaseUrl ?? (yield* Config.Redacted("DATABASE_URL"));
30
+ const name = yield* Config.String("APP_NAME").pipe(Config.withDefault(new URL(Redacted.value(url)).pathname));
31
+ const channel = changes?.channel ?? `changes_${createHash("sha256").update(name).digest("hex").slice(0, 32)}`;
32
+ return postgresChanges({ ...changes, channel, client, resync: hints.resync });
32
33
  })).pipe(Layer.provideMerge(base));
33
34
  }
34
35
  function prepareMigrations(migrations) {
@@ -1 +1 @@
1
- {"version":3,"file":"databaseLayer.js","sourceRoot":"","sources":["../../src/server/databaseLayer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"databaseLayer.js","sourceRoot":"","sources":["../../src/server/databaseLayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Layer } from "effect";
2
+ import type { Rpc, RpcGroup } from "effect/rpc";
3
+ import type { AppChanges } from "./appHost.ts";
4
+ export declare function hostChanges<R extends Rpc.Any>(group: RpcGroup.RpcGroup<R>, changesService: typeof AppChanges): Layer.Layer<never, never, never>;
5
+ //# sourceMappingURL=hostChanges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostChanges.d.ts","sourceRoot":"","sources":["../../src/server/hostChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,wBAAgB,WAAW,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,UAAU,oCAsB5G"}
@@ -0,0 +1,23 @@
1
+ import { Context, Effect, Layer, Option } from "effect";
2
+ export function hostChanges(group, changesService) {
3
+ return Layer.effectContext(Effect.gen(function* () {
4
+ const changes = yield* Effect.serviceOption(changesService);
5
+ if (Option.isNone(changes)) {
6
+ return Context.empty();
7
+ }
8
+ const live = changes.value;
9
+ const services = yield* Effect.context();
10
+ const handlers = new Map();
11
+ for (const rpc of group.requests.values()) {
12
+ if (!rpc._tag.endsWith(".$changes")) {
13
+ continue;
14
+ }
15
+ function handler({ keys }) {
16
+ return live.stream(keys);
17
+ }
18
+ handlers.set(rpc.key, { context: services, handler, tag: rpc._tag });
19
+ }
20
+ return Context.makeUnsafe(handlers);
21
+ }));
22
+ }
23
+ //# sourceMappingURL=hostChanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostChanges.js","sourceRoot":"","sources":["../../src/server/hostChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIxD,MAAM,UAAU,WAAW,CAAoB,KAA2B,EAAE,cAAiC;IAC5G,OAAO,KAAK,CAAC,aAAa,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,SAAS;YACV,CAAC;YACD,SAAS,OAAO,CAAC,EAAE,IAAI,EAAwD;gBAC9E,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -10,6 +10,7 @@ export type HostOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandle
10
10
  readonly host?: string;
11
11
  readonly trustedProxy?: string;
12
12
  readonly maxBodySize?: number;
13
+ readonly sensitiveKeys?: readonly string[];
13
14
  readonly disablePreemptiveShutdown?: boolean;
14
15
  };
15
16
  readonly group: RpcGroup.RpcGroup<TRpcs>;
@@ -1 +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,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,IAAI;IAChJ,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;CACxC,GAAG,CACD;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAA;CAAE,GAClF,CAAC,CAAC,SAAS,GAAG,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,KAAK,CAAC,CAC9G,CAAC;AAEF,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"}
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,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,IAAI;IAChJ,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,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3C,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;CACxC,GAAG,CACD;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAA;CAAE,GAClF,CAAC,CAAC,SAAS,GAAG,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,KAAK,CAAC,CAC9G,CAAC;AAEF,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"otlpHttpClient.d.ts","sourceRoot":"","sources":["../../src/server/otlpHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAmB,UAAU,EAA2C,MAAM,aAAa,CAAC;AASnG,wBAAgB,cAAc,CAAC,OAAO,SAAS,oDAyC9C"}
1
+ {"version":3,"file":"otlpHttpClient.d.ts","sourceRoot":"","sources":["../../src/server/otlpHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAmB,UAAU,EAA2C,MAAM,aAAa,CAAC;AAUnG,wBAAgB,cAAc,CAAC,OAAO,SAAS,oDA0C9C"}
@@ -1,5 +1,6 @@
1
1
  import { Effect, Layer } from "effect";
2
2
  import { FetchHttpClient, HttpClient, HttpClientError } from "effect/http";
3
+ import { RedactionPolicy } from "#server/RedactionPolicy.ts";
3
4
  import { redactOtlpText } from "#server/safeOtlpSerialization.ts";
4
5
  function timeoutError(request) {
5
6
  return new HttpClientError.HttpClientError({
@@ -9,6 +10,7 @@ function timeoutError(request) {
9
10
  export function otlpHttpClient(timeout = 10_000) {
10
11
  return Layer.effect(HttpClient.HttpClient, Effect.gen(function* () {
11
12
  const client = yield* HttpClient.HttpClient;
13
+ const sensitive = yield* RedactionPolicy;
12
14
  let warned = false;
13
15
  function warnOnce(diagnostic) {
14
16
  return Effect.suspend(() => {
@@ -27,7 +29,7 @@ export function otlpHttpClient(timeout = 10_000) {
27
29
  warned = false;
28
30
  return Effect.void;
29
31
  }
30
- return warnOnce(response.text.pipe(Effect.orElseSucceed(() => "Unable to read collector response"), Effect.map((body) => ({ "otlp.response": redactOtlpText(body), "otlp.status": response.status }))));
32
+ return warnOnce(response.text.pipe(Effect.orElseSucceed(() => "Unable to read collector response"), Effect.map((body) => ({ "otlp.response": redactOtlpText(body, "", sensitive), "otlp.status": response.status }))));
31
33
  }), HttpClient.tapError((error) => warnOnce(Effect.succeed({ "otlp.failure": error.reason._tag }))));
32
34
  })).pipe(Layer.provide(FetchHttpClient.layer));
33
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../../src/server/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,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,SAAS,YAAY,CAAC,OAA4C;IACjE,OAAO,IAAI,eAAe,CAAC,eAAe,CAAC;QAC1C,MAAM,EAAE,IAAI,eAAe,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,OAAO,EAAE,CAAC;KACrG,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO,GAAG,MAAM;IAC9C,OAAO,KAAK,CAAC,MAAM,CAClB,UAAU,CAAC,UAAU,EACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,SAAS,QAAQ,CAAC,UAAkD;YACnE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC1B,IAAI,MAAM,EAAE,CAAC;oBACZ,OAAO,MAAM,CAAC,IAAI,CAAC;gBACpB,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1I,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CACjB,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAClD,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAC/C,aAAa,CAAC,IAAI,CACjB,MAAM,CAAC,aAAa,CAAC;YACpB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAChD,CAAC,CACF,CACD,EACD,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3B,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACrD,MAAM,GAAG,KAAK,CAAC;gBACf,OAAO,MAAM,CAAC,IAAI,CAAC;YACpB,CAAC;YACD,OAAO,QAAQ,CACd,QAAQ,CAAC,IAAI,CAAC,IAAI,CACjB,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,mCAAmC,CAAC,EAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CACjG,CACD,CAAC;QACH,CAAC,CAAC,EACF,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAC/F,CAAC;IACH,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../../src/server/otlpHttpClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"otlpTracing.d.ts","sourceRoot":"","sources":["../../src/server/otlpTracing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAKvD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAoD9D,CAAC"}
1
+ {"version":3,"file":"otlpTracing.d.ts","sourceRoot":"","sources":["../../src/server/otlpTracing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAOvD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAqD9D,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { Config, Effect, Layer, Schema } from "effect";
2
2
  import { OtlpSerialization, OtlpTracer } from "effect/observability";
3
3
  import { otlpHttpClient } from "#server/otlpHttpClient.ts";
4
+ import { RedactionPolicy } from "#server/RedactionPolicy.ts";
5
+ import { redactingTracer } from "#server/redactingTracer.ts";
4
6
  import { safeOtlpSerialization } from "#server/safeOtlpSerialization.ts";
5
7
  export const otlpTracing = Layer.unwrap(Effect.gen(function* () {
6
8
  const endpoint = yield* Config.URL("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT").pipe(Config.orElse(() => Config.URL("OTEL_EXPORTER_OTLP_ENDPOINT").pipe(Config.map((url) => {
@@ -20,7 +22,7 @@ export const otlpTracing = Layer.unwrap(Effect.gen(function* () {
20
22
  const exportInterval = yield* Config.Int("OTEL_BSP_SCHEDULE_DELAY").pipe(Config.withDefault(5000));
21
23
  const maxBatchSize = yield* Config.Int("OTEL_BSP_MAX_EXPORT_BATCH_SIZE").pipe(Config.withDefault(1000));
22
24
  const exportTimeout = yield* Config.Int("OTEL_BSP_EXPORT_TIMEOUT").pipe(Config.withDefault(3000));
23
- return OtlpTracer.layer({
25
+ const tracer = OtlpTracer.layer({
24
26
  exportInterval,
25
27
  headers,
26
28
  maxBatchSize,
@@ -28,5 +30,6 @@ export const otlpTracing = Layer.unwrap(Effect.gen(function* () {
28
30
  shutdownTimeout: Math.min(exportTimeout, requestTimeout),
29
31
  url: endpoint.toString(),
30
32
  }).pipe(Layer.provide(safeOtlpSerialization.pipe(Layer.provide(protocol === "http/protobuf" ? OtlpSerialization.layerProtobuf : OtlpSerialization.layerJson))), Layer.provide(otlpHttpClient(requestTimeout)));
33
+ return redactingTracer(yield* RedactionPolicy).pipe(Layer.provideMerge(tracer));
31
34
  }));
32
35
  //# sourceMappingURL=otlpTracing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otlpTracing.js","sourceRoot":"","sources":["../../src/server/otlpTracing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otlpTracing.js","sourceRoot":"","sources":["../../src/server/otlpTracing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Layer } from "effect";
2
+ import type { SensitiveKey } from "#server/rpc-server/sensitive.ts";
3
+ export declare function redactRecord(values: Readonly<Record<string, unknown>>, sensitive: SensitiveKey): Record<string, unknown>;
4
+ export declare function redactingDiagnostics(sensitive: SensitiveKey): Layer.Layer<never, never, never>;
5
+ //# sourceMappingURL=redactingDiagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingDiagnostics.d.ts","sourceRoot":"","sources":["../../src/server/redactingDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,EAAsB,MAAM,QAAQ,CAAC;AAGnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAExH;AACD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,oCAwB3D"}
@@ -0,0 +1,25 @@
1
+ import { Context, Effect, ErrorReporter, Layer, Logger, References } from "effect";
2
+ import { redact } from "#server/rpc-server/redact.ts";
3
+ import { redactDiagnosticCause, redactingErrorReporter } from "#server/rpc-server/redactCause.ts";
4
+ export function redactRecord(values, sensitive) {
5
+ return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, sensitive(key) ? "<redacted>" : redact(value, sensitive)]));
6
+ }
7
+ export function redactingDiagnostics(sensitive) {
8
+ return Layer.effectContext(Effect.gen(function* () {
9
+ const loggers = yield* Logger.CurrentLoggers;
10
+ const reporters = yield* ErrorReporter.CurrentErrorReporters;
11
+ const safeLoggers = new Set([...loggers].map((logger) => Logger.make((options) => {
12
+ const context = options.fiber.context;
13
+ const annotations = redactRecord(options.fiber.getRef(References.CurrentLogAnnotations), sensitive);
14
+ options.fiber.setContext(Context.add(context, References.CurrentLogAnnotations, annotations));
15
+ try {
16
+ return logger.log({ ...options, cause: redactDiagnosticCause(options.cause, sensitive), message: redact(options.message, sensitive) });
17
+ }
18
+ finally {
19
+ options.fiber.setContext(context);
20
+ }
21
+ })));
22
+ return Context.make(Logger.CurrentLoggers, safeLoggers).pipe(Context.add(ErrorReporter.CurrentErrorReporters, new Set([...reporters].map((reporter) => redactingErrorReporter(reporter, sensitive)))));
23
+ }));
24
+ }
25
+ //# sourceMappingURL=redactingDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingDiagnostics.js","sourceRoot":"","sources":["../../src/server/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,8BAA8B,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAGlG,MAAM,UAAU,YAAY,CAAC,MAAyC,EAAE,SAAuB;IAC9F,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1I,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,SAAuB;IAC3D,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,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,SAAS,CAAC,CAAC;YACpG,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,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CACxI,CAAC;IACH,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RpcSerialization } from "effect/rpc";
2
+ import { type SensitiveKey } from "#server/rpc-server/sensitive.ts";
3
+ export declare function redactingRpcSerialization(wire: RpcSerialization.RpcSerialization["Service"], sensitive: SensitiveKey, maskFailure?: (tag: string | undefined, reason: "Fail" | "Die") => boolean): typeof wire;
4
+ //# sourceMappingURL=redactingRpcSerialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingRpcSerialization.d.ts","sourceRoot":"","sources":["../../src/server/redactingRpcSerialization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAK9E,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAClD,SAAS,EAAE,YAAY,EACvB,WAAW,GAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,KAAK,OAAqB,GACrF,OAAO,IAAI,CAwEb"}
@@ -0,0 +1,74 @@
1
+ import { Predicate } from "effect";
2
+ import { redactWire } from "#server/rpc-server/redact.ts";
3
+ import { REDACTED } from "#server/rpc-server/sensitive.ts";
4
+ function isRequestId(value) {
5
+ return typeof value === "string" || typeof value === "number";
6
+ }
7
+ export function redactingRpcSerialization(wire, sensitive, maskFailure = () => false) {
8
+ function reason(value, tag) {
9
+ const redacted = redactWire(value, sensitive);
10
+ if (Predicate.isObjectOrArray(redacted)) {
11
+ if (Predicate.isTagged(value, "Fail") && maskFailure(tag, "Fail")) {
12
+ return { ...redacted, _tag: "Fail", error: REDACTED };
13
+ }
14
+ if (Predicate.isTagged(value, "Die") && maskFailure(tag, "Die")) {
15
+ return { ...redacted, _tag: "Die", defect: REDACTED };
16
+ }
17
+ }
18
+ if ((Predicate.isTagged(value, "Fail") || Predicate.isTagged(value, "Die") || Predicate.isTagged(value, "Interrupt"))
19
+ && Predicate.isObjectOrArray(redacted)) {
20
+ return { ...redacted, _tag: value._tag };
21
+ }
22
+ return redacted;
23
+ }
24
+ function exit(value, tag) {
25
+ if (Predicate.isTagged(value, "Failure") && Predicate.hasProperty(value, "cause")) {
26
+ const cause = Array.isArray(value.cause) ? value.cause.map((item) => reason(item, tag)) : redactWire(value.cause, sensitive);
27
+ return { ...value, cause };
28
+ }
29
+ return value;
30
+ }
31
+ return {
32
+ ...wire,
33
+ makeUnsafe: () => {
34
+ const parser = wire.makeUnsafe();
35
+ const requests = new Map();
36
+ function response(value) {
37
+ if (Array.isArray(value)) {
38
+ return value.map(response);
39
+ }
40
+ if (Predicate.isTagged(value, "Defect") && Predicate.hasProperty(value, "defect")) {
41
+ return { ...value, defect: maskFailure(undefined, "Die") ? REDACTED : redactWire(value.defect, sensitive) };
42
+ }
43
+ if (Predicate.isTagged(value, "Exit")
44
+ && Predicate.hasProperty(value, "requestId")
45
+ && isRequestId(value.requestId)
46
+ && Predicate.hasProperty(value, "exit")) {
47
+ const tag = requests.get(value.requestId);
48
+ requests.delete(value.requestId);
49
+ return { ...value, exit: exit(value.exit, tag) };
50
+ }
51
+ return value;
52
+ }
53
+ return {
54
+ ...parser,
55
+ decode: (data) => {
56
+ const decoded = parser.decode(data);
57
+ for (const request of decoded) {
58
+ if (Predicate.isTagged(request, "Request")
59
+ && Predicate.hasProperty(request, "id")
60
+ && isRequestId(request.id)
61
+ && Predicate.hasProperty(request, "tag")
62
+ && typeof request.tag === "string"
63
+ && !requests.has(request.id)) {
64
+ requests.set(request.id, request.tag);
65
+ }
66
+ }
67
+ return decoded;
68
+ },
69
+ encode: (value) => parser.encode(response(value)),
70
+ };
71
+ },
72
+ };
73
+ }
74
+ //# sourceMappingURL=redactingRpcSerialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingRpcSerialization.js","sourceRoot":"","sources":["../../src/server/redactingRpcSerialization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Layer } from "effect";
2
+ import { type SensitiveKey } from "#server/rpc-server/sensitive.ts";
3
+ export declare function redactingTracer(sensitive: SensitiveKey): Layer.Layer<never, never, never>;
4
+ //# sourceMappingURL=redactingTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingTracer.d.ts","sourceRoot":"","sources":["../../src/server/redactingTracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAU,MAAM,QAAQ,CAAC;AAIrD,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAsB9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,oCAUtD"}
@@ -0,0 +1,32 @@
1
+ import { Effect, Exit, Layer, Tracer } from "effect";
2
+ import { redactRecord } from "#server/redactingDiagnostics.ts";
3
+ import { redact } from "#server/rpc-server/redact.ts";
4
+ import { redactDiagnosticCause } from "#server/rpc-server/redactCause.ts";
5
+ import { REDACTED } from "#server/rpc-server/sensitive.ts";
6
+ function redactLinks(values, sensitive) {
7
+ return values.map((link) => ({ ...link, attributes: redactRecord(link.attributes, sensitive) }));
8
+ }
9
+ function redactSpan(span, sensitive) {
10
+ const end = span.end.bind(span);
11
+ const attribute = span.attribute.bind(span);
12
+ const event = span.event.bind(span);
13
+ const addLinks = span.addLinks.bind(span);
14
+ return Object.assign(span, {
15
+ addLinks: (values) => addLinks(redactLinks(values, sensitive)),
16
+ attribute: (key, value) => attribute(key, sensitive(key) ? REDACTED : redact(value, sensitive)),
17
+ end: (time, exit) => {
18
+ for (const [key, value] of span.attributes) {
19
+ attribute(key, sensitive(key) ? REDACTED : redact(value, sensitive));
20
+ }
21
+ end(time, Exit.isFailure(exit) ? Exit.failCause(redactDiagnosticCause(exit.cause, sensitive)) : exit);
22
+ },
23
+ event: (name, time, attributes) => event(name, time, attributes && redactRecord(attributes, sensitive)),
24
+ });
25
+ }
26
+ export function redactingTracer(sensitive) {
27
+ return Layer.effect(Tracer.Tracer, Effect.map(Tracer.Tracer, (tracer) => Tracer.make({
28
+ ...tracer,
29
+ span: (options) => redactSpan(tracer.span({ ...options, links: redactLinks(options.links, sensitive) }), sensitive),
30
+ })));
31
+ }
32
+ //# sourceMappingURL=redactingTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactingTracer.js","sourceRoot":"","sources":["../../src/server/redactingTracer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- import { type SensitiveKey } from "./sensitive.ts";
1
+ import { type SensitiveKey } from "#server/rpc-server/sensitive.ts";
2
2
  export declare function redact(value: unknown, sensitive?: SensitiveKey): unknown;
3
+ export declare function redactWire(value: unknown, sensitive?: SensitiveKey): unknown;
3
4
  //# sourceMappingURL=redact.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/redact.ts"],"names":[],"mappings":"AACA,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAyD5H,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAExF;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,YAA6B,GAAG,OAAO,CAE5F"}
@@ -1,5 +1,5 @@
1
1
  import { Predicate, Redacted } from "effect";
2
- import { isSensitiveKey, REDACTED, redactText } from "./sensitive.js";
2
+ import { isSensitiveKey, REDACTED, redactErrorStack, redactText } from "#server/rpc-server/sensitive.ts";
3
3
  const MAX_DEPTH = 8;
4
4
  const MAX_ENTRIES = 50;
5
5
  function binary(value) {
@@ -11,7 +11,7 @@ function binary(value) {
11
11
  }
12
12
  return undefined;
13
13
  }
14
- function entriesOf(value) {
14
+ function entriesOf(value, sensitive, bounded) {
15
15
  const entries = Object.entries(value);
16
16
  if (!Predicate.isError(value)) {
17
17
  return entries;
@@ -19,38 +19,46 @@ function entriesOf(value) {
19
19
  const shape = [
20
20
  ["name", value.name],
21
21
  ["message", value.message],
22
- ["stack", value.stack],
22
+ ["stack", bounded ? redactErrorStack(value, sensitive) : value.stack],
23
23
  ];
24
- return value.cause === undefined ? [...shape, ...entries] : [...shape, ...entries, ["cause", value.cause]];
24
+ const extra = entries.filter(([key]) => !["name", "message", "stack", "cause"].includes(key));
25
+ return value.cause === undefined ? [...shape, ...extra] : [...shape, ...extra, ["cause", value.cause]];
25
26
  }
26
- function walk(value, sensitive, depth) {
27
+ function collection(value, sensitive, depth, bounded) {
28
+ if (Array.isArray(value)) {
29
+ const items = value.slice(0, bounded ? MAX_ENTRIES : value.length).map((item) => walk(item, sensitive, depth + 1, bounded));
30
+ return bounded && value.length > MAX_ENTRIES ? [...items, `<${value.length - MAX_ENTRIES} more items>`] : items;
31
+ }
32
+ const entries = entriesOf(value, sensitive, bounded);
33
+ const kept = entries.slice(0, bounded ? MAX_ENTRIES : entries.length).map(([key, nested]) => {
34
+ const stackHeader = key === "stack" && typeof nested === "string" && (sensitive("name") || sensitive("message"));
35
+ return [key, sensitive(key) || stackHeader ? REDACTED : walk(nested, sensitive, depth + 1, bounded)];
36
+ });
37
+ return Object.fromEntries(bounded && entries.length > MAX_ENTRIES ? [...kept, ["<truncated>", `${entries.length - MAX_ENTRIES} more keys`]] : kept);
38
+ }
39
+ function walk(value, sensitive, depth, bounded) {
27
40
  if (Redacted.isRedacted(value)) {
28
41
  return REDACTED;
29
42
  }
30
43
  if (Predicate.isString(value)) {
31
- return redactText(value, sensitive);
44
+ return bounded ? redactText(value, sensitive) : redactText(value, sensitive, Number.POSITIVE_INFINITY);
32
45
  }
33
46
  if (!Predicate.isObjectOrArray(value)) {
34
47
  return value;
35
48
  }
36
49
  const summary = binary(value);
37
50
  if (summary !== undefined) {
38
- return summary;
51
+ return bounded ? summary : value;
39
52
  }
40
- if (depth >= MAX_DEPTH) {
53
+ if (bounded && depth >= MAX_DEPTH) {
41
54
  return "<truncated>";
42
55
  }
43
- if (Array.isArray(value)) {
44
- const items = value.slice(0, MAX_ENTRIES).map((item) => walk(item, sensitive, depth + 1));
45
- return value.length > MAX_ENTRIES ? [...items, `<${value.length - MAX_ENTRIES} more items>`] : items;
46
- }
47
- const entries = entriesOf(value);
48
- const kept = entries
49
- .slice(0, MAX_ENTRIES)
50
- .map(([key, nested]) => [key, sensitive(key) ? REDACTED : walk(nested, sensitive, depth + 1)]);
51
- return Object.fromEntries(entries.length > MAX_ENTRIES ? [...kept, ["<truncated>", `${entries.length - MAX_ENTRIES} more keys`]] : kept);
56
+ return collection(value, sensitive, depth, bounded);
52
57
  }
53
58
  export function redact(value, sensitive = isSensitiveKey) {
54
- return walk(value, sensitive, 0);
59
+ return walk(value, sensitive, 0, true);
60
+ }
61
+ export function redactWire(value, sensitive = isSensitiveKey) {
62
+ return walk(value, sensitive, 0, false);
55
63
  }
56
64
  //# sourceMappingURL=redact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/server/rpc-server/redact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/server/rpc-server/redact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,iCAAiC,CAAC;AAE5H,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,SAAS,MAAM,CAAC,KAAa;IAC5B,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,SAAS,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QAClC,OAAO,gBAAgB,KAAK,CAAC,UAAU,SAAS,CAAC;IAClD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AACD,SAAS,SAAS,CAAC,KAAa,EAAE,SAAuB,EAAE,OAAgB;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAwB;QAClC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;QAC1B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;KACrE,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxG,CAAC;AACD,SAAS,UAAU,CAAC,KAAa,EAAE,SAAuB,EAAE,KAAa,EAAE,OAAgB;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5H,OAAO,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAqB,EAAE;QAC9G,MAAM,WAAW,GAAG,GAAG,KAAK,OAAO,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrJ,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,SAAuB,EAAE,KAAa,EAAE,OAAgB;IACrF,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC;IACtB,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,SAAS,GAAiB,cAAc;IAC9E,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,SAAS,GAAiB,cAAc;IAClF,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Cause, ErrorReporter } from "effect";
2
- import { type SensitiveKey } from "./sensitive.ts";
2
+ import { type SensitiveKey } from "#server/rpc-server/sensitive.ts";
3
3
  export declare function redactDefect(defect: unknown, sensitive?: SensitiveKey): unknown;
4
4
  export declare function redactCause<E>(cause: Cause.Cause<E>, sensitive?: SensitiveKey): Cause.Cause<E>;
5
+ export declare function redactDiagnosticCause(cause: Cause.Cause<unknown>, sensitive?: SensitiveKey): Cause.Cause<unknown>;
5
6
  export declare function redactingErrorReporter(reporter: ErrorReporter.ErrorReporter, sensitive?: SensitiveKey): ErrorReporter.ErrorReporter;
6
7
  //# sourceMappingURL=redactCause.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"redactCause.d.ts","sourceRoot":"","sources":["../../../src/server/rpc-server/redactCause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,aAAa,EAA8B,MAAM,QAAQ,CAAC;AAEnF,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA4B5H,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;AAgDD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,GAAE,YAA6B,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAQjI;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,GAAE,YAA6B,GAAG,aAAa,CAAC,aAAa,CAKnJ"}