@unifyplane/logsdk 0.1.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 (170) hide show
  1. package/README.md +18 -0
  2. package/contracts/repo.capabilities.json +12 -0
  3. package/contracts/repo.runtime.json +49 -0
  4. package/contracts/schemas/repo/repo.runtime.v1.schema.json +134 -0
  5. package/dist/core/clock.d.ts +3 -0
  6. package/dist/core/clock.d.ts.map +1 -0
  7. package/dist/core/clock.js +21 -0
  8. package/dist/core/clock.js.map +1 -0
  9. package/dist/core/context.d.ts +10 -0
  10. package/dist/core/context.d.ts.map +1 -0
  11. package/dist/core/context.js +100 -0
  12. package/dist/core/context.js.map +1 -0
  13. package/dist/core/fanout.d.ts +4 -0
  14. package/dist/core/fanout.d.ts.map +1 -0
  15. package/dist/core/fanout.js +32 -0
  16. package/dist/core/fanout.js.map +1 -0
  17. package/dist/core/ids.d.ts +6 -0
  18. package/dist/core/ids.d.ts.map +1 -0
  19. package/dist/core/ids.js +27 -0
  20. package/dist/core/ids.js.map +1 -0
  21. package/dist/core/message_constraints.d.ts +4 -0
  22. package/dist/core/message_constraints.d.ts.map +1 -0
  23. package/dist/core/message_constraints.js +53 -0
  24. package/dist/core/message_constraints.js.map +1 -0
  25. package/dist/core/outcomes.d.ts +5 -0
  26. package/dist/core/outcomes.d.ts.map +1 -0
  27. package/dist/core/outcomes.js +4 -0
  28. package/dist/core/outcomes.js.map +1 -0
  29. package/dist/core/record_builder.d.ts +34 -0
  30. package/dist/core/record_builder.d.ts.map +1 -0
  31. package/dist/core/record_builder.js +188 -0
  32. package/dist/core/record_builder.js.map +1 -0
  33. package/dist/core/spool.d.ts +4 -0
  34. package/dist/core/spool.d.ts.map +1 -0
  35. package/dist/core/spool.js +31 -0
  36. package/dist/core/spool.js.map +1 -0
  37. package/dist/core/types.d.ts +33 -0
  38. package/dist/core/types.d.ts.map +1 -0
  39. package/dist/core/types.js +4 -0
  40. package/dist/core/types.js.map +1 -0
  41. package/dist/esm/core/clock.js +21 -0
  42. package/dist/esm/core/clock.js.map +1 -0
  43. package/dist/esm/core/context.js +100 -0
  44. package/dist/esm/core/context.js.map +1 -0
  45. package/dist/esm/core/fanout.js +32 -0
  46. package/dist/esm/core/fanout.js.map +1 -0
  47. package/dist/esm/core/ids.js +27 -0
  48. package/dist/esm/core/ids.js.map +1 -0
  49. package/dist/esm/core/message_constraints.js +53 -0
  50. package/dist/esm/core/message_constraints.js.map +1 -0
  51. package/dist/esm/core/outcomes.js +4 -0
  52. package/dist/esm/core/outcomes.js.map +1 -0
  53. package/dist/esm/core/record_builder.js +188 -0
  54. package/dist/esm/core/record_builder.js.map +1 -0
  55. package/dist/esm/core/spool.js +31 -0
  56. package/dist/esm/core/spool.js.map +1 -0
  57. package/dist/esm/core/types.js +4 -0
  58. package/dist/esm/core/types.js.map +1 -0
  59. package/dist/esm/index.js +52 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/sinks/file_ndjson.js +29 -0
  62. package/dist/esm/sinks/file_ndjson.js.map +1 -0
  63. package/dist/esm/sinks/file_ndjson_sink.js +36 -0
  64. package/dist/esm/sinks/file_ndjson_sink.js.map +1 -0
  65. package/dist/esm/sinks/sink_types.js +2 -0
  66. package/dist/esm/sinks/sink_types.js.map +1 -0
  67. package/dist/esm/sinks/stdout_sink.js +15 -0
  68. package/dist/esm/sinks/stdout_sink.js.map +1 -0
  69. package/dist/esm/validate/api_surface_guard.js +63 -0
  70. package/dist/esm/validate/api_surface_guard.js.map +1 -0
  71. package/dist/esm/validate/noncompliance.js +17 -0
  72. package/dist/esm/validate/noncompliance.js.map +1 -0
  73. package/dist/esm/validate/schema_guard.js +151 -0
  74. package/dist/esm/validate/schema_guard.js.map +1 -0
  75. package/dist/index.d.ts +26 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +52 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/sinks/file_ndjson.d.ts +18 -0
  80. package/dist/sinks/file_ndjson.d.ts.map +1 -0
  81. package/dist/sinks/file_ndjson.js +29 -0
  82. package/dist/sinks/file_ndjson.js.map +1 -0
  83. package/dist/sinks/file_ndjson_sink.d.ts +7 -0
  84. package/dist/sinks/file_ndjson_sink.d.ts.map +1 -0
  85. package/dist/sinks/file_ndjson_sink.js +36 -0
  86. package/dist/sinks/file_ndjson_sink.js.map +1 -0
  87. package/dist/sinks/sink_types.d.ts +12 -0
  88. package/dist/sinks/sink_types.d.ts.map +1 -0
  89. package/dist/sinks/sink_types.js +2 -0
  90. package/dist/sinks/sink_types.js.map +1 -0
  91. package/dist/sinks/stdout_sink.d.ts +6 -0
  92. package/dist/sinks/stdout_sink.d.ts.map +1 -0
  93. package/dist/sinks/stdout_sink.js +15 -0
  94. package/dist/sinks/stdout_sink.js.map +1 -0
  95. package/dist/types/core/clock.d.ts +3 -0
  96. package/dist/types/core/clock.d.ts.map +1 -0
  97. package/dist/types/core/context.d.ts +10 -0
  98. package/dist/types/core/context.d.ts.map +1 -0
  99. package/dist/types/core/fanout.d.ts +4 -0
  100. package/dist/types/core/fanout.d.ts.map +1 -0
  101. package/dist/types/core/ids.d.ts +6 -0
  102. package/dist/types/core/ids.d.ts.map +1 -0
  103. package/dist/types/core/message_constraints.d.ts +4 -0
  104. package/dist/types/core/message_constraints.d.ts.map +1 -0
  105. package/dist/types/core/outcomes.d.ts +5 -0
  106. package/dist/types/core/outcomes.d.ts.map +1 -0
  107. package/dist/types/core/record_builder.d.ts +34 -0
  108. package/dist/types/core/record_builder.d.ts.map +1 -0
  109. package/dist/types/core/spool.d.ts +4 -0
  110. package/dist/types/core/spool.d.ts.map +1 -0
  111. package/dist/types/core/types.d.ts +33 -0
  112. package/dist/types/core/types.d.ts.map +1 -0
  113. package/dist/types/index.d.ts +26 -0
  114. package/dist/types/index.d.ts.map +1 -0
  115. package/dist/types/sinks/file_ndjson.d.ts +18 -0
  116. package/dist/types/sinks/file_ndjson.d.ts.map +1 -0
  117. package/dist/types/sinks/file_ndjson_sink.d.ts +7 -0
  118. package/dist/types/sinks/file_ndjson_sink.d.ts.map +1 -0
  119. package/dist/types/sinks/sink_types.d.ts +12 -0
  120. package/dist/types/sinks/sink_types.d.ts.map +1 -0
  121. package/dist/types/sinks/stdout_sink.d.ts +6 -0
  122. package/dist/types/sinks/stdout_sink.d.ts.map +1 -0
  123. package/dist/types/validate/api_surface_guard.d.ts +2 -0
  124. package/dist/types/validate/api_surface_guard.d.ts.map +1 -0
  125. package/dist/types/validate/noncompliance.d.ts +15 -0
  126. package/dist/types/validate/noncompliance.d.ts.map +1 -0
  127. package/dist/types/validate/schema_guard.d.ts +5 -0
  128. package/dist/types/validate/schema_guard.d.ts.map +1 -0
  129. package/dist/validate/api_surface_guard.d.ts +2 -0
  130. package/dist/validate/api_surface_guard.d.ts.map +1 -0
  131. package/dist/validate/api_surface_guard.js +63 -0
  132. package/dist/validate/api_surface_guard.js.map +1 -0
  133. package/dist/validate/noncompliance.d.ts +15 -0
  134. package/dist/validate/noncompliance.d.ts.map +1 -0
  135. package/dist/validate/noncompliance.js +17 -0
  136. package/dist/validate/noncompliance.js.map +1 -0
  137. package/dist/validate/schema_guard.d.ts +5 -0
  138. package/dist/validate/schema_guard.d.ts.map +1 -0
  139. package/dist/validate/schema_guard.js +151 -0
  140. package/dist/validate/schema_guard.js.map +1 -0
  141. package/evidence/audit/llm/llm_audit_report_2026-01-25T15-11-32Z.json +30 -0
  142. package/evidence/audit/llm/llm_audit_report_2026-01-25T15-53-20Z.json +154 -0
  143. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-14-52Z.json +130 -0
  144. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-15-42Z.json +152 -0
  145. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-17-39Z.json +152 -0
  146. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-18-51Z.json +152 -0
  147. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-19-50Z.json +152 -0
  148. package/evidence/audit/llm/llm_audit_report_2026-01-25T16-20-36Z.json +152 -0
  149. package/evidence/audit/llm/llm_audit_report_2026-01-25T23-22-43Z.json +170 -0
  150. package/evidence/audit/llm/llm_audit_report_2026-01-25T23-39-03Z.json +157 -0
  151. package/filestructure.output.txt +73 -0
  152. package/package.json +16 -0
  153. package/src/core/clock.ts +25 -0
  154. package/src/core/context.ts +142 -0
  155. package/src/core/fanout.ts +38 -0
  156. package/src/core/ids.ts +35 -0
  157. package/src/core/message_constraints.ts +66 -0
  158. package/src/core/outcomes.ts +5 -0
  159. package/src/core/record_builder.ts +269 -0
  160. package/src/core/spool.ts +41 -0
  161. package/src/core/types.ts +56 -0
  162. package/src/index.ts +105 -0
  163. package/src/sinks/file_ndjson.ts +42 -0
  164. package/src/sinks/file_ndjson_sink.ts +45 -0
  165. package/src/sinks/sink_types.ts +15 -0
  166. package/src/sinks/stdout_sink.ts +20 -0
  167. package/src/validate/api_surface_guard.ts +106 -0
  168. package/src/validate/noncompliance.ts +33 -0
  169. package/src/validate/schema_guard.ts +242 -0
  170. package/unifyplane-logsdk-0.1.0.tgz +0 -0
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # LogSDK
2
+
3
+ System Type: pipeline
4
+
5
+ ## Runtime Scope
6
+
7
+ LogSDK core is implemented for the Node.js/CommonJS runtime and depends on the Node standard library (fs, crypto, perf_hooks, etc.). Other runtimes (Python, JVM, browsers) must provide a compatible core that e the same canonical contracts, and thin adapters should bridge them into the canonical API surface described in docs/LogSDKFuntionalSpec.md.
8
+
9
+ ## Runtime & Tooling Declaration (Authoritative)
10
+
11
+ - Runtime model: CommonJS | ESM
12
+ - TypeScript module target: commonjs | NodeNext
13
+ - JSON loading strategy: require() | ESM-compliant JSON loading
14
+ - Test runner: jest | vitest | none
15
+ - Build contract:
16
+ - `npm run build` MUST succeed
17
+ - `dist/` MUST be Node-executable without ts-node/tsx
18
+
@@ -0,0 +1,12 @@
1
+ {
2
+ "repo_type": "sdk",
3
+ "system_type": "pipeline",
4
+ "contracts": {
5
+ "validators": false,
6
+ "authority": false,
7
+ "domain": false,
8
+ "schemas": false,
9
+ "constraints": false,
10
+ "specs": false
11
+ }
12
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "./schemas/repo/repo.runtime.v1.schema.json",
3
+ "record_version": "repo.runtime.v1",
4
+
5
+ "repo_id": "unifyplane-logsdk",
6
+ "repo_role": "enterprise-substrate-logging",
7
+
8
+ "module_system": "esm",
9
+ "node_target": "node22",
10
+
11
+ "tsconfig_path": "tsconfig.json",
12
+
13
+ "dist_entry": "dist/index.js",
14
+
15
+ "json_strategy": "esm-import",
16
+
17
+ "ajv": {
18
+ "major": 8,
19
+ "draft": "2020-12",
20
+ "meta_loading": "explicit-file",
21
+ "allow_internal_refs": false
22
+ },
23
+
24
+ "build": {
25
+ "produces_dist": true,
26
+ "dist_required_artifacts": [
27
+ "schemas"
28
+ ]
29
+ },
30
+
31
+ "testing": {
32
+ "runtime_semantics": "dist",
33
+ "smoke_required": true
34
+ },
35
+
36
+ "dependency_policy": {
37
+ "mode": "workspace-allowed",
38
+ "workspace_root_required": true,
39
+ "sunset": {
40
+ "required_before_release": true,
41
+ "next_phase": "published-only",
42
+ "reason": "Enterprise substrate hardening"
43
+ }
44
+ },
45
+
46
+ "governance": {
47
+ "agent_override_allowed": false
48
+ }
49
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "required": [
5
+ "record_version",
6
+ "repo_id",
7
+ "repo_role",
8
+ "module_system",
9
+ "node_target",
10
+ "tsconfig_path",
11
+ "dist_entry",
12
+ "json_strategy",
13
+ "ajv"
14
+ ],
15
+ "properties": {
16
+ "$schema": {
17
+ "type": "string",
18
+ "description": "JSON Schema meta-schema reference (editor/tooling only)"
19
+ },
20
+ "$id": {
21
+ "type": "string",
22
+ "description": "Optional schema identifier"
23
+ },
24
+
25
+ "record_version": {
26
+ "type": "string",
27
+ "const": "repo.runtime.v1"
28
+ },
29
+
30
+ "repo_id": {
31
+ "type": "string"
32
+ },
33
+
34
+ "repo_role": {
35
+ "type": "string",
36
+ "minLength": 3,
37
+ "description": "Declarative runtime role; must not imply authority or governance unless explicitly intended"
38
+ },
39
+
40
+ "module_system": {
41
+ "type": "string",
42
+ "enum": ["cjs", "esm"]
43
+ },
44
+
45
+ "node_target": {
46
+ "type": "string"
47
+ },
48
+
49
+ "tsconfig_path": {
50
+ "type": "string"
51
+ },
52
+
53
+ "dist_entry": {
54
+ "type": "string"
55
+ },
56
+
57
+ "json_strategy": {
58
+ "type": "string",
59
+ "enum": ["cjs-require", "esm-import"]
60
+ },
61
+
62
+ "ajv": {
63
+ "type": "object",
64
+ "required": ["major", "draft", "meta_loading"],
65
+ "properties": {
66
+ "major": { "type": "number" },
67
+ "draft": { "type": "string" },
68
+ "meta_loading": { "type": "string" },
69
+ "allow_internal_refs": { "type": "boolean" }
70
+ },
71
+ "additionalProperties": false
72
+ },
73
+
74
+ "build": {
75
+ "type": "object",
76
+ "required": ["produces_dist"],
77
+ "properties": {
78
+ "produces_dist": { "type": "boolean" },
79
+ "dist_required_artifacts": {
80
+ "type": "array",
81
+ "items": { "type": "string" }
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+
87
+ "testing": {
88
+ "type": "object",
89
+ "required": ["runtime_semantics", "smoke_required"],
90
+ "properties": {
91
+ "runtime_semantics": {
92
+ "type": "string",
93
+ "enum": ["dist", "source"]
94
+ },
95
+ "smoke_required": { "type": "boolean" }
96
+ },
97
+ "additionalProperties": false
98
+ },
99
+
100
+ "dependency_policy": {
101
+ "type": "object",
102
+ "required": ["mode"],
103
+ "properties": {
104
+ "mode": {
105
+ "type": "string",
106
+ "enum": ["workspace-allowed", "published-only"]
107
+ },
108
+ "workspace_root_required": {
109
+ "type": "boolean"
110
+ },
111
+ "sunset": {
112
+ "type": "object",
113
+ "required": ["required_before_release"],
114
+ "properties": {
115
+ "required_before_release": { "type": "boolean" },
116
+ "next_phase": { "type": "string" },
117
+ "reason": { "type": "string" }
118
+ },
119
+ "additionalProperties": false
120
+ }
121
+ },
122
+ "additionalProperties": false
123
+ },
124
+
125
+ "governance": {
126
+ "type": "object",
127
+ "properties": {
128
+ "agent_override_allowed": { "type": "boolean" }
129
+ },
130
+ "additionalProperties": false
131
+ }
132
+ },
133
+ "additionalProperties": false
134
+ }
@@ -0,0 +1,3 @@
1
+ export declare function nowUtcIso(): string;
2
+ export declare function monotonicNow(): number;
3
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/core/clock.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAerC"}
@@ -0,0 +1,21 @@
1
+ let lastMonotonic = 0;
2
+ const hasPerformance = typeof performance !== "undefined" && typeof performance.now === "function";
3
+ const epochStart = Date.now();
4
+ export function nowUtcIso() {
5
+ return new Date().toISOString();
6
+ }
7
+ export function monotonicNow() {
8
+ let current;
9
+ if (hasPerformance) {
10
+ current = epochStart + performance.now();
11
+ }
12
+ else {
13
+ current = Date.now();
14
+ }
15
+ if (current <= lastMonotonic) {
16
+ current = lastMonotonic + 1;
17
+ }
18
+ lastMonotonic = current;
19
+ return current;
20
+ }
21
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/core/clock.ts"],"names":[],"mappings":"AAAA,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,MAAM,cAAc,GAClB,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU,CAAC;AAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE9B,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAe,CAAC;IAEpB,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,GAAG,OAAO,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,10 @@
1
+ type JsonPrimitive = string | number | boolean | null;
2
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ export declare function initContext(context: unknown, version?: string): void;
6
+ export declare function getContextHash(): string;
7
+ export declare function getContextVersion(): string;
8
+ export declare function resetContextForTests(): void;
9
+ export {};
10
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAIA,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAkBnF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAgC,GACxC,IAAI,CAiBN;AAED,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
@@ -0,0 +1,100 @@
1
+ /// <reference path="../crypto-shim.d.ts" />
2
+ import { createHash } from "crypto";
3
+ const DEFAULT_CONTEXT_VERSION = "log.context.v1";
4
+ const state = {
5
+ value: {},
6
+ hash: "",
7
+ version: DEFAULT_CONTEXT_VERSION,
8
+ initialized: false,
9
+ };
10
+ export function initContext(context, version = DEFAULT_CONTEXT_VERSION) {
11
+ if (state.initialized) {
12
+ throw new Error("Context already initialized");
13
+ }
14
+ if (!context || typeof context !== "object" || Array.isArray(context)) {
15
+ throw new Error("Context must be a non-array object");
16
+ }
17
+ const normalized = normalizeJsonValue(context, "$");
18
+ const canonical = stableStringify(normalized);
19
+ const hash = createHash("sha256").update(canonical).digest("hex");
20
+ state.value = deepFreeze(normalized);
21
+ state.hash = hash;
22
+ state.version = version;
23
+ state.initialized = true;
24
+ }
25
+ export function getContextHash() {
26
+ if (!state.initialized) {
27
+ throw new Error("Context not initialized");
28
+ }
29
+ return state.hash;
30
+ }
31
+ export function getContextVersion() {
32
+ if (!state.initialized) {
33
+ throw new Error("Context not initialized");
34
+ }
35
+ return state.version;
36
+ }
37
+ export function resetContextForTests() {
38
+ state.value = {};
39
+ state.hash = "";
40
+ state.version = DEFAULT_CONTEXT_VERSION;
41
+ state.initialized = false;
42
+ }
43
+ function deepFreeze(value) {
44
+ if (!value || typeof value !== "object") {
45
+ return value;
46
+ }
47
+ if (Object.isFrozen(value)) {
48
+ return value;
49
+ }
50
+ Object.freeze(value);
51
+ for (const key of Object.keys(value)) {
52
+ const child = value[key];
53
+ deepFreeze(child);
54
+ }
55
+ if (Array.isArray(value)) {
56
+ for (const item of value) {
57
+ deepFreeze(item);
58
+ }
59
+ }
60
+ return value;
61
+ }
62
+ function normalizeJsonValue(value, path) {
63
+ if (value === null ||
64
+ typeof value === "string" ||
65
+ typeof value === "number" ||
66
+ typeof value === "boolean") {
67
+ return value;
68
+ }
69
+ if (typeof value === "bigint") {
70
+ return value.toString();
71
+ }
72
+ if (value instanceof Date) {
73
+ return value.toISOString();
74
+ }
75
+ if (Array.isArray(value)) {
76
+ return value.map((item, index) => normalizeJsonValue(item, `${path}[${index}]`));
77
+ }
78
+ if (typeof value === "object") {
79
+ const proto = Object.getPrototypeOf(value);
80
+ if (proto !== Object.prototype && proto !== null) {
81
+ throw new Error(`Unsupported object at ${path}`);
82
+ }
83
+ const obj = value;
84
+ const result = {};
85
+ const keys = Object.keys(obj).sort();
86
+ for (const key of keys) {
87
+ const next = obj[key];
88
+ if (next === undefined) {
89
+ throw new Error(`Undefined value at ${path}.${key}`);
90
+ }
91
+ result[key] = normalizeJsonValue(next, `${path}.${key}`);
92
+ }
93
+ return result;
94
+ }
95
+ throw new Error(`Unsupported type at ${path}`);
96
+ }
97
+ function stableStringify(value) {
98
+ return JSON.stringify(value);
99
+ }
100
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SinkEntry, StepRecord } from "../sinks/sink_types.js";
2
+ export type FanoutOutcome = "OK" | "DEGRADED" | "FAILED";
3
+ export declare function fanout(record: StepRecord, sinks: ReadonlyArray<SinkEntry>): Promise<FanoutOutcome>;
4
+ //# sourceMappingURL=fanout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../../src/core/fanout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzD,wBAAsB,MAAM,CAC1B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,GAC9B,OAAO,CAAC,aAAa,CAAC,CA4BxB"}
@@ -0,0 +1,32 @@
1
+ import { assertHasAuthoritativeSink } from "../validate/schema_guard.js";
2
+ import { writeEmergencySpool } from "./spool.js";
3
+ export async function fanout(record, sinks) {
4
+ assertHasAuthoritativeSink(sinks);
5
+ const frozenRecord = Object.isFrozen(record) ? record : Object.freeze(record);
6
+ let outcome = "OK";
7
+ let spooled = false;
8
+ for (const entry of sinks) {
9
+ try {
10
+ await entry.sink.emit(frozenRecord);
11
+ }
12
+ catch {
13
+ if (entry.sinkClass === "authoritative") {
14
+ if (!spooled) {
15
+ try {
16
+ await writeEmergencySpool(frozenRecord);
17
+ outcome = "DEGRADED";
18
+ spooled = true;
19
+ }
20
+ catch {
21
+ outcome = "FAILED";
22
+ }
23
+ }
24
+ if (outcome === "FAILED") {
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ return outcome;
31
+ }
32
+ //# sourceMappingURL=fanout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/core/fanout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAkB,EAClB,KAA+B;IAE/B,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;gBACxC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,IAAI,CAAC;wBACH,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;wBACxC,OAAO,GAAG,UAAU,CAAC;wBACrB,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,GAAG,QAAQ,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface IdGenerator {
2
+ nextRecordId(): string;
3
+ nextSequence(): number;
4
+ }
5
+ export declare function createIdGenerator(instanceTag?: string): IdGenerator;
6
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/core/ids.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,YAAY,IAAI,MAAM,CAAC;IACvB,YAAY,IAAI,MAAM,CAAC;CACxB;AASD,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAoBnE"}
@@ -0,0 +1,27 @@
1
+ import { monotonicNow } from "./clock.js";
2
+ const processStart = Date.now().toString(36);
3
+ let instanceCounter = 0;
4
+ function sanitizeTag(tag) {
5
+ return tag.replace(/[^a-zA-Z0-9_-]/g, "").slice(0, 32);
6
+ }
7
+ export function createIdGenerator(instanceTag) {
8
+ const instanceId = ++instanceCounter;
9
+ let sequence = 0;
10
+ let localCounter = 0;
11
+ const tag = instanceTag ? sanitizeTag(instanceTag) : "";
12
+ return {
13
+ nextSequence() {
14
+ const current = sequence;
15
+ sequence += 1;
16
+ return current;
17
+ },
18
+ nextRecordId() {
19
+ localCounter += 1;
20
+ const timePart = Math.floor(monotonicNow()).toString(36);
21
+ const counterPart = localCounter.toString(36);
22
+ const tagPart = tag ? `_${tag}` : "";
23
+ return `rec_${processStart}_${instanceId}${tagPart}_${timePart}_${counterPart}`;
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/core/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAoB;IACpD,MAAM,UAAU,GAAG,EAAE,eAAe,CAAC;IACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,OAAO;QACL,YAAY;YACV,MAAM,OAAO,GAAG,QAAQ,CAAC;YACzB,QAAQ,IAAI,CAAC,CAAC;YACd,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,YAAY;YACV,YAAY,IAAI,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzD,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,YAAY,IAAI,UAAU,GAAG,OAAO,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QAClF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ declare const MESSAGE_MAX_LENGTH = 512;
2
+ export declare function assertValidMessage(message: unknown): string;
3
+ export { MESSAGE_MAX_LENGTH };
4
+ //# sourceMappingURL=message_constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_constraints.d.ts","sourceRoot":"","sources":["../../src/core/message_constraints.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAyC/B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAsB3D;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,53 @@
1
+ const MESSAGE_MAX_LENGTH = 512;
2
+ const BASE64_MIN_LENGTH = 80;
3
+ function isJsonObjectOrArray(value) {
4
+ const trimmed = value.trim();
5
+ if (!trimmed) {
6
+ return false;
7
+ }
8
+ const startsWithBrace = trimmed.startsWith("{") && trimmed.endsWith("}");
9
+ const startsWithBracket = trimmed.startsWith("[") && trimmed.endsWith("]");
10
+ if (!startsWithBrace && !startsWithBracket) {
11
+ return false;
12
+ }
13
+ try {
14
+ const parsed = JSON.parse(trimmed);
15
+ return typeof parsed === "object" && parsed !== null;
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ function looksLikeBase64Blob(value) {
22
+ const trimmed = value.trim();
23
+ if (trimmed.length < BASE64_MIN_LENGTH) {
24
+ return false;
25
+ }
26
+ if (/\s/.test(trimmed)) {
27
+ return false;
28
+ }
29
+ if (/^[A-Za-z0-9+/=_-]+$/.test(trimmed)) {
30
+ return true;
31
+ }
32
+ return /[A-Za-z0-9+/=_-]{80,}/.test(trimmed);
33
+ }
34
+ export function assertValidMessage(message) {
35
+ if (typeof message !== "string") {
36
+ throw new Error("Message must be a string.");
37
+ }
38
+ if (message.length === 0) {
39
+ throw new Error("Message must not be empty.");
40
+ }
41
+ if (message.length > MESSAGE_MAX_LENGTH) {
42
+ throw new Error(`Message exceeds maximum length of ${MESSAGE_MAX_LENGTH}.`);
43
+ }
44
+ if (isJsonObjectOrArray(message)) {
45
+ throw new Error("Message must not be a JSON object or array.");
46
+ }
47
+ if (looksLikeBase64Blob(message)) {
48
+ throw new Error("Message must not contain base64-like payloads.");
49
+ }
50
+ return message;
51
+ }
52
+ export { MESSAGE_MAX_LENGTH };
53
+ //# sourceMappingURL=message_constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_constraints.js","sourceRoot":"","sources":["../../src/core/message_constraints.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3E,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qCAAqC,kBAAkB,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const OK: "OK";
2
+ export declare const DEGRADED: "DEGRADED";
3
+ export declare const FAILED: "FAILED";
4
+ export type Outcome = typeof OK | typeof DEGRADED | typeof FAILED;
5
+ //# sourceMappingURL=outcomes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomes.d.ts","sourceRoot":"","sources":["../../src/core/outcomes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAG,IAAa,CAAC;AAChC,eAAO,MAAM,QAAQ,EAAG,UAAmB,CAAC;AAC5C,eAAO,MAAM,MAAM,EAAG,QAAiB,CAAC;AAExC,MAAM,MAAM,OAAO,GAAG,OAAO,EAAE,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const OK = "OK";
2
+ export const DEGRADED = "DEGRADED";
3
+ export const FAILED = "FAILED";
4
+ //# sourceMappingURL=outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomes.js","sourceRoot":"","sources":["../../src/core/outcomes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG,IAAa,CAAC;AAChC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAmB,CAAC;AAC5C,MAAM,CAAC,MAAM,MAAM,GAAG,QAAiB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { assertValidMessage } from "./message_constraints.js";
2
+ import type { StepRecord } from "./types.js";
3
+ export declare const message_constraints: {
4
+ maxLength: number;
5
+ validate: typeof assertValidMessage;
6
+ };
7
+ export type EvidenceRef = string;
8
+ export type SystemOwnership = {
9
+ institution: string;
10
+ system_name: string;
11
+ system_type: string;
12
+ environment: string;
13
+ system_version: string;
14
+ instance_id?: string;
15
+ };
16
+ export type StepRecordOverrides = {
17
+ record_id?: string;
18
+ timestamp_utc?: string;
19
+ monotonic_time?: number;
20
+ message_code?: string;
21
+ evidence_refs?: EvidenceRef[];
22
+ trace_id?: string;
23
+ span_id?: string;
24
+ parent_step_id?: string;
25
+ surface_type?: string;
26
+ surface_name?: string;
27
+ surface_instance?: string;
28
+ source_file?: string;
29
+ source_module?: string;
30
+ source_function?: string;
31
+ source_line?: number;
32
+ };
33
+ export declare function buildStepRecord(message: string, sequence: number, system: SystemOwnership, overrides?: StepRecordOverrides): StepRecord;
34
+ //# sourceMappingURL=record_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record_builder.d.ts","sourceRoot":"","sources":["../../src/core/record_builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,GAAE,mBAAwB,GAClC,UAAU,CAsDZ"}