@lucern/sdk 0.2.0-alpha.6 → 0.2.0-alpha.8

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 (274) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{lib/platform/sdk/adminClient.d.ts → adminClient.d.ts} +56 -51
  3. package/dist/adminClient.js +755 -0
  4. package/dist/adminClient.js.map +1 -0
  5. package/dist/answersClient.d.ts +23 -0
  6. package/dist/answersClient.js +333 -0
  7. package/dist/answersClient.js.map +1 -0
  8. package/dist/{lib/platform/sdk/audiencesClient.d.ts → audiencesClient.d.ts} +24 -18
  9. package/dist/audiencesClient.js +472 -0
  10. package/dist/audiencesClient.js.map +1 -0
  11. package/dist/auditClient.d.ts +29 -0
  12. package/dist/auditClient.js +386 -0
  13. package/dist/auditClient.js.map +1 -0
  14. package/dist/{lib/platform/sdk/beliefsClient.d.ts → beliefsClient.d.ts} +32 -27
  15. package/dist/beliefsClient.js +477 -0
  16. package/dist/beliefsClient.js.map +1 -0
  17. package/dist/{lib/platform/sdk/client.d.ts → client.d.ts} +404 -395
  18. package/dist/client.js +6134 -0
  19. package/dist/client.js.map +1 -0
  20. package/dist/{lib/platform/sdk/contextClient.d.ts → contextClient.d.ts} +13 -7
  21. package/dist/contextClient.js +396 -0
  22. package/dist/contextClient.js.map +1 -0
  23. package/dist/contextFacade.d.ts +2 -0
  24. package/dist/contextFacade.js +73 -0
  25. package/dist/contextFacade.js.map +1 -0
  26. package/dist/{lib/platform/sdk/contextPackCompiler.d.ts → contextPackCompiler.d.ts} +11 -9
  27. package/dist/contextPackCompiler.js +1091 -0
  28. package/dist/contextPackCompiler.js.map +1 -0
  29. package/dist/contextPackPolicy.d.ts +84 -0
  30. package/dist/contextPackPolicy.js +347 -0
  31. package/dist/contextPackPolicy.js.map +1 -0
  32. package/dist/contextPackSchema.d.ts +7 -0
  33. package/dist/contextPackSchema.js +203 -0
  34. package/dist/contextPackSchema.js.map +1 -0
  35. package/dist/{lib/platform/sdk/contextTypes.d.ts → contextTypes.d.ts} +15 -13
  36. package/dist/contextTypes.js +3 -0
  37. package/dist/contextTypes.js.map +1 -0
  38. package/dist/contracts/api-enums.contract.d.ts +81 -0
  39. package/dist/contracts/api-enums.contract.js +92 -0
  40. package/dist/contracts/api-enums.contract.js.map +1 -0
  41. package/dist/contracts/auth-session.contract.d.ts +55 -0
  42. package/dist/contracts/auth-session.contract.js +48 -0
  43. package/dist/contracts/auth-session.contract.js.map +1 -0
  44. package/dist/{lucern/contracts/src → contracts}/context-pack.contract.d.ts +56 -58
  45. package/dist/contracts/context-pack.contract.js +98 -0
  46. package/dist/contracts/context-pack.contract.js.map +1 -0
  47. package/dist/contracts/contextPack.d.ts +1 -0
  48. package/dist/contracts/contextPack.js +98 -0
  49. package/dist/contracts/contextPack.js.map +1 -0
  50. package/dist/contracts/index.d.ts +9 -0
  51. package/dist/contracts/index.js +4892 -0
  52. package/dist/contracts/index.js.map +1 -0
  53. package/dist/{lucern/contracts/src → contracts}/lens-filter.contract.d.ts +10 -8
  54. package/dist/contracts/lens-filter.contract.js +71 -0
  55. package/dist/contracts/lens-filter.contract.js.map +1 -0
  56. package/dist/contracts/lens-workflow.contract.d.ts +87 -0
  57. package/dist/contracts/lens-workflow.contract.js +123 -0
  58. package/dist/contracts/lens-workflow.contract.js.map +1 -0
  59. package/dist/contracts/lensFilter.d.ts +1 -0
  60. package/dist/contracts/lensFilter.js +71 -0
  61. package/dist/contracts/lensFilter.js.map +1 -0
  62. package/dist/contracts/lensWorkflow.d.ts +2 -0
  63. package/dist/contracts/lensWorkflow.js +123 -0
  64. package/dist/contracts/lensWorkflow.js.map +1 -0
  65. package/dist/contracts/mcp-tools.contract.d.ts +1 -0
  66. package/dist/contracts/mcp-tools.contract.js +2986 -0
  67. package/dist/contracts/mcp-tools.contract.js.map +1 -0
  68. package/dist/contracts/mcpTools.d.ts +1 -0
  69. package/dist/contracts/mcpTools.js +2986 -0
  70. package/dist/contracts/mcpTools.js.map +1 -0
  71. package/dist/{lucern/contracts/src → contracts}/prompt.contract.d.ts +5 -3
  72. package/dist/contracts/prompt.contract.js +12 -0
  73. package/dist/contracts/prompt.contract.js.map +1 -0
  74. package/dist/contracts/prompt.d.ts +1 -0
  75. package/dist/contracts/prompt.js +12 -0
  76. package/dist/contracts/prompt.js.map +1 -0
  77. package/dist/contracts/sdk-tools.contract.d.ts +2 -0
  78. package/dist/contracts/sdk-tools.contract.js +4134 -0
  79. package/dist/contracts/sdk-tools.contract.js.map +1 -0
  80. package/dist/contracts/sdkTools.d.ts +2 -0
  81. package/dist/contracts/sdkTools.js +4134 -0
  82. package/dist/contracts/sdkTools.js.map +1 -0
  83. package/dist/contracts/workflow-runtime.contract.d.ts +163 -0
  84. package/dist/contracts/workflow-runtime.contract.js +245 -0
  85. package/dist/contracts/workflow-runtime.contract.js.map +1 -0
  86. package/dist/contracts/workflowRuntime.d.ts +1 -0
  87. package/dist/contracts/workflowRuntime.js +245 -0
  88. package/dist/contracts/workflowRuntime.js.map +1 -0
  89. package/dist/{lib/platform/sdk/controlObjectOwnership.d.ts → controlObjectOwnership.d.ts} +20 -18
  90. package/dist/controlObjectOwnership.js +215 -0
  91. package/dist/controlObjectOwnership.js.map +1 -0
  92. package/dist/{lib/platform/sdk/coreClient.d.ts → coreClient.d.ts} +19 -14
  93. package/dist/coreClient.js +339 -0
  94. package/dist/coreClient.js.map +1 -0
  95. package/dist/{lib/platform/sdk/customTools.d.ts → customTools.d.ts} +21 -16
  96. package/dist/customTools.js +248 -0
  97. package/dist/customTools.js.map +1 -0
  98. package/dist/{lib/platform/sdk/decisionsClient.d.ts → decisionsClient.d.ts} +29 -24
  99. package/dist/decisionsClient.js +522 -0
  100. package/dist/decisionsClient.js.map +1 -0
  101. package/dist/domainContext.d.ts +1 -0
  102. package/dist/domainContext.js +3 -0
  103. package/dist/domainContext.js.map +1 -0
  104. package/dist/events.d.ts +178 -0
  105. package/dist/events.js +249 -0
  106. package/dist/events.js.map +1 -0
  107. package/dist/eventsCore.d.ts +49 -0
  108. package/dist/eventsCore.js +429 -0
  109. package/dist/eventsCore.js.map +1 -0
  110. package/dist/facade/context.d.ts +18 -0
  111. package/dist/facade/context.js +73 -0
  112. package/dist/facade/context.js.map +1 -0
  113. package/dist/{lib/platform/sdk/gatewayFacades.d.ts → gatewayFacades.d.ts} +31 -26
  114. package/dist/gatewayFacades.js +1953 -0
  115. package/dist/gatewayFacades.js.map +1 -0
  116. package/dist/{lib/platform/sdk/graphClient.d.ts → graphClient.d.ts} +57 -52
  117. package/dist/graphClient.js +698 -0
  118. package/dist/graphClient.js.map +1 -0
  119. package/dist/{lib/platform/sdk/harnessClient.d.ts → harnessClient.d.ts} +44 -39
  120. package/dist/harnessClient.js +607 -0
  121. package/dist/harnessClient.js.map +1 -0
  122. package/dist/{lib/platform/sdk/identityClient.d.ts → identityClient.d.ts} +17 -11
  123. package/dist/identityClient.js +497 -0
  124. package/dist/identityClient.js.map +1 -0
  125. package/dist/index.d.ts +42 -3
  126. package/dist/index.js +11381 -3
  127. package/dist/index.js.map +1 -0
  128. package/dist/{lib/platform/sdk/learningClient.d.ts → learningClient.d.ts} +13 -7
  129. package/dist/learningClient.js +409 -0
  130. package/dist/learningClient.js.map +1 -0
  131. package/dist/{lib/platform/sdk/mcpParityClient.d.ts → mcpParityClient.d.ts} +10 -5
  132. package/dist/mcpParityClient.js +516 -0
  133. package/dist/mcpParityClient.js.map +1 -0
  134. package/dist/mcpParitySurface.d.ts +12 -0
  135. package/dist/mcpParitySurface.js +65 -0
  136. package/dist/mcpParitySurface.js.map +1 -0
  137. package/dist/mcpTools-DPZxowDX.d.ts +254 -0
  138. package/dist/{lib/platform/sdk/ontologyClient.d.ts → ontologyClient.d.ts} +28 -22
  139. package/dist/ontologyClient.js +513 -0
  140. package/dist/ontologyClient.js.map +1 -0
  141. package/dist/packRuntime.d.ts +2 -0
  142. package/dist/packRuntime.js +3 -0
  143. package/dist/packRuntime.js.map +1 -0
  144. package/dist/{lib/platform/sdk/packsClient.d.ts → packsClient.d.ts} +34 -29
  145. package/dist/packsClient.js +525 -0
  146. package/dist/packsClient.js.map +1 -0
  147. package/dist/{lib/platform/sdk/policyClient.d.ts → policyClient.d.ts} +26 -20
  148. package/dist/policyClient.js +625 -0
  149. package/dist/policyClient.js.map +1 -0
  150. package/dist/realtime/index.d.ts +29 -0
  151. package/dist/realtime/index.js +23 -0
  152. package/dist/realtime/index.js.map +1 -0
  153. package/dist/realtime/refs.d.ts +17 -0
  154. package/dist/realtime/refs.js +9 -0
  155. package/dist/realtime/refs.js.map +1 -0
  156. package/dist/reportsClient.d.ts +41 -0
  157. package/dist/reportsClient.js +418 -0
  158. package/dist/reportsClient.js.map +1 -0
  159. package/dist/{lib/platform/sdk/schemaClient.d.ts → schemaClient.d.ts} +20 -15
  160. package/dist/schemaClient.js +434 -0
  161. package/dist/schemaClient.js.map +1 -0
  162. package/dist/sdkSurface.d.ts +61 -0
  163. package/dist/sdkSurface.js +112 -0
  164. package/dist/sdkSurface.js.map +1 -0
  165. package/dist/sdkTools-CwXJDACb.d.ts +150 -0
  166. package/dist/{lib/platform/sdk/topicsClient.d.ts → topicsClient.d.ts} +24 -18
  167. package/dist/topicsClient.js +492 -0
  168. package/dist/topicsClient.js.map +1 -0
  169. package/dist/{lib/platform/sdk/types.d.ts → types.d.ts} +84 -80
  170. package/dist/types.js +3 -0
  171. package/dist/types.js.map +1 -0
  172. package/dist/version.d.ts +4 -0
  173. package/dist/version.js +6 -0
  174. package/dist/version.js.map +1 -0
  175. package/dist/{lib/platform/sdk/workflowClient.d.ts → workflowClient.d.ts} +60 -57
  176. package/dist/workflowClient.js +830 -0
  177. package/dist/workflowClient.js.map +1 -0
  178. package/package.json +25 -43
  179. package/dist/.generated +0 -2
  180. package/dist/lib/platform/auth/credentials.d.ts +0 -5
  181. package/dist/lib/platform/auth/credentials.js +0 -40
  182. package/dist/lib/platform/sdk/adminClient.js +0 -384
  183. package/dist/lib/platform/sdk/answersClient.d.ts +0 -16
  184. package/dist/lib/platform/sdk/answersClient.js +0 -21
  185. package/dist/lib/platform/sdk/audiencesClient.js +0 -111
  186. package/dist/lib/platform/sdk/auditClient.d.ts +0 -24
  187. package/dist/lib/platform/sdk/auditClient.js +0 -21
  188. package/dist/lib/platform/sdk/beliefsClient.js +0 -124
  189. package/dist/lib/platform/sdk/client.js +0 -1831
  190. package/dist/lib/platform/sdk/contextClient.js +0 -86
  191. package/dist/lib/platform/sdk/contextFacade.d.ts +0 -10
  192. package/dist/lib/platform/sdk/contextFacade.js +0 -10
  193. package/dist/lib/platform/sdk/contextPackCompiler.js +0 -534
  194. package/dist/lib/platform/sdk/contextTypes.js +0 -1
  195. package/dist/lib/platform/sdk/controlObjectOwnership.js +0 -220
  196. package/dist/lib/platform/sdk/coreClient.js +0 -366
  197. package/dist/lib/platform/sdk/customTools.js +0 -247
  198. package/dist/lib/platform/sdk/decisionsClient.js +0 -129
  199. package/dist/lib/platform/sdk/domainContext.d.ts +0 -1
  200. package/dist/lib/platform/sdk/domainContext.js +0 -1
  201. package/dist/lib/platform/sdk/events.d.ts +0 -176
  202. package/dist/lib/platform/sdk/events.js +0 -261
  203. package/dist/lib/platform/sdk/eventsCore.d.ts +0 -13
  204. package/dist/lib/platform/sdk/eventsCore.js +0 -13
  205. package/dist/lib/platform/sdk/gatewayFacades.js +0 -845
  206. package/dist/lib/platform/sdk/graphClient.js +0 -235
  207. package/dist/lib/platform/sdk/harnessClient.js +0 -219
  208. package/dist/lib/platform/sdk/identityClient.js +0 -131
  209. package/dist/lib/platform/sdk/index.d.ts +0 -49
  210. package/dist/lib/platform/sdk/index.js +0 -49
  211. package/dist/lib/platform/sdk/learningClient.js +0 -53
  212. package/dist/lib/platform/sdk/mcpParityClient.js +0 -196
  213. package/dist/lib/platform/sdk/mcpParitySurface.d.ts +0 -10
  214. package/dist/lib/platform/sdk/mcpParitySurface.js +0 -57
  215. package/dist/lib/platform/sdk/ontologyClient.js +0 -161
  216. package/dist/lib/platform/sdk/packRuntime.d.ts +0 -1
  217. package/dist/lib/platform/sdk/packRuntime.js +0 -1
  218. package/dist/lib/platform/sdk/packsClient.js +0 -157
  219. package/dist/lib/platform/sdk/policyClient.js +0 -277
  220. package/dist/lib/platform/sdk/promptCatalog.d.ts +0 -1
  221. package/dist/lib/platform/sdk/promptCatalog.js +0 -1
  222. package/dist/lib/platform/sdk/reportsClient.d.ts +0 -34
  223. package/dist/lib/platform/sdk/reportsClient.js +0 -64
  224. package/dist/lib/platform/sdk/schemaClient.js +0 -71
  225. package/dist/lib/platform/sdk/sdkSurface.d.ts +0 -56
  226. package/dist/lib/platform/sdk/sdkSurface.js +0 -140
  227. package/dist/lib/platform/sdk/topicsClient.js +0 -118
  228. package/dist/lib/platform/sdk/types.js +0 -1
  229. package/dist/lib/platform/sdk/version.d.ts +0 -2
  230. package/dist/lib/platform/sdk/version.js +0 -2
  231. package/dist/lib/platform/sdk/workflowClient.js +0 -366
  232. package/dist/lucern/contracts/src/api-enums.contract.d.ts +0 -58
  233. package/dist/lucern/contracts/src/api-enums.contract.js +0 -147
  234. package/dist/lucern/contracts/src/auth-context.contract.d.ts +0 -8
  235. package/dist/lucern/contracts/src/auth-context.contract.js +0 -8
  236. package/dist/lucern/contracts/src/auth-session.contract.d.ts +0 -8
  237. package/dist/lucern/contracts/src/auth-session.contract.js +0 -8
  238. package/dist/lucern/contracts/src/auth.contract.d.ts +0 -88
  239. package/dist/lucern/contracts/src/auth.contract.js +0 -57
  240. package/dist/lucern/contracts/src/context-pack.contract.js +0 -169
  241. package/dist/lucern/contracts/src/convex-admin.contract.d.ts +0 -5
  242. package/dist/lucern/contracts/src/convex-admin.contract.js +0 -1
  243. package/dist/lucern/contracts/src/events-types.contract.d.ts +0 -8
  244. package/dist/lucern/contracts/src/events-types.contract.js +0 -8
  245. package/dist/lucern/contracts/src/events.contract.d.ts +0 -176
  246. package/dist/lucern/contracts/src/events.contract.js +0 -159
  247. package/dist/lucern/contracts/src/gateway.contract.d.ts +0 -74
  248. package/dist/lucern/contracts/src/gateway.contract.js +0 -19
  249. package/dist/lucern/contracts/src/ids.contract.d.ts +0 -7
  250. package/dist/lucern/contracts/src/ids.contract.js +0 -24
  251. package/dist/lucern/contracts/src/index.d.ts +0 -29
  252. package/dist/lucern/contracts/src/index.js +0 -29
  253. package/dist/lucern/contracts/src/lens-filter.contract.js +0 -95
  254. package/dist/lucern/contracts/src/lens-workflow.contract.d.ts +0 -84
  255. package/dist/lucern/contracts/src/lens-workflow.contract.js +0 -54
  256. package/dist/lucern/contracts/src/mcp-tools.contract.d.ts +0 -151
  257. package/dist/lucern/contracts/src/mcp-tools.contract.js +0 -3281
  258. package/dist/lucern/contracts/src/ontology-matching.contract.d.ts +0 -8
  259. package/dist/lucern/contracts/src/ontology-matching.contract.js +0 -8
  260. package/dist/lucern/contracts/src/prompt.contract.js +0 -24
  261. package/dist/lucern/contracts/src/sdk-methods.contract.d.ts +0 -358
  262. package/dist/lucern/contracts/src/sdk-methods.contract.js +0 -19
  263. package/dist/lucern/contracts/src/sdk-tools.contract.d.ts +0 -92
  264. package/dist/lucern/contracts/src/sdk-tools.contract.js +0 -1398
  265. package/dist/lucern/contracts/src/text-matching.contract.d.ts +0 -53
  266. package/dist/lucern/contracts/src/text-matching.contract.js +0 -277
  267. package/dist/lucern/contracts/src/topic-scope.contract.d.ts +0 -8
  268. package/dist/lucern/contracts/src/topic-scope.contract.js +0 -8
  269. package/dist/lucern/contracts/src/workflow-runtime.contract.d.ts +0 -161
  270. package/dist/lucern/contracts/src/workflow-runtime.contract.js +0 -257
  271. package/dist/realtime-refs.d.ts +0 -1
  272. package/dist/realtime-refs.js +0 -1
  273. package/dist/realtime.d.ts +0 -1
  274. package/dist/realtime.js +0 -1
@@ -1,261 +0,0 @@
1
- export const DOMAIN_EVENT_VERSION = "1.0";
2
- export const EVENT_RETENTION_DEFAULT_DAYS = 30;
3
- export const WEBHOOK_MAX_ATTEMPTS = 5;
4
- export const WEBHOOK_RETRY_DELAYS_MS = [1_000, 5_000, 30_000, 300_000];
5
- export const DOMAIN_EVENT_TYPES = [
6
- "belief.created",
7
- "belief.forked",
8
- "belief.confidence_updated",
9
- "belief.archived",
10
- "belief.refined",
11
- "belief.contract_created",
12
- "belief.contract_evaluated",
13
- "belief.lineage_queried",
14
- "evidence.created",
15
- "evidence.linked",
16
- "evidence.search_executed",
17
- "question.created",
18
- "question.answered",
19
- "question.refined",
20
- "question.status_updated",
21
- "question.archived",
22
- "edge.created",
23
- "contradiction.flagged",
24
- "worktree.created",
25
- "worktree.activated",
26
- "worktree.merged",
27
- "worktree.targets_updated",
28
- "worktree.metadata_updated",
29
- "topic.created",
30
- "topic.updated",
31
- "topic.archived",
32
- "task.created",
33
- "task.completed",
34
- "task.updated",
35
- "ontology.bound",
36
- "context.compiled",
37
- "identity.key_created",
38
- "identity.key_rotated",
39
- "identity.key_revoked",
40
- "webhook.test",
41
- ];
42
- function escapeRegex(value) {
43
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
44
- }
45
- export function eventPatternToRegExp(pattern) {
46
- const normalized = pattern.trim();
47
- if (!normalized) {
48
- return /^$/;
49
- }
50
- if (normalized === "*") {
51
- return /^.*$/;
52
- }
53
- const source = escapeRegex(normalized).replace(/\\\*/g, ".*");
54
- return new RegExp(`^${source}$`);
55
- }
56
- export function matchesEventPattern(eventType, pattern) {
57
- return eventPatternToRegExp(pattern).test(eventType.trim());
58
- }
59
- export function matchesAnyEventPattern(eventType, patterns) {
60
- if (patterns.length === 0) {
61
- return true;
62
- }
63
- return patterns.some((pattern) => matchesEventPattern(eventType, pattern));
64
- }
65
- function toBase64(value) {
66
- if (typeof Buffer !== "undefined") {
67
- return Buffer.from(value, "utf8").toString("base64url");
68
- }
69
- return btoa(unescape(encodeURIComponent(value)))
70
- .replace(/\+/g, "-")
71
- .replace(/\//g, "_")
72
- .replace(/=+$/g, "");
73
- }
74
- function fromBase64(value) {
75
- if (typeof Buffer !== "undefined") {
76
- return Buffer.from(value, "base64url").toString("utf8");
77
- }
78
- const normalized = value.replace(/-/g, "+").replace(/_/g, "/");
79
- return decodeURIComponent(escape(atob(normalized)));
80
- }
81
- export function createEventId() {
82
- const random = typeof globalThis.crypto?.randomUUID === "function"
83
- ? globalThis.crypto.randomUUID().replace(/-/g, "")
84
- : Array.from(typeof globalThis.crypto?.getRandomValues === "function"
85
- ? globalThis.crypto.getRandomValues(new Uint8Array(16))
86
- : Array.from({ length: 16 }, () => Math.floor(Math.random() * 256)), (value) => value.toString(16).padStart(2, "0")).join("");
87
- return `evt_${random}`;
88
- }
89
- export function normalizeRetentionDays(value) {
90
- if (!Number.isFinite(value) || typeof value !== "number" || value <= 0) {
91
- return EVENT_RETENTION_DEFAULT_DAYS;
92
- }
93
- return Math.max(1, Math.trunc(value));
94
- }
95
- export function buildDomainEvent(input) {
96
- const timestamp = input.timestamp ?? Date.now();
97
- const retentionDays = normalizeRetentionDays(input.retentionDays);
98
- return {
99
- eventId: input.eventId?.trim() || createEventId(),
100
- type: input.type.trim(),
101
- version: DOMAIN_EVENT_VERSION,
102
- timestamp,
103
- tenantId: input.tenantId?.trim() || undefined,
104
- workspaceId: input.workspaceId?.trim() || undefined,
105
- topicId: input.topicId.trim(),
106
- resourceId: input.resourceId.trim(),
107
- resourceType: input.resourceType.trim(),
108
- actorId: input.actorId.trim(),
109
- actorType: input.actorType,
110
- data: input.data ?? {},
111
- correlationId: input.correlationId?.trim() || undefined,
112
- expiresAt: timestamp + retentionDays * 24 * 60 * 60 * 1000,
113
- };
114
- }
115
- export function compareEventCursor(left, right) {
116
- if (left.timestamp !== right.timestamp) {
117
- return left.timestamp - right.timestamp;
118
- }
119
- return left.eventId.localeCompare(right.eventId);
120
- }
121
- export function encodeEventCursor(cursor) {
122
- return toBase64(JSON.stringify(cursor));
123
- }
124
- export function decodeEventCursor(cursor) {
125
- if (!cursor || cursor.trim().length === 0) {
126
- return null;
127
- }
128
- try {
129
- const parsed = JSON.parse(fromBase64(cursor.trim()));
130
- if (typeof parsed.timestamp !== "number" ||
131
- !Number.isFinite(parsed.timestamp) ||
132
- typeof parsed.eventId !== "string" ||
133
- parsed.eventId.trim().length === 0) {
134
- return null;
135
- }
136
- return {
137
- timestamp: parsed.timestamp,
138
- eventId: parsed.eventId.trim(),
139
- };
140
- }
141
- catch {
142
- return null;
143
- }
144
- }
145
- export function isAfterCursor(event, cursor) {
146
- if (!cursor) {
147
- return true;
148
- }
149
- return compareEventCursor(event, cursor) > 0;
150
- }
151
- export function sortEventsByCursor(events) {
152
- return [...events].sort((left, right) => compareEventCursor(left, right));
153
- }
154
- export function inferActorType(args) {
155
- if (args.sessionType === "agent") {
156
- return "agent";
157
- }
158
- if (args.authMode === "service_principal" ||
159
- args.authMode === "tenant_api_key" ||
160
- args.principalType === "service") {
161
- return "service";
162
- }
163
- return "human";
164
- }
165
- export async function emitDomainEvent(invokeMutation, input) {
166
- return await invokeMutation("events:recordEvent", input);
167
- }
168
- const LOCALHOST_HOSTS = new Set(["localhost", "127.0.0.1", "::1"]);
169
- function normalizeUrl(url) {
170
- try {
171
- return new URL(url.trim());
172
- }
173
- catch {
174
- throw new Error("Webhook URL must be a valid absolute URL.");
175
- }
176
- }
177
- export function assertValidWebhookUrl(url) {
178
- const parsed = normalizeUrl(url);
179
- const hostname = parsed.hostname.trim().toLowerCase();
180
- const nodeEnv = typeof process !== "undefined" ? process.env?.NODE_ENV : undefined;
181
- const allowLocalHttp = nodeEnv === "test" || LOCALHOST_HOSTS.has(hostname);
182
- if (parsed.protocol !== "https:" && !(allowLocalHttp && parsed.protocol === "http:")) {
183
- throw new Error("Webhook URL must use HTTPS.");
184
- }
185
- return parsed.toString();
186
- }
187
- export function normalizeWebhookPatterns(patterns) {
188
- const normalized = Array.from(new Set(patterns
189
- .map((pattern) => pattern.trim())
190
- .filter((pattern) => pattern.length > 0)));
191
- if (normalized.length === 0) {
192
- throw new Error("At least one webhook event pattern is required.");
193
- }
194
- return normalized;
195
- }
196
- export function assertValidWebhookSecret(secret) {
197
- const normalized = secret.trim();
198
- if (normalized.length < 8) {
199
- throw new Error("Webhook secret must be at least 8 characters.");
200
- }
201
- return normalized;
202
- }
203
- export async function computeWebhookSignature(payload, secret) {
204
- const encoder = new TextEncoder();
205
- const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
206
- const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(payload));
207
- return Array.from(new Uint8Array(signature))
208
- .map((byte) => byte.toString(16).padStart(2, "0"))
209
- .join("");
210
- }
211
- export function nextDeliveryAttemptAt(currentAttemptCount, now = Date.now()) {
212
- if (currentAttemptCount >= WEBHOOK_MAX_ATTEMPTS) {
213
- return undefined;
214
- }
215
- const retryIndex = currentAttemptCount - 1;
216
- const delay = WEBHOOK_RETRY_DELAYS_MS[retryIndex];
217
- return typeof delay === "number" ? now + delay : undefined;
218
- }
219
- export function resolveDeliveryFailureStatus(attemptCount) {
220
- return attemptCount >= WEBHOOK_MAX_ATTEMPTS ? "dead_letter" : "failed";
221
- }
222
- export function sanitizeWebhookRecord(value) {
223
- return {
224
- id: String(value.id ?? value.webhookId ?? value._id ?? ""),
225
- webhookId: String(value.webhookId ?? value.id ?? value._id ?? ""),
226
- tenantId: typeof value.tenantId === "string" && value.tenantId.trim().length > 0
227
- ? value.tenantId
228
- : undefined,
229
- workspaceId: typeof value.workspaceId === "string" && value.workspaceId.trim().length > 0
230
- ? value.workspaceId
231
- : undefined,
232
- topicId: typeof value.topicId === "string" && value.topicId.trim().length > 0
233
- ? value.topicId
234
- : undefined,
235
- url: String(value.url ?? ""),
236
- events: Array.isArray(value.events)
237
- ? value.events
238
- .map((entry) => (typeof entry === "string" ? entry.trim() : ""))
239
- .filter(Boolean)
240
- : [],
241
- active: value.active !== false,
242
- secretConfigured: true,
243
- createdAt: Number(value.createdAt ?? Date.now()),
244
- updatedAt: Number(value.updatedAt ?? value.createdAt ?? Date.now()),
245
- createdBy: String(value.createdBy ?? ""),
246
- updatedBy: String(value.updatedBy ?? value.createdBy ?? ""),
247
- lastDeliveryAt: typeof value.lastDeliveryAt === "number" ? value.lastDeliveryAt : undefined,
248
- lastSuccessfulDeliveryAt: typeof value.lastSuccessfulDeliveryAt === "number"
249
- ? value.lastSuccessfulDeliveryAt
250
- : undefined,
251
- };
252
- }
253
- export function truncateWebhookResponseBody(responseBody, maxLength = 2_000) {
254
- if (!responseBody) {
255
- return undefined;
256
- }
257
- if (responseBody.length <= maxLength) {
258
- return responseBody;
259
- }
260
- return `${responseBody.slice(0, maxLength - 3)}...`;
261
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Internal events/webhooks client factories exposed for testing / audit.
3
- *
4
- * These core factories live in `@lucern/client-core` and are bundled
5
- * into `@lucern/sdk` at build time via the tsup alias map. Re-exported
6
- * here so downstream test/audit tooling can import them from the
7
- * public `@lucern/sdk` entry point instead of reaching into the
8
- * package internals directly.
9
- *
10
- * Added: EK-16 T7.3.4 (2026-04-18).
11
- */
12
- export { createEventsClientCore, type EventsClientCoreConfig, } from "@/lucern/packages/client-core/src/events";
13
- export { createWebhooksClientCore, type WebhooksClientCoreConfig, } from "@/lucern/packages/client-core/src/webhooks";
@@ -1,13 +0,0 @@
1
- /**
2
- * Internal events/webhooks client factories exposed for testing / audit.
3
- *
4
- * These core factories live in `@lucern/client-core` and are bundled
5
- * into `@lucern/sdk` at build time via the tsup alias map. Re-exported
6
- * here so downstream test/audit tooling can import them from the
7
- * public `@lucern/sdk` entry point instead of reaching into the
8
- * package internals directly.
9
- *
10
- * Added: EK-16 T7.3.4 (2026-04-18).
11
- */
12
- export { createEventsClientCore, } from "@/lucern/packages/client-core/src/events";
13
- export { createWebhooksClientCore, } from "@/lucern/packages/client-core/src/webhooks";