@lucern/sdk 0.3.0-alpha.16 → 0.3.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -8
- package/README.md +4 -110
- package/dist/adminClient.d.ts +8 -10
- package/dist/adminClient.js +39 -260
- package/dist/adminClient.js.map +1 -1
- package/dist/answersClient.d.ts +0 -2
- package/dist/answersClient.js +11 -239
- package/dist/answersClient.js.map +1 -1
- package/dist/audience/index.d.ts +1 -2
- package/dist/audience/index.js +3 -1
- package/dist/audience/index.js.map +1 -1
- package/dist/audiencesClient.d.ts +16 -18
- package/dist/audiencesClient.js +90 -315
- package/dist/audiencesClient.js.map +1 -1
- package/dist/auditClient.d.ts +0 -2
- package/dist/auditClient.js +15 -245
- package/dist/auditClient.js.map +1 -1
- package/dist/beliefs/index.d.ts +5 -27
- package/dist/beliefs/index.js +1177 -3842
- package/dist/beliefs/index.js.map +1 -1
- package/dist/beliefsClient.d.ts +2 -4
- package/dist/beliefsClient.js +26 -248
- package/dist/beliefsClient.js.map +1 -1
- package/dist/client-B6aWUUwp.d.ts +2552 -0
- package/dist/client.d.ts +27 -3041
- package/dist/client.js +1177 -3842
- package/dist/client.js.map +1 -1
- package/dist/contextClient.d.ts +3 -6
- package/dist/contextClient.js +30 -270
- package/dist/contextClient.js.map +1 -1
- package/dist/contextFacade.js +16 -25
- package/dist/contextFacade.js.map +1 -1
- package/dist/contextPackCompiler.js +30 -19
- package/dist/contextPackCompiler.js.map +1 -1
- package/dist/contextPackPolicy.js +17 -7
- package/dist/contextPackPolicy.js.map +1 -1
- package/dist/contextTypes.d.ts +0 -2
- package/dist/contracts/api-enums.contract.d.ts +2 -2
- package/dist/contracts/api-enums.contract.js +1 -6
- package/dist/contracts/api-enums.contract.js.map +1 -1
- package/dist/contracts/auth-session.contract.d.ts +1 -1
- package/dist/contracts/auth-session.contract.js +1 -13
- package/dist/contracts/auth-session.contract.js.map +1 -1
- package/dist/contracts/index.d.ts +0 -1
- package/dist/contracts/index.js +6 -133
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/lens-filter.contract.js +3 -4
- package/dist/contracts/lens-filter.contract.js.map +1 -1
- package/dist/contracts/lens-workflow.contract.js +3 -4
- package/dist/contracts/lens-workflow.contract.js.map +1 -1
- package/dist/contracts/lensFilter.js +3 -4
- package/dist/contracts/lensFilter.js.map +1 -1
- package/dist/contracts/lensWorkflow.js +3 -4
- package/dist/contracts/lensWorkflow.js.map +1 -1
- package/dist/contracts/mcpTools.d.ts +1 -46
- package/dist/contracts/mcpTools.js +0 -108
- package/dist/contracts/mcpTools.js.map +1 -1
- package/dist/contradictions/index.d.ts +4 -26
- package/dist/contradictions/index.js +1177 -3842
- package/dist/contradictions/index.js.map +1 -1
- package/dist/coreClient.d.ts +2 -28
- package/dist/coreClient.js +14 -240
- package/dist/coreClient.js.map +1 -1
- package/dist/decisions/index.d.ts +14 -36
- package/dist/decisions/index.js +1177 -3842
- package/dist/decisions/index.js.map +1 -1
- package/dist/decisionsClient.d.ts +12 -6
- package/dist/decisionsClient.js +37 -253
- package/dist/decisionsClient.js.map +1 -1
- package/dist/edges/index.d.ts +87 -49
- package/dist/edges/index.js +1177 -3842
- package/dist/edges/index.js.map +1 -1
- package/dist/events.js +3 -6
- package/dist/events.js.map +1 -1
- package/dist/eventsCore.d.ts +1 -3
- package/dist/eventsCore.js +14 -240
- package/dist/eventsCore.js.map +1 -1
- package/dist/evidence/index.d.ts +4 -26
- package/dist/evidence/index.js +1177 -3842
- package/dist/evidence/index.js.map +1 -1
- package/dist/evidenceClient.d.ts +0 -2
- package/dist/evidenceClient.js +14 -240
- package/dist/evidenceClient.js.map +1 -1
- package/dist/facade/context.d.ts +1 -2
- package/dist/facade/context.js +16 -25
- package/dist/facade/context.js.map +1 -1
- package/dist/gatewayFacades.d.ts +46 -90
- package/dist/gatewayFacades.js +128 -609
- package/dist/gatewayFacades.js.map +1 -1
- package/dist/graphClient.d.ts +13 -8
- package/dist/graphClient.js +45 -262
- package/dist/graphClient.js.map +1 -1
- package/dist/harnessClient.d.ts +24 -15
- package/dist/harnessClient.js +42 -253
- package/dist/harnessClient.js.map +1 -1
- package/dist/identityClient.d.ts +11 -115
- package/dist/identityClient.js +33 -555
- package/dist/identityClient.js.map +1 -1
- package/dist/index.d.ts +6 -32
- package/dist/index.js +2580 -5825
- package/dist/index.js.map +1 -1
- package/dist/learningClient.d.ts +6 -8
- package/dist/learningClient.js +44 -270
- package/dist/learningClient.js.map +1 -1
- package/dist/lenses/index.d.ts +38 -78
- package/dist/lenses/index.js +1177 -3842
- package/dist/lenses/index.js.map +1 -1
- package/dist/nodes/index.d.ts +21 -65
- package/dist/nodes/index.js +1177 -3842
- package/dist/nodes/index.js.map +1 -1
- package/dist/ontologies/index.d.ts +32 -55
- package/dist/ontologies/index.js +1177 -3842
- package/dist/ontologies/index.js.map +1 -1
- package/dist/ontologyClient.d.ts +25 -19
- package/dist/ontologyClient.js +40 -276
- package/dist/ontologyClient.js.map +1 -1
- package/dist/packsClient.d.ts +23 -11
- package/dist/packsClient.js +46 -252
- package/dist/packsClient.js.map +1 -1
- package/dist/policyClient.d.ts +10 -13
- package/dist/policyClient.js +25 -261
- package/dist/policyClient.js.map +1 -1
- package/dist/questions/index.d.ts +4 -26
- package/dist/questions/index.js +1177 -3842
- package/dist/questions/index.js.map +1 -1
- package/dist/realtime/index.d.ts +1 -1
- package/dist/reportsClient.d.ts +7 -9
- package/dist/reportsClient.js +53 -299
- package/dist/reportsClient.js.map +1 -1
- package/dist/schemaClient.d.ts +3 -5
- package/dist/schemaClient.js +29 -253
- package/dist/schemaClient.js.map +1 -1
- package/dist/sdkSurface.d.ts +3 -8
- package/dist/sdkSurface.js +6 -10
- package/dist/sdkSurface.js.map +1 -1
- package/dist/sourcesClient.d.ts +0 -2
- package/dist/sourcesClient.js +14 -240
- package/dist/sourcesClient.js.map +1 -1
- package/dist/topics/index.d.ts +9 -37
- package/dist/topics/index.js +1177 -3844
- package/dist/topics/index.js.map +1 -1
- package/dist/topicsClient.d.ts +0 -4
- package/dist/topicsClient.js +24 -255
- package/dist/topicsClient.js.map +1 -1
- package/dist/types.d.ts +0 -17
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workflowClient.d.ts +40 -60
- package/dist/workflowClient.js +58 -261
- package/dist/workflowClient.js.map +1 -1
- package/dist/worktrees/index.d.ts +33 -71
- package/dist/worktrees/index.js +1177 -3842
- package/dist/worktrees/index.js.map +1 -1
- package/package.json +3 -17
- package/dist/accessControl.d.ts +0 -79
- package/dist/accessControl.js +0 -1270
- package/dist/accessControl.js.map +0 -1
- package/dist/authContext.d.ts +0 -56
- package/dist/authContext.js +0 -170
- package/dist/authContext.js.map +0 -1
- package/dist/authDeviceClient.d.ts +0 -49
- package/dist/authDeviceClient.js +0 -121
- package/dist/authDeviceClient.js.map +0 -1
- package/dist/boundaryClientSurface.d.ts +0 -20
- package/dist/boundaryClientSurface.js +0 -73
- package/dist/boundaryClientSurface.js.map +0 -1
- package/dist/clientHelpers.d.ts +0 -48
- package/dist/clientHelpers.js +0 -137
- package/dist/clientHelpers.js.map +0 -1
- package/dist/control-plane.d.ts +0 -69
- package/dist/control-plane.js +0 -674
- package/dist/control-plane.js.map +0 -1
- package/dist/embeddingsClient.d.ts +0 -106
- package/dist/embeddingsClient.js +0 -749
- package/dist/embeddingsClient.js.map +0 -1
- package/dist/eventingClient.d.ts +0 -96
- package/dist/eventingClient.js +0 -746
- package/dist/eventingClient.js.map +0 -1
- package/dist/functionSurface.d.ts +0 -144
- package/dist/functionSurface.js +0 -1227
- package/dist/functionSurface.js.map +0 -1
- package/dist/functionSurfaceClient.d.ts +0 -8
- package/dist/functionSurfaceClient.js +0 -1227
- package/dist/functionSurfaceClient.js.map +0 -1
- package/dist/graphAnalysisClient.d.ts +0 -192
- package/dist/graphAnalysisClient.js +0 -817
- package/dist/graphAnalysisClient.js.map +0 -1
- package/dist/graphIntel.d.ts +0 -4
- package/dist/graphIntel.js +0 -3
- package/dist/graphIntel.js.map +0 -1
- package/dist/graphIntelligence.d.ts +0 -2
- package/dist/graphIntelligence.js +0 -47
- package/dist/graphIntelligence.js.map +0 -1
- package/dist/graphRecommendationsClient.d.ts +0 -56
- package/dist/graphRecommendationsClient.js +0 -682
- package/dist/graphRecommendationsClient.js.map +0 -1
- package/dist/graphStateClassifierClient.d.ts +0 -73
- package/dist/graphStateClassifierClient.js +0 -734
- package/dist/graphStateClassifierClient.js.map +0 -1
- package/dist/infisicalRuntime.d.ts +0 -43
- package/dist/infisicalRuntime.js +0 -346
- package/dist/infisicalRuntime.js.map +0 -1
- package/dist/jobsClient.d.ts +0 -98
- package/dist/jobsClient.js +0 -744
- package/dist/jobsClient.js.map +0 -1
- package/dist/mcpClient.d.ts +0 -28
- package/dist/mcpClient.js +0 -687
- package/dist/mcpClient.js.map +0 -1
- package/dist/modelRuntimeClient.d.ts +0 -72
- package/dist/modelRuntimeClient.js +0 -722
- package/dist/modelRuntimeClient.js.map +0 -1
- package/dist/ontologyLinksClient.d.ts +0 -71
- package/dist/ontologyLinksClient.js +0 -715
- package/dist/ontologyLinksClient.js.map +0 -1
- package/dist/orgGraphSearchClient.d.ts +0 -85
- package/dist/orgGraphSearchClient.js +0 -690
- package/dist/orgGraphSearchClient.js.map +0 -1
- package/dist/secrets.d.ts +0 -1
- package/dist/secrets.js +0 -3
- package/dist/secrets.js.map +0 -1
- package/dist/telemetryClient.d.ts +0 -94
- package/dist/telemetryClient.js +0 -759
- package/dist/telemetryClient.js.map +0 -1
- package/dist/toolRegistryClient.d.ts +0 -115
- package/dist/toolRegistryClient.js +0 -785
- package/dist/toolRegistryClient.js.map +0 -1
package/dist/beliefsClient.d.ts
CHANGED
|
@@ -6,8 +6,6 @@ import { Opinion } from './opinion.js';
|
|
|
6
6
|
import './contracts/workflow-runtime.contract.js';
|
|
7
7
|
import './contracts/lens-workflow.contract.js';
|
|
8
8
|
import './contracts/lens-filter.contract.js';
|
|
9
|
-
import './authContext.js';
|
|
10
|
-
import './contracts/auth-session.contract.js';
|
|
11
9
|
|
|
12
10
|
/** Configuration for the beliefs client. Inherits gateway transport settings. */
|
|
13
11
|
type BeliefsClientConfig = GatewayClientConfig;
|
|
@@ -188,9 +186,9 @@ declare function createBeliefsClient(config?: BeliefsClientConfig): {
|
|
|
188
186
|
* trigger = cause of the score change
|
|
189
187
|
* triggeringRef = optional pointer to the evidence or worktree that drove the change
|
|
190
188
|
*/
|
|
191
|
-
getOpinionHistory
|
|
189
|
+
getOpinionHistory(beliefId: string): Promise<OpinionHistoryEntry[]>;
|
|
192
190
|
/** @deprecated Use getOpinionHistory(). */
|
|
193
|
-
getConfidenceHistory
|
|
191
|
+
getConfidenceHistory(beliefId: string): Promise<OpinionHistoryEntry[]>;
|
|
194
192
|
/**
|
|
195
193
|
* Fork a scored belief into a new formulation.
|
|
196
194
|
*/
|
package/dist/beliefsClient.js
CHANGED
|
@@ -1,170 +1,3 @@
|
|
|
1
|
-
// src/authContext.ts
|
|
2
|
-
var LucernSdkAuthContextError = class extends Error {
|
|
3
|
-
reason;
|
|
4
|
-
constructor(reason, message) {
|
|
5
|
-
super(message);
|
|
6
|
-
this.name = "LucernSdkAuthContextError";
|
|
7
|
-
this.reason = reason;
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
function cleanString(value) {
|
|
11
|
-
const normalized = value?.trim();
|
|
12
|
-
return normalized ? normalized : void 0;
|
|
13
|
-
}
|
|
14
|
-
function cleanStringList(values) {
|
|
15
|
-
if (!values) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
return values.map((value) => value.trim()).filter(
|
|
19
|
-
(value, index, list) => value.length > 0 && list.indexOf(value) === index
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
function requireString(value, reason, label) {
|
|
23
|
-
const normalized = cleanString(value);
|
|
24
|
-
if (!normalized) {
|
|
25
|
-
throw new LucernSdkAuthContextError(
|
|
26
|
-
reason,
|
|
27
|
-
`Canonical Lucern SDK auth context is missing ${label}.`
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
return normalized;
|
|
31
|
-
}
|
|
32
|
-
function requirePrincipalType(principalType) {
|
|
33
|
-
if (!principalType) {
|
|
34
|
-
throw new LucernSdkAuthContextError(
|
|
35
|
-
"principal_missing",
|
|
36
|
-
"Canonical Lucern SDK auth context is missing principalType."
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
return principalType;
|
|
40
|
-
}
|
|
41
|
-
function requireAuthMode(authMode) {
|
|
42
|
-
if (!authMode) {
|
|
43
|
-
throw new LucernSdkAuthContextError(
|
|
44
|
-
"principal_missing",
|
|
45
|
-
"Canonical Lucern SDK auth context is missing authMode."
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
return authMode;
|
|
49
|
-
}
|
|
50
|
-
function ensurePermitMatch(args) {
|
|
51
|
-
const actual = cleanString(args.actual);
|
|
52
|
-
if (actual && actual !== args.expected) {
|
|
53
|
-
throw new LucernSdkAuthContextError(
|
|
54
|
-
"policy_denied",
|
|
55
|
-
`Canonical Lucern SDK auth context has conflicting Permit ${args.field}.`
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function normalizeCanonicalLucernAuthContext(input) {
|
|
60
|
-
if (!input) {
|
|
61
|
-
throw new LucernSdkAuthContextError(
|
|
62
|
-
"principal_missing",
|
|
63
|
-
"Canonical Lucern SDK auth context is required."
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
if (input.policyDecision === "deny") {
|
|
67
|
-
throw new LucernSdkAuthContextError(
|
|
68
|
-
"policy_denied",
|
|
69
|
-
"Canonical Lucern SDK auth context carries a denied policy decision."
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
const principalId = requireString(
|
|
73
|
-
input.principalId,
|
|
74
|
-
"principal_missing",
|
|
75
|
-
"principalId"
|
|
76
|
-
);
|
|
77
|
-
const tenantId = requireString(input.tenantId, "tenant_missing", "tenantId");
|
|
78
|
-
const workspaceId = requireString(
|
|
79
|
-
input.workspaceId,
|
|
80
|
-
"workspace_missing",
|
|
81
|
-
"workspaceId"
|
|
82
|
-
);
|
|
83
|
-
const roles = cleanStringList(input.roles);
|
|
84
|
-
const scopes = cleanStringList(input.scopes);
|
|
85
|
-
const principalType = requirePrincipalType(input.principalType);
|
|
86
|
-
const authMode = requireAuthMode(input.authMode);
|
|
87
|
-
const roleBasedInteractiveAuth = authMode === "interactive_user" && roles.length > 0;
|
|
88
|
-
if (roles.length === 0 || scopes.length === 0 && !roleBasedInteractiveAuth) {
|
|
89
|
-
throw new LucernSdkAuthContextError(
|
|
90
|
-
"membership_missing",
|
|
91
|
-
"Canonical Lucern SDK auth context requires non-empty roles and scopes."
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
const subject = cleanString(input.permit?.subject) ?? principalId;
|
|
95
|
-
const tenant = cleanString(input.permit?.tenant) ?? tenantId;
|
|
96
|
-
const workspace = cleanString(input.permit?.workspace) ?? workspaceId;
|
|
97
|
-
ensurePermitMatch({
|
|
98
|
-
field: "subject",
|
|
99
|
-
expected: principalId,
|
|
100
|
-
actual: subject
|
|
101
|
-
});
|
|
102
|
-
ensurePermitMatch({ field: "tenant", expected: tenantId, actual: tenant });
|
|
103
|
-
ensurePermitMatch({
|
|
104
|
-
field: "workspace",
|
|
105
|
-
expected: workspaceId,
|
|
106
|
-
actual: workspace
|
|
107
|
-
});
|
|
108
|
-
const context = input.permit?.context ? { ...input.permit.context } : void 0;
|
|
109
|
-
return {
|
|
110
|
-
clerkId: cleanString(input.clerkId),
|
|
111
|
-
principalId,
|
|
112
|
-
tenantId,
|
|
113
|
-
workspaceId,
|
|
114
|
-
principalType,
|
|
115
|
-
authMode,
|
|
116
|
-
roles,
|
|
117
|
-
scopes,
|
|
118
|
-
delegationChain: input.delegationChain ? [...input.delegationChain] : [],
|
|
119
|
-
policyTraceId: cleanString(input.policyTraceId),
|
|
120
|
-
correlationId: cleanString(input.correlationId),
|
|
121
|
-
membershipId: cleanString(input.membershipId),
|
|
122
|
-
permit: {
|
|
123
|
-
subject,
|
|
124
|
-
tenant,
|
|
125
|
-
workspace,
|
|
126
|
-
resource: cleanString(input.permit?.resource),
|
|
127
|
-
action: cleanString(input.permit?.action),
|
|
128
|
-
relation: cleanString(input.permit?.relation),
|
|
129
|
-
context
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function createCanonicalAuthHeaders(authContext) {
|
|
134
|
-
const headers = {
|
|
135
|
-
"x-lucern-principal-id": authContext.principalId,
|
|
136
|
-
"x-lucern-principal-type": authContext.principalType,
|
|
137
|
-
"x-lucern-tenant": authContext.tenantId,
|
|
138
|
-
"x-lucern-tenant-id": authContext.tenantId,
|
|
139
|
-
"x-lucern-workspace": authContext.workspaceId,
|
|
140
|
-
"x-lucern-workspace-id": authContext.workspaceId,
|
|
141
|
-
"x-lucern-auth-mode": authContext.authMode,
|
|
142
|
-
"x-lucern-roles": authContext.roles.join(","),
|
|
143
|
-
"x-lucern-scopes": authContext.scopes.join(","),
|
|
144
|
-
"x-lucern-permit-context": JSON.stringify(authContext.permit)
|
|
145
|
-
};
|
|
146
|
-
if (authContext.clerkId) {
|
|
147
|
-
headers["x-lucern-clerk-id"] = authContext.clerkId;
|
|
148
|
-
headers["x-lucern-user-id"] = authContext.clerkId;
|
|
149
|
-
}
|
|
150
|
-
if (authContext.delegationChain.length > 0) {
|
|
151
|
-
headers["x-lucern-delegation-chain"] = JSON.stringify(
|
|
152
|
-
authContext.delegationChain
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
if (authContext.policyTraceId) {
|
|
156
|
-
headers["x-lucern-policy-trace-id"] = authContext.policyTraceId;
|
|
157
|
-
}
|
|
158
|
-
if (authContext.correlationId) {
|
|
159
|
-
headers["x-correlation-id"] = authContext.correlationId;
|
|
160
|
-
headers["x-lucern-correlation-id"] = authContext.correlationId;
|
|
161
|
-
}
|
|
162
|
-
if (authContext.membershipId) {
|
|
163
|
-
headers["x-lucern-membership-id"] = authContext.membershipId;
|
|
164
|
-
}
|
|
165
|
-
return headers;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
1
|
// src/coreClient.ts
|
|
169
2
|
var LucernApiError = class extends Error {
|
|
170
3
|
code;
|
|
@@ -212,7 +45,9 @@ function generatePortableRequestId() {
|
|
|
212
45
|
8
|
|
213
46
|
).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
214
47
|
}
|
|
215
|
-
|
|
48
|
+
function randomIdempotencyKey() {
|
|
49
|
+
return generatePortableRequestId();
|
|
50
|
+
}
|
|
216
51
|
function isRetryableStatus(status) {
|
|
217
52
|
return status >= 500 || status === 408 || status === 429;
|
|
218
53
|
}
|
|
@@ -277,11 +112,8 @@ function timeoutError(timeoutMs) {
|
|
|
277
112
|
error.name = "AbortError";
|
|
278
113
|
return error;
|
|
279
114
|
}
|
|
280
|
-
function isRecord(value) {
|
|
281
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
282
|
-
}
|
|
283
115
|
function readPolicySummaryFromDetails(details) {
|
|
284
|
-
if (!
|
|
116
|
+
if (!details || typeof details !== "object" || Array.isArray(details)) {
|
|
285
117
|
return null;
|
|
286
118
|
}
|
|
287
119
|
const directSummary = details.summary;
|
|
@@ -289,11 +121,11 @@ function readPolicySummaryFromDetails(details) {
|
|
|
289
121
|
return directSummary.trim();
|
|
290
122
|
}
|
|
291
123
|
const policy = details.policy;
|
|
292
|
-
if (!
|
|
124
|
+
if (!policy || typeof policy !== "object" || Array.isArray(policy)) {
|
|
293
125
|
return null;
|
|
294
126
|
}
|
|
295
127
|
const explanation = policy.explanation;
|
|
296
|
-
if (!
|
|
128
|
+
if (!explanation || typeof explanation !== "object" || Array.isArray(explanation)) {
|
|
297
129
|
return null;
|
|
298
130
|
}
|
|
299
131
|
const nestedSummary = explanation.summary;
|
|
@@ -302,59 +134,16 @@ function readPolicySummaryFromDetails(details) {
|
|
|
302
134
|
}
|
|
303
135
|
return null;
|
|
304
136
|
}
|
|
305
|
-
async function resolveConfiguredAuthContext(authContext) {
|
|
306
|
-
if (typeof authContext === "function") {
|
|
307
|
-
return await authContext();
|
|
308
|
-
}
|
|
309
|
-
return authContext;
|
|
310
|
-
}
|
|
311
|
-
function mergeHeaderRecord(base, addition) {
|
|
312
|
-
const headers = new Headers(base);
|
|
313
|
-
for (const [key, value] of Object.entries(addition)) {
|
|
314
|
-
const existing = headers.get(key);
|
|
315
|
-
if (existing !== null && existing !== value) {
|
|
316
|
-
throw new LucernSdkAuthContextError(
|
|
317
|
-
"policy_denied",
|
|
318
|
-
`Canonical Lucern SDK auth context conflicts with existing ${key} header.`
|
|
319
|
-
);
|
|
320
|
-
}
|
|
321
|
-
headers.set(key, value);
|
|
322
|
-
}
|
|
323
|
-
return Object.fromEntries(headers.entries());
|
|
324
|
-
}
|
|
325
|
-
function cleanHeaderValue(value) {
|
|
326
|
-
const normalized = value?.trim();
|
|
327
|
-
return normalized ? normalized : void 0;
|
|
328
|
-
}
|
|
329
137
|
function createGatewayRequestClient(config = {}) {
|
|
330
138
|
const fetchImpl = config.fetchImpl ?? fetch;
|
|
331
139
|
const baseUrl = config.baseUrl?.replace(/\/+$/, "") ?? "";
|
|
332
140
|
const maxRetries = config.maxRetries ?? 2;
|
|
333
141
|
const requestIdFactory = config.requestIdFactory ?? (() => generatePortableRequestId());
|
|
334
142
|
async function resolveAuthHeaders() {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
const setIfAbsent = (name, value) => {
|
|
338
|
-
const normalized = cleanHeaderValue(value);
|
|
339
|
-
if (normalized && !headers.has(name)) {
|
|
340
|
-
headers.set(name, normalized);
|
|
341
|
-
}
|
|
342
|
-
};
|
|
343
|
-
setIfAbsent("x-lucern-key", config.apiKey);
|
|
344
|
-
setIfAbsent("x-lucern-session-token", config.userToken);
|
|
345
|
-
setIfAbsent("x-lucern-environment", config.environment);
|
|
346
|
-
setIfAbsent("x-lucern-clerk-id", config.clerkId);
|
|
347
|
-
setIfAbsent("x-lucern-user-id", config.userId ?? config.clerkId);
|
|
348
|
-
setIfAbsent("x-lucern-deployment-host", config.deploymentHost);
|
|
349
|
-
const base = Object.fromEntries(headers.entries());
|
|
350
|
-
const authContextInput = await resolveConfiguredAuthContext(
|
|
351
|
-
config.authContext
|
|
352
|
-
);
|
|
353
|
-
if (!authContextInput && !config.requireCanonicalAuthContext) {
|
|
354
|
-
return base;
|
|
143
|
+
if (!config.getAuthHeaders) {
|
|
144
|
+
return {};
|
|
355
145
|
}
|
|
356
|
-
|
|
357
|
-
return mergeHeaderRecord(base, createCanonicalAuthHeaders(authContext));
|
|
146
|
+
return await config.getAuthHeaders();
|
|
358
147
|
}
|
|
359
148
|
async function fetchWithTimeout(url, init, timeoutMs) {
|
|
360
149
|
const controller = new AbortController();
|
|
@@ -375,11 +164,11 @@ function createGatewayRequestClient(config = {}) {
|
|
|
375
164
|
if (!text) {
|
|
376
165
|
return null;
|
|
377
166
|
}
|
|
378
|
-
|
|
379
|
-
|
|
167
|
+
try {
|
|
168
|
+
return JSON.parse(text);
|
|
169
|
+
} catch {
|
|
380
170
|
return null;
|
|
381
171
|
}
|
|
382
|
-
return isRecord(parsed.value) ? parsed.value : null;
|
|
383
172
|
}
|
|
384
173
|
function resolveTimeoutMs(method, requestTimeoutMs) {
|
|
385
174
|
if (typeof requestTimeoutMs === "number") {
|
|
@@ -391,31 +180,16 @@ function createGatewayRequestClient(config = {}) {
|
|
|
391
180
|
}
|
|
392
181
|
return config.timeoutMs ?? 15e3;
|
|
393
182
|
}
|
|
394
|
-
function tryParseGatewayEnvelopeJson(text) {
|
|
395
|
-
const trimmed = text.trim();
|
|
396
|
-
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) {
|
|
397
|
-
return { ok: false, reason: "non-json" };
|
|
398
|
-
}
|
|
399
|
-
try {
|
|
400
|
-
return { ok: true, value: JSON.parse(trimmed) };
|
|
401
|
-
} catch (error) {
|
|
402
|
-
if (error instanceof SyntaxError) {
|
|
403
|
-
return { ok: false, reason: "invalid-json", error };
|
|
404
|
-
}
|
|
405
|
-
throw error;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
183
|
function buildApiError(args) {
|
|
409
184
|
const failure = args.failure;
|
|
410
|
-
const legacyError = failure &&
|
|
185
|
+
const legacyError = failure && typeof failure.error === "object" && failure.error !== null ? failure.error : failure?.legacyError;
|
|
411
186
|
const correlationId = failure?.correlationId ?? args.response.headers.get("x-lucern-correlation-id")?.trim() ?? args.requestId;
|
|
412
187
|
const policyTraceId = failure?.policyTraceId ?? args.response.headers.get("x-lucern-policy-trace-id")?.trim() ?? null;
|
|
413
188
|
const details = failure?.details ?? legacyError?.details;
|
|
414
189
|
const policySummary = readPolicySummaryFromDetails(details);
|
|
415
|
-
const failureMessage = typeof failure?.error === "string" ? failure.error : legacyError?.message;
|
|
416
190
|
return new LucernApiError({
|
|
417
191
|
code: failure?.code ?? legacyError?.code ?? fallbackErrorCode(args.response.status),
|
|
418
|
-
message: policySummary ??
|
|
192
|
+
message: policySummary ?? (typeof failure?.error === "string" ? failure.error : legacyError?.message ?? (args.response.ok ? "Platform API returned an invalid success payload." : "Platform API request failed.")),
|
|
419
193
|
status: args.response.status,
|
|
420
194
|
invariant: failure?.invariant,
|
|
421
195
|
suggestion: failure?.suggestion,
|
|
@@ -541,11 +315,11 @@ function createGatewayRequestClient(config = {}) {
|
|
|
541
315
|
}
|
|
542
316
|
|
|
543
317
|
// src/sdkSurface.ts
|
|
544
|
-
function
|
|
318
|
+
function cleanString(value) {
|
|
545
319
|
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
546
320
|
}
|
|
547
321
|
function normalizeVerificationStatus(value) {
|
|
548
|
-
const status =
|
|
322
|
+
const status = cleanString(value);
|
|
549
323
|
if (!status) {
|
|
550
324
|
return void 0;
|
|
551
325
|
}
|
|
@@ -558,10 +332,10 @@ function normalizeVerificationStatus(value) {
|
|
|
558
332
|
return status;
|
|
559
333
|
}
|
|
560
334
|
function resolveTopicId(value) {
|
|
561
|
-
return
|
|
335
|
+
return cleanString(value.topicId);
|
|
562
336
|
}
|
|
563
337
|
function resolveText(value) {
|
|
564
|
-
return
|
|
338
|
+
return cleanString(value.text) ?? cleanString(value.canonicalText);
|
|
565
339
|
}
|
|
566
340
|
function normalizeNodeWriteInput(value) {
|
|
567
341
|
const topicId = resolveTopicId(value);
|
|
@@ -682,12 +456,12 @@ function createBeliefsClient(config = {}) {
|
|
|
682
456
|
body: normalizeModulateConfidenceInput(input),
|
|
683
457
|
idempotencyKey: idempotencyKey ?? randomIdempotencyKey()
|
|
684
458
|
});
|
|
685
|
-
|
|
459
|
+
async function getOpinionHistory(beliefId) {
|
|
686
460
|
const response = await gateway.request({
|
|
687
461
|
path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence-history`
|
|
688
462
|
});
|
|
689
463
|
return mapOpinionHistoryEntriesFromGatewayData(response.data);
|
|
690
|
-
}
|
|
464
|
+
}
|
|
691
465
|
return {
|
|
692
466
|
/**
|
|
693
467
|
* Create a belief within a topic scope.
|
|
@@ -732,9 +506,13 @@ function createBeliefsClient(config = {}) {
|
|
|
732
506
|
* trigger = cause of the score change
|
|
733
507
|
* triggeringRef = optional pointer to the evidence or worktree that drove the change
|
|
734
508
|
*/
|
|
735
|
-
getOpinionHistory
|
|
509
|
+
async getOpinionHistory(beliefId) {
|
|
510
|
+
return getOpinionHistory(beliefId);
|
|
511
|
+
},
|
|
736
512
|
/** @deprecated Use getOpinionHistory(). */
|
|
737
|
-
getConfidenceHistory
|
|
513
|
+
async getConfidenceHistory(beliefId) {
|
|
514
|
+
return getOpinionHistory(beliefId);
|
|
515
|
+
},
|
|
738
516
|
/**
|
|
739
517
|
* Fork a scored belief into a new formulation.
|
|
740
518
|
*/
|