@bett3r-dev/pv3-types 1.0.0 → 1.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.
Files changed (137) hide show
  1. package/CHANGELOG.md +305 -0
  2. package/build/adminPlugin.d.ts +24 -0
  3. package/build/adminPlugin.d.ts.map +1 -0
  4. package/build/{eventsourcing/utils.js → adminPlugin.js} +1 -1
  5. package/build/adminPlugin.js.map +1 -0
  6. package/build/aggregateSchema.d.ts +94 -0
  7. package/build/aggregateSchema.d.ts.map +1 -0
  8. package/build/aggregateSchema.js +287 -0
  9. package/build/aggregateSchema.js.map +1 -0
  10. package/build/authentication.d.ts +179 -78
  11. package/build/authentication.d.ts.map +1 -1
  12. package/build/authentication.js +62 -19
  13. package/build/authentication.js.map +1 -1
  14. package/build/cache.d.ts +50 -4
  15. package/build/cache.d.ts.map +1 -1
  16. package/build/clusterAdministration.d.ts +712 -225
  17. package/build/clusterAdministration.d.ts.map +1 -1
  18. package/build/clusterAdministration.js +175 -52
  19. package/build/clusterAdministration.js.map +1 -1
  20. package/build/configuration.d.ts +26 -5
  21. package/build/configuration.d.ts.map +1 -1
  22. package/build/database.d.ts +240 -56
  23. package/build/database.d.ts.map +1 -1
  24. package/build/database.js +102 -20
  25. package/build/database.js.map +1 -1
  26. package/build/endpoints.d.ts +141 -41
  27. package/build/endpoints.d.ts.map +1 -1
  28. package/build/endpoints.js +50 -26
  29. package/build/endpoints.js.map +1 -1
  30. package/build/errors.d.ts +166 -0
  31. package/build/errors.d.ts.map +1 -0
  32. package/build/errors.js +276 -0
  33. package/build/errors.js.map +1 -0
  34. package/build/evenstore.d.ts +47 -7
  35. package/build/evenstore.d.ts.map +1 -1
  36. package/build/eventsourcing/aggregateBuilder.d.ts +17 -8
  37. package/build/eventsourcing/aggregateBuilder.d.ts.map +1 -1
  38. package/build/eventsourcing/commandBuilder.d.ts +20 -13
  39. package/build/eventsourcing/commandBuilder.d.ts.map +1 -1
  40. package/build/eventsourcing/commandHandlers.d.ts +155 -33
  41. package/build/eventsourcing/commandHandlers.d.ts.map +1 -1
  42. package/build/eventsourcing/commandHandlers.js +62 -14
  43. package/build/eventsourcing/commandHandlers.js.map +1 -1
  44. package/build/eventsourcing/eventHandlers.d.ts +173 -44
  45. package/build/eventsourcing/eventHandlers.d.ts.map +1 -1
  46. package/build/eventsourcing/eventHandlers.js +29 -21
  47. package/build/eventsourcing/eventHandlers.js.map +1 -1
  48. package/build/eventsourcing/eventHandlersBuilder.d.ts +18 -12
  49. package/build/eventsourcing/eventHandlersBuilder.d.ts.map +1 -1
  50. package/build/eventsourcing/eventHandlersBuilder.js.map +1 -1
  51. package/build/eventsourcing/eventsourcing.types.d.ts +322 -0
  52. package/build/eventsourcing/eventsourcing.types.d.ts.map +1 -0
  53. package/build/eventsourcing/eventsourcing.types.js +26 -0
  54. package/build/eventsourcing/eventsourcing.types.js.map +1 -0
  55. package/build/eventsourcing/externalSystemBuilder.d.ts +8 -7
  56. package/build/eventsourcing/externalSystemBuilder.d.ts.map +1 -1
  57. package/build/eventsourcing/index.d.ts +2 -378
  58. package/build/eventsourcing/index.d.ts.map +1 -1
  59. package/build/eventsourcing/index.js +2 -23
  60. package/build/eventsourcing/index.js.map +1 -1
  61. package/build/eventsourcing/invariants.d.ts +34 -10
  62. package/build/eventsourcing/invariants.d.ts.map +1 -1
  63. package/build/eventsourcing/shapeChangeForSubscriber.d.ts +33 -0
  64. package/build/eventsourcing/shapeChangeForSubscriber.d.ts.map +1 -0
  65. package/build/eventsourcing/shapeChangeForSubscriber.js +47 -0
  66. package/build/eventsourcing/shapeChangeForSubscriber.js.map +1 -0
  67. package/build/index.d.ts +6 -1
  68. package/build/index.d.ts.map +1 -1
  69. package/build/index.js +6 -1
  70. package/build/index.js.map +1 -1
  71. package/build/infrastructure.d.ts +9 -1
  72. package/build/infrastructure.d.ts.map +1 -1
  73. package/build/infrastructure.js +33 -1
  74. package/build/infrastructure.js.map +1 -1
  75. package/build/livenessWatchdog.d.ts +28 -0
  76. package/build/livenessWatchdog.d.ts.map +1 -0
  77. package/build/livenessWatchdog.js +43 -0
  78. package/build/livenessWatchdog.js.map +1 -0
  79. package/build/logger.d.ts +8 -9
  80. package/build/logger.d.ts.map +1 -1
  81. package/build/logger.js +18 -6
  82. package/build/logger.js.map +1 -1
  83. package/build/outboxManager.d.ts +858 -14
  84. package/build/outboxManager.d.ts.map +1 -1
  85. package/build/outboxManager.js +173 -15
  86. package/build/outboxManager.js.map +1 -1
  87. package/build/permissions.d.ts +47 -0
  88. package/build/permissions.d.ts.map +1 -0
  89. package/build/permissions.js +3 -0
  90. package/build/permissions.js.map +1 -0
  91. package/build/ports.d.ts +10 -10
  92. package/build/ports.d.ts.map +1 -1
  93. package/build/routesAuth.d.ts +17 -25
  94. package/build/routesAuth.d.ts.map +1 -1
  95. package/build/routesAuth.js +4 -14
  96. package/build/routesAuth.js.map +1 -1
  97. package/build/typedEventEmitter.d.ts +7 -13
  98. package/build/typedEventEmitter.d.ts.map +1 -1
  99. package/build/typedEventEmitter.js +2 -2
  100. package/build/typedEventEmitter.js.map +1 -1
  101. package/build/userSession.d.ts +8 -0
  102. package/build/userSession.d.ts.map +1 -0
  103. package/build/userSession.js +3 -0
  104. package/build/userSession.js.map +1 -0
  105. package/package.json +22 -7
  106. package/build/eventsourcing/utils.d.ts +0 -4
  107. package/build/eventsourcing/utils.d.ts.map +0 -1
  108. package/build/eventsourcing/utils.js.map +0 -1
  109. package/build/validation.d.ts +0 -64
  110. package/build/validation.d.ts.map +0 -1
  111. package/build/validation.js +0 -57
  112. package/build/validation.js.map +0 -1
  113. package/src/authentication.ts +0 -273
  114. package/src/cache.ts +0 -109
  115. package/src/clusterAdministration.ts +0 -216
  116. package/src/configuration.ts +0 -71
  117. package/src/database.ts +0 -157
  118. package/src/endpoints.ts +0 -198
  119. package/src/evenstore.ts +0 -27
  120. package/src/eventsourcing/aggregateBuilder.ts +0 -11
  121. package/src/eventsourcing/commandBuilder.ts +0 -64
  122. package/src/eventsourcing/commandHandlers.ts +0 -137
  123. package/src/eventsourcing/eventHandlers.ts +0 -118
  124. package/src/eventsourcing/eventHandlersBuilder.ts +0 -42
  125. package/src/eventsourcing/externalSystemBuilder.ts +0 -20
  126. package/src/eventsourcing/index.ts +0 -111
  127. package/src/eventsourcing/invariants.ts +0 -27
  128. package/src/eventsourcing/utils.ts +0 -4
  129. package/src/index.ts +0 -15
  130. package/src/infrastructure.ts +0 -41
  131. package/src/logger.ts +0 -45
  132. package/src/outboxManager.ts +0 -36
  133. package/src/ports.ts +0 -42
  134. package/src/routesAuth.ts +0 -58
  135. package/src/typedEventEmitter.ts +0 -73
  136. package/src/validation.ts +0 -89
  137. package/tsconfig.json +0 -15
@@ -1,8 +1,14 @@
1
1
  import { OpenAPIV3_1 } from 'openapi-types';
2
- import { StructureServiceType } from './clusterAdministration';
2
+ import { StructureServiceType, StructureState } from './clusterAdministration';
3
3
  import { AdapterBase } from './ports';
4
4
  export declare const InfrastructureConfigSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
5
+ adapter?: "docker" | "kubernetes" | undefined;
6
+ kubernetes?: {
7
+ namespace?: string | undefined;
8
+ labelSelector?: string | undefined;
9
+ } | undefined;
5
10
  infrastructureLeaderRandomBackoff?: number | undefined;
11
+ infrastructureReconcileIntervalMs?: number | undefined;
6
12
  }, true>;
7
13
  export type InfrastructureConfigType = typeof InfrastructureConfigSchema.type;
8
14
  export type EnvironmentServiceType = {
@@ -10,6 +16,7 @@ export type EnvironmentServiceType = {
10
16
  service: string;
11
17
  openApiEndpoint?: string;
12
18
  instances: {
19
+ id: string;
13
20
  host: string;
14
21
  timeRunning: number;
15
22
  }[];
@@ -33,6 +40,7 @@ export type InfrastructureAdapterType = AdapterBase & {
33
40
  reloadLoadBalancer: () => Promise<void>;
34
41
  };
35
42
  export type InfrastructurePortType = InfrastructureAdapterType & {
43
+ getStructureState: () => StructureState;
36
44
  getServicesOpenApiDocumentation: () => Record<string, OpenAPIV3_1.Document>;
37
45
  getThisServiceInfo: () => InfrastructureThisServiceType;
38
46
  start: InfrastructureAdapterType['start'];
@@ -1 +1 @@
1
- {"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,0BAA0B;;QAErC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAC;AAE9E,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG;IAC5E,SAAS,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAA;AACD,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG;IACpD,WAAW,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAGrD,YAAY,EAAE,CAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,8BAA8B,EAAE,CAAE,QAAQ,EAAE,CAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,sBAAsB,KAAM,IAAI,KAAM,IAAI,CAAC;IAC/H,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,yBAAyB,GAAG;IAC/D,+BAA+B,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5E,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;IACxD,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;CAC3C,CAAA"}
1
+ {"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,0BAA0B;;;;;;;;QAkCrC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAC;AAE9E,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG;IAC5E,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG;IACpD,WAAW,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAGrD,YAAY,EAAE,CAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,8BAA8B,EAAE,CAAE,QAAQ,EAAE,CAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,sBAAsB,KAAM,IAAI,KAAM,IAAI,CAAC;IAC/H,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,yBAAyB,GAAG;IAC/D,iBAAiB,EAAE,MAAM,cAAc,CAAC;IACxC,+BAA+B,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5E,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;IACxD,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;CAC3C,CAAC"}
@@ -6,6 +6,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.InfrastructureConfigSchema = void 0;
7
7
  const jsonschema_definer_1 = __importDefault(require("@bett3r-dev/jsonschema-definer"));
8
8
  exports.InfrastructureConfigSchema = jsonschema_definer_1.default.shape({
9
- infrastructureLeaderRandomBackoff: jsonschema_definer_1.default.number().default(1000).optional()
9
+ // WHICH infrastructure adapter the composition root loads. Selected by config and
10
+ // nowhere else — no env-var sniffing at the composition root — and the two adapter
11
+ // packages are `await import()`ed on opposite sides of the branch so the unused
12
+ // heavyweight client (`dockerode` / `@kubernetes/client-node`) never loads.
13
+ //
14
+ // ⚠️ This key MUST be declared here even though only the consuming application reads
15
+ // it. `S.shape` closes `additionalProperties`, so an undeclared key is not ignored —
16
+ // the configuration port THROWS at construction, which is boot-fatal for every
17
+ // process and, because nothing compiles YAML, is caught by no gate.
18
+ adapter: jsonschema_definer_1.default.string().enum('docker', 'kubernetes')
19
+ .default('docker')
20
+ .optional(),
21
+ // Settings for the kubernetes adapter; ignored when `adapter` is `docker`. Mirrors
22
+ // `KubernetesInfrastructureConfig` in `@bett3r-dev/pv3-adapter-infrastructure-kubernetes`
23
+ // — keep the two in step, since this schema is what validates the YAML and that type is
24
+ // what consumes it.
25
+ kubernetes: jsonschema_definer_1.default.shape({
26
+ // Unset, the adapter's namespace resolver reads the projected serviceaccount
27
+ // `namespace` file and silently falls back to `default`.
28
+ namespace: jsonschema_definer_1.default.string().optional(),
29
+ labelSelector: jsonschema_definer_1.default.string().optional()
30
+ }).optional(),
31
+ infrastructureLeaderRandomBackoff: jsonschema_definer_1.default.number().default(1000)
32
+ .optional(),
33
+ // Periodic membership-reconcile cadence (ms). The docker-event reconcile is edge-triggered and can
34
+ // miss a `die` (or predate a late-booting node that never saw it); this interval re-runs the same
35
+ // observed-death sweep (structure hosts absent from live getServices → removeHosts) so a
36
+ // self-fenced / healthchecked / crashed node is RELIABLY removed. 0 disables the periodic sweep.
37
+ infrastructureReconcileIntervalMs: jsonschema_definer_1.default.number().default(15000)
38
+ .optional()
39
+ // Which infrastructure adapter this process talks to. `S.shape()` compiles to
40
+ // `additionalProperties: false` and the config loader validates this block, so every yaml key
41
+ // below MUST have an entry here or boot fails with VALIDATION_ERROR.
10
42
  });
11
43
  //# sourceMappingURL=infrastructure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":";;;;;;AAAA,wFAA+C;AAKlC,QAAA,0BAA0B,GAAG,4BAAC,CAAC,KAAK,CAAC;IAChD,iCAAiC,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAE,IAAI,CAAE,CAAC,QAAQ,EAAE;CACzE,CAAC,CAAC"}
1
+ {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":";;;;;;AAAA,wFAA+C;AAKlC,QAAA,0BAA0B,GAAG,4BAAC,CAAC,KAAK,CAAC;IAChD,kFAAkF;IAClF,mFAAmF;IACnF,gFAAgF;IAChF,4EAA4E;IAC5E,EAAE;IACF,qFAAqF;IACrF,qFAAqF;IACrF,+EAA+E;IAC/E,oEAAoE;IACpE,OAAO,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAE,QAAQ,EAAE,YAAY,CAAE;SACnD,OAAO,CAAE,QAAQ,CAAE;SACf,QAAQ,EAAE;IACb,mFAAmF;IACnF,0FAA0F;IAC1F,wFAAwF;IACxF,oBAAoB;IACpB,UAAU,EAAE,4BAAC,CAAC,KAAK,CAAC;QAClB,6EAA6E;QAC7E,yDAAyD;QACzD,SAAS,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,aAAa,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACrC,CAAC,CAAC,QAAQ,EAAE;IACb,iCAAiC,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAE,IAAI,CAAE;SAC1D,QAAQ,EAAE;IACb,mGAAmG;IACnG,kGAAkG;IAClG,yFAAyF;IACzF,iGAAiG;IACjG,iCAAiC,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAE,KAAK,CAAE;SAC3D,QAAQ,EAAE;IACb,8EAA8E;IAC9E,8FAA8F;IAC9F,qEAAqE;CACtE,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { LoggerType } from './logger';
2
+ export type LivenessWatchdogOptions = {
3
+ /** The probe-less role this watchdog speaks for — it is the only name the restart log carries. */
4
+ role: string;
5
+ /** Consecutive failures tolerated before the process is exited. */
6
+ threshold: number;
7
+ logger: LoggerType;
8
+ /** Injected so tests never really exit. */
9
+ exit?: (code: number) => void;
10
+ };
11
+ export type LivenessWatchdogType = {
12
+ recordFailure: (error?: unknown) => void;
13
+ recordSuccess: () => void;
14
+ getConsecutiveFailures: () => number;
15
+ hasFired: () => boolean;
16
+ };
17
+ /**
18
+ * A probe-less role (the infrastructure reconcile loop, the wal-reader's slot watchdog) keeps its
19
+ * container `1/1 Running` while doing nothing at all — nothing observes it, so nothing restarts it.
20
+ * This counter is the substitute: N CONSECUTIVE failures produce a structured log naming the role
21
+ * and the streak, then an exit the kubelet turns into a restart. Successes reset the streak, so an
22
+ * intermittent failure never accumulates into a kill; and it fires exactly ONCE, because every
23
+ * failure after the exit call arrives while the process is already tearing down.
24
+ *
25
+ * It owns no timers: callers drive it.
26
+ */
27
+ export declare const createLivenessWatchdog: ({ role, threshold, logger, exit }: LivenessWatchdogOptions) => LivenessWatchdogType;
28
+ //# sourceMappingURL=livenessWatchdog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livenessWatchdog.d.ts","sourceRoot":"","sources":["../src/livenessWatchdog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,CAAE,IAAI,EAAE,MAAM,KAAM,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAE,KAAK,CAAC,EAAE,OAAO,KAAM,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,sCAAkF,uBAAuB,KAAI,oBAyB/I,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLivenessWatchdog = void 0;
4
+ /**
5
+ * A probe-less role (the infrastructure reconcile loop, the wal-reader's slot watchdog) keeps its
6
+ * container `1/1 Running` while doing nothing at all — nothing observes it, so nothing restarts it.
7
+ * This counter is the substitute: N CONSECUTIVE failures produce a structured log naming the role
8
+ * and the streak, then an exit the kubelet turns into a restart. Successes reset the streak, so an
9
+ * intermittent failure never accumulates into a kill; and it fires exactly ONCE, because every
10
+ * failure after the exit call arrives while the process is already tearing down.
11
+ *
12
+ * It owns no timers: callers drive it.
13
+ */
14
+ const createLivenessWatchdog = ({ role, threshold, logger, exit = (code) => process.exit(code) }) => {
15
+ let consecutiveFailures = 0;
16
+ let fired = false;
17
+ return {
18
+ recordFailure: (error) => {
19
+ if (fired)
20
+ return;
21
+ consecutiveFailures++;
22
+ if (consecutiveFailures < threshold)
23
+ return;
24
+ fired = true;
25
+ logger.error(`[liveness-watchdog] role "${role}" failed ${consecutiveFailures} consecutive times (threshold ${threshold}); exiting so the orchestrator restarts it`, {
26
+ role,
27
+ consecutiveFailures,
28
+ threshold,
29
+ error: error instanceof Error ? error.message : error
30
+ });
31
+ exit(1);
32
+ },
33
+ recordSuccess: () => {
34
+ if (fired)
35
+ return;
36
+ consecutiveFailures = 0;
37
+ },
38
+ getConsecutiveFailures: () => consecutiveFailures,
39
+ hasFired: () => fired
40
+ };
41
+ };
42
+ exports.createLivenessWatchdog = createLivenessWatchdog;
43
+ //# sourceMappingURL=livenessWatchdog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livenessWatchdog.js","sourceRoot":"","sources":["../src/livenessWatchdog.ts"],"names":[],"mappings":";;;AAmBA;;;;;;;;;GASG;AACI,MAAM,sBAAsB,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,GAAG,CAAE,IAAY,EAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAE,IAAI,CAAE,EAA2B,EAAyB,EAAE;IACrK,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,OAAO;QACL,aAAa,EAAE,CAAE,KAAe,EAAG,EAAE;YACnC,IAAK,KAAK;gBAAG,OAAO;YACpB,mBAAmB,EAAE,CAAC;YACtB,IAAK,mBAAmB,GAAG,SAAS;gBAAG,OAAO;YAC9C,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,6BAA6B,IAAI,YAAY,mBAAmB,iCAAiC,SAAS,4CAA4C,EAAE;gBACpK,IAAI;gBACJ,mBAAmB;gBACnB,SAAS;gBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;aACtD,CAAC,CAAC;YACH,IAAI,CAAE,CAAC,CAAE,CAAC;QACZ,CAAC;QACD,aAAa,EAAE,GAAG,EAAE;YAClB,IAAK,KAAK;gBAAG,OAAO;YACpB,mBAAmB,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,sBAAsB,EAAE,GAAG,EAAE,CAAC,mBAAmB;QACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,sBAAsB,GAAtB,sBAAsB,CAyBjC"}
package/build/logger.d.ts CHANGED
@@ -1,19 +1,18 @@
1
1
  import { AdapterBase } from './ports';
2
+ /** `off` silences a module entirely; it is a config value only, never an emitted level. */
3
+ export declare const LoggerConfigLevelSchema: import("@bett3r-dev/jsonschema-definer").BaseSchema<"debug" | "error" | "info" | "log" | "off" | "silly" | "warn", true, Readonly<import("@bett3r-dev/jsonschema-definer/dist/base").BaseJsonSchema>>;
4
+ export type LoggerConfigLevel = typeof LoggerConfigLevelSchema.type;
2
5
  export declare const LoggerConfigSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
3
- logLevel?: "info" | "silly" | "debug" | "log" | "warn" | "error" | undefined;
6
+ logLevel?: "debug" | "error" | "info" | "log" | "off" | "silly" | "warn" | undefined;
7
+ moduleLevels?: {
8
+ [x: string]: "debug" | "error" | "info" | "log" | "off" | "silly" | "warn";
9
+ } | undefined;
4
10
  modulesWhitelist?: string[] | undefined;
5
11
  modulesBlacklist?: string[] | undefined;
6
12
  }, false>;
7
13
  export type LoggerConfig = typeof LoggerConfigSchema.type;
8
14
  export type LogLevels = 'silly' | 'debug' | 'log' | 'info' | 'warn' | 'error';
9
- export declare const LogLevelMap: {
10
- error: number;
11
- warn: number;
12
- info: number;
13
- log: number;
14
- debug: number;
15
- silly: number;
16
- };
15
+ export declare const LogLevelMap: Record<LoggerConfigLevel, number>;
17
16
  export declare const LevelLogMap: Record<number, LogLevels>;
18
17
  export type LoggerAdapter = AdapterBase & {
19
18
  log: (originalArgs: any[], level: LogLevels, module: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,kBAAkB;;;;SAIlB,CAAC;AACd,MAAM,MAAM,YAAY,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC;AAE1D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAE,OAAO,GAAE,KAAK,GAAE,MAAM,GAAE,MAAM,GAAE,OAAO,CAAC;AAEzE,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AACF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAOjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACxC,GAAG,EAAE,CAAE,YAAY,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAG,MAAM,EAAE,MAAM,KAAM,IAAI,CAAA;CACxE,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,oBAAoB,EAAE,CAAE,MAAM,EAAE,MAAM,KAAM,UAAU,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC9B,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;CAC/B,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,2FAA2F;AAC3F,eAAO,MAAM,uBAAuB,uMAA6E,CAAC;AAClH,MAAM,MAAM,iBAAiB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;SAalB,CAAC;AACd,MAAM,MAAM,YAAY,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC;AAE1D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9E,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAQzD,CAAC;AACF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAOjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACxC,GAAG,EAAE,CAAE,YAAY,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAG,MAAM,EAAE,MAAM,KAAM,IAAI,CAAA;CACxE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,oBAAoB,EAAE,CAAE,MAAM,EAAE,MAAM,KAAM,UAAU,CAAA;CACvD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC9B,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAG,IAAI,CAAA;CAC/B,CAAC"}
package/build/logger.js CHANGED
@@ -3,20 +3,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LevelLogMap = exports.LogLevelMap = exports.LoggerConfigSchema = void 0;
6
+ exports.LevelLogMap = exports.LogLevelMap = exports.LoggerConfigSchema = exports.LoggerConfigLevelSchema = void 0;
7
7
  const jsonschema_definer_1 = __importDefault(require("@bett3r-dev/jsonschema-definer"));
8
+ /** `off` silences a module entirely; it is a config value only, never an emitted level. */
9
+ exports.LoggerConfigLevelSchema = jsonschema_definer_1.default.string().enum('silly', 'debug', 'log', 'info', 'warn', 'error', 'off');
8
10
  exports.LoggerConfigSchema = jsonschema_definer_1.default.shape({
9
- logLevel: jsonschema_definer_1.default.string().enum('silly', 'debug', 'log', 'info', 'warn', 'error').optional(),
10
- modulesWhitelist: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string()).optional(),
11
- modulesBlacklist: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string()).optional()
11
+ logLevel: exports.LoggerConfigLevelSchema
12
+ .optional(),
13
+ /**
14
+ * Per-module level override, keyed by the exact name passed to `createLoggerInstance`.
15
+ * Modules not listed use `logLevel`. Black/whitelist filtering still applies first.
16
+ */
17
+ moduleLevels: jsonschema_definer_1.default.shape({}).additionalProperties(exports.LoggerConfigLevelSchema)
18
+ .optional(),
19
+ modulesWhitelist: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string())
20
+ .optional(),
21
+ modulesBlacklist: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string())
22
+ .optional()
12
23
  }).optional();
13
24
  exports.LogLevelMap = {
25
+ off: -1,
14
26
  error: 0,
15
27
  warn: 1,
16
28
  info: 2,
17
29
  log: 3,
18
30
  debug: 4,
19
- silly: 5,
31
+ silly: 5
20
32
  };
21
33
  exports.LevelLogMap = {
22
34
  0: 'error',
@@ -24,6 +36,6 @@ exports.LevelLogMap = {
24
36
  2: 'info',
25
37
  3: 'log',
26
38
  4: 'debug',
27
- 5: 'silly',
39
+ 5: 'silly'
28
40
  };
29
41
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;AAAA,wFAA+C;AAGlC,QAAA,kBAAkB,GAAG,4BAAC,CAAC,KAAK,CAAC;IACxC,QAAQ,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAE,CAAC,QAAQ,EAAE;IACxF,gBAAgB,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,gBAAgB,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC,CAAC,QAAQ,EAAE,CAAC;AAKD,QAAA,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AACW,QAAA,WAAW,GAA8B;IACpD,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;CACX,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;AAAA,wFAA+C;AAG/C,2FAA2F;AAC9E,QAAA,uBAAuB,GAAG,4BAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAE,CAAC;AAGrG,QAAA,kBAAkB,GAAG,4BAAC,CAAC,KAAK,CAAC;IACxC,QAAQ,EAAE,QAAA,uBAAuB;SAC9B,QAAQ,EAAE;IACb;;;OAGG;IACH,YAAY,EAAE,4BAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAE,QAAA,uBAAuB,CAAE;SACtE,QAAQ,EAAE;IACb,gBAAgB,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,CAAC;SAC3C,QAAQ,EAAE;IACb,gBAAgB,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,CAAC;SAC3C,QAAQ,EAAE;CACd,CAAC,CAAC,QAAQ,EAAE,CAAC;AAKD,QAAA,WAAW,GAAsC;IAC5D,GAAG,EAAE,CAAC,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AACW,QAAA,WAAW,GAA8B;IACpD,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;CACX,CAAC"}