@lucern/sdk 0.3.0-alpha.6 → 0.3.0-alpha.7
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 +3 -0
- package/dist/adminClient.d.ts +8 -8
- package/dist/adminClient.js +47 -36
- package/dist/adminClient.js.map +1 -1
- package/dist/answersClient.js +26 -8
- package/dist/answersClient.js.map +1 -1
- package/dist/audience/index.d.ts +2 -1
- package/dist/audience/index.js +1 -3
- package/dist/audience/index.js.map +1 -1
- package/dist/audiencesClient.d.ts +16 -16
- package/dist/audiencesClient.js +102 -87
- package/dist/audiencesClient.js.map +1 -1
- package/dist/auditClient.js +30 -10
- package/dist/auditClient.js.map +1 -1
- package/dist/authDeviceClient.js +16 -3
- package/dist/authDeviceClient.js.map +1 -1
- package/dist/beliefs/index.d.ts +3 -3
- package/dist/beliefs/index.js +513 -758
- package/dist/beliefs/index.js.map +1 -1
- package/dist/beliefsClient.d.ts +2 -2
- package/dist/beliefsClient.js +31 -19
- package/dist/beliefsClient.js.map +1 -1
- package/dist/boundaryClientSurface.js +10 -3
- package/dist/boundaryClientSurface.js.map +1 -1
- package/dist/client.d.ts +247 -270
- package/dist/client.js +513 -758
- package/dist/client.js.map +1 -1
- package/dist/clientHelpers.d.ts +29 -0
- package/dist/clientHelpers.js +122 -0
- package/dist/clientHelpers.js.map +1 -0
- package/dist/contextClient.js +26 -8
- package/dist/contextClient.js.map +1 -1
- package/dist/contextPackCompiler.js +19 -30
- package/dist/contextPackCompiler.js.map +1 -1
- package/dist/contextPackPolicy.js +7 -17
- package/dist/contextPackPolicy.js.map +1 -1
- package/dist/contracts/index.js +4 -3
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/lens-filter.contract.js +4 -3
- package/dist/contracts/lens-filter.contract.js.map +1 -1
- package/dist/contracts/lens-workflow.contract.js +4 -3
- package/dist/contracts/lens-workflow.contract.js.map +1 -1
- package/dist/contracts/lensFilter.js +4 -3
- package/dist/contracts/lensFilter.js.map +1 -1
- package/dist/contracts/lensWorkflow.js +4 -3
- package/dist/contracts/lensWorkflow.js.map +1 -1
- package/dist/contradictions/index.d.ts +2 -2
- package/dist/contradictions/index.js +513 -758
- package/dist/contradictions/index.js.map +1 -1
- package/dist/coreClient.d.ts +2 -1
- package/dist/coreClient.js +27 -11
- package/dist/coreClient.js.map +1 -1
- package/dist/decisions/index.d.ts +12 -12
- package/dist/decisions/index.js +513 -758
- package/dist/decisions/index.js.map +1 -1
- package/dist/decisionsClient.d.ts +4 -12
- package/dist/decisionsClient.js +37 -31
- package/dist/decisionsClient.js.map +1 -1
- package/dist/edges/index.d.ts +2 -2
- package/dist/edges/index.js +513 -758
- package/dist/edges/index.js.map +1 -1
- package/dist/embeddingsClient.js +37 -14
- package/dist/embeddingsClient.js.map +1 -1
- package/dist/eventingClient.js +37 -14
- package/dist/eventingClient.js.map +1 -1
- package/dist/events.js +6 -3
- package/dist/events.js.map +1 -1
- package/dist/eventsCore.d.ts +1 -1
- package/dist/eventsCore.js +27 -11
- package/dist/eventsCore.js.map +1 -1
- package/dist/evidence/index.d.ts +2 -2
- package/dist/evidence/index.js +513 -758
- package/dist/evidence/index.js.map +1 -1
- package/dist/evidenceClient.js +27 -11
- package/dist/evidenceClient.js.map +1 -1
- package/dist/functionSurface.js +27 -11
- package/dist/functionSurface.js.map +1 -1
- package/dist/functionSurfaceClient.js +27 -11
- package/dist/functionSurfaceClient.js.map +1 -1
- package/dist/gatewayFacades.d.ts +27 -45
- package/dist/gatewayFacades.js +92 -118
- package/dist/gatewayFacades.js.map +1 -1
- package/dist/graphAnalysisClient.js +31 -12
- package/dist/graphAnalysisClient.js.map +1 -1
- package/dist/graphClient.d.ts +5 -13
- package/dist/graphClient.js +42 -35
- package/dist/graphClient.js.map +1 -1
- package/dist/graphRecommendationsClient.js +31 -13
- package/dist/graphRecommendationsClient.js.map +1 -1
- package/dist/graphStateClassifierClient.js +37 -15
- package/dist/graphStateClassifierClient.js.map +1 -1
- package/dist/harnessClient.d.ts +13 -24
- package/dist/harnessClient.js +38 -37
- package/dist/harnessClient.js.map +1 -1
- package/dist/identityClient.d.ts +8 -8
- package/dist/identityClient.js +48 -31
- package/dist/identityClient.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +592 -819
- package/dist/index.js.map +1 -1
- package/dist/infisicalRuntime.js +47 -24
- package/dist/infisicalRuntime.js.map +1 -1
- package/dist/jobsClient.js +37 -15
- package/dist/jobsClient.js.map +1 -1
- package/dist/learningClient.d.ts +6 -6
- package/dist/learningClient.js +55 -39
- package/dist/learningClient.js.map +1 -1
- package/dist/lenses/index.d.ts +29 -35
- package/dist/lenses/index.js +513 -758
- package/dist/lenses/index.js.map +1 -1
- package/dist/mcpClient.js +26 -8
- package/dist/mcpClient.js.map +1 -1
- package/dist/modelRuntimeClient.js +37 -14
- package/dist/modelRuntimeClient.js.map +1 -1
- package/dist/nodes/index.d.ts +17 -17
- package/dist/nodes/index.js +513 -758
- package/dist/nodes/index.js.map +1 -1
- package/dist/ontologies/index.d.ts +31 -30
- package/dist/ontologies/index.js +513 -758
- package/dist/ontologies/index.js.map +1 -1
- package/dist/ontologyClient.d.ts +17 -25
- package/dist/ontologyClient.js +63 -37
- package/dist/ontologyClient.js.map +1 -1
- package/dist/ontologyLinksClient.js +37 -15
- package/dist/ontologyLinksClient.js.map +1 -1
- package/dist/orgGraphSearchClient.js +30 -10
- package/dist/orgGraphSearchClient.js.map +1 -1
- package/dist/packsClient.d.ts +9 -23
- package/dist/packsClient.js +39 -43
- package/dist/packsClient.js.map +1 -1
- package/dist/policyClient.d.ts +11 -10
- package/dist/policyClient.js +48 -22
- package/dist/policyClient.js.map +1 -1
- package/dist/questions/index.d.ts +2 -2
- package/dist/questions/index.js +513 -758
- package/dist/questions/index.js.map +1 -1
- package/dist/realtime/index.d.ts +1 -1
- package/dist/reportsClient.d.ts +7 -7
- package/dist/reportsClient.js +84 -48
- package/dist/reportsClient.js.map +1 -1
- package/dist/schemaClient.d.ts +3 -3
- package/dist/schemaClient.js +40 -26
- package/dist/schemaClient.js.map +1 -1
- package/dist/sdkSurface.d.ts +6 -3
- package/dist/sdkSurface.js +10 -6
- package/dist/sdkSurface.js.map +1 -1
- package/dist/sourcesClient.js +27 -11
- package/dist/sourcesClient.js.map +1 -1
- package/dist/telemetryClient.js +37 -15
- package/dist/telemetryClient.js.map +1 -1
- package/dist/toolRegistryClient.d.ts +10 -2
- package/dist/toolRegistryClient.js +50 -16
- package/dist/toolRegistryClient.js.map +1 -1
- package/dist/topics/index.d.ts +5 -5
- package/dist/topics/index.js +513 -758
- package/dist/topics/index.js.map +1 -1
- package/dist/topicsClient.js +37 -16
- package/dist/topicsClient.js.map +1 -1
- 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 +15 -33
- package/dist/workflowClient.js +43 -50
- package/dist/workflowClient.js.map +1 -1
- package/dist/worktrees/index.d.ts +22 -30
- package/dist/worktrees/index.js +513 -758
- package/dist/worktrees/index.js.map +1 -1
- package/package.json +4 -4
package/dist/beliefsClient.d.ts
CHANGED
|
@@ -188,9 +188,9 @@ declare function createBeliefsClient(config?: BeliefsClientConfig): {
|
|
|
188
188
|
* trigger = cause of the score change
|
|
189
189
|
* triggeringRef = optional pointer to the evidence or worktree that drove the change
|
|
190
190
|
*/
|
|
191
|
-
getOpinionHistory(beliefId: string)
|
|
191
|
+
getOpinionHistory: (beliefId: string) => Promise<OpinionHistoryEntry[]>;
|
|
192
192
|
/** @deprecated Use getOpinionHistory(). */
|
|
193
|
-
getConfidenceHistory(beliefId: string)
|
|
193
|
+
getConfidenceHistory: (beliefId: string) => Promise<OpinionHistoryEntry[]>;
|
|
194
194
|
/**
|
|
195
195
|
* Fork a scored belief into a new formulation.
|
|
196
196
|
*/
|
package/dist/beliefsClient.js
CHANGED
|
@@ -212,9 +212,7 @@ function generatePortableRequestId() {
|
|
|
212
212
|
8
|
|
213
213
|
).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
214
214
|
}
|
|
215
|
-
|
|
216
|
-
return generatePortableRequestId();
|
|
217
|
-
}
|
|
215
|
+
var randomIdempotencyKey = generatePortableRequestId;
|
|
218
216
|
function isRetryableStatus(status) {
|
|
219
217
|
return status >= 500 || status === 408 || status === 429;
|
|
220
218
|
}
|
|
@@ -279,8 +277,11 @@ function timeoutError(timeoutMs) {
|
|
|
279
277
|
error.name = "AbortError";
|
|
280
278
|
return error;
|
|
281
279
|
}
|
|
280
|
+
function isRecord(value) {
|
|
281
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
282
|
+
}
|
|
282
283
|
function readPolicySummaryFromDetails(details) {
|
|
283
|
-
if (!
|
|
284
|
+
if (!isRecord(details)) {
|
|
284
285
|
return null;
|
|
285
286
|
}
|
|
286
287
|
const directSummary = details.summary;
|
|
@@ -288,11 +289,11 @@ function readPolicySummaryFromDetails(details) {
|
|
|
288
289
|
return directSummary.trim();
|
|
289
290
|
}
|
|
290
291
|
const policy = details.policy;
|
|
291
|
-
if (!
|
|
292
|
+
if (!isRecord(policy)) {
|
|
292
293
|
return null;
|
|
293
294
|
}
|
|
294
295
|
const explanation = policy.explanation;
|
|
295
|
-
if (!
|
|
296
|
+
if (!isRecord(explanation)) {
|
|
296
297
|
return null;
|
|
297
298
|
}
|
|
298
299
|
const nestedSummary = explanation.summary;
|
|
@@ -356,11 +357,11 @@ function createGatewayRequestClient(config = {}) {
|
|
|
356
357
|
if (!text) {
|
|
357
358
|
return null;
|
|
358
359
|
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
} catch {
|
|
360
|
+
const parsed = tryParseGatewayEnvelopeJson(text);
|
|
361
|
+
if (!parsed.ok) {
|
|
362
362
|
return null;
|
|
363
363
|
}
|
|
364
|
+
return isRecord(parsed.value) ? parsed.value : null;
|
|
364
365
|
}
|
|
365
366
|
function resolveTimeoutMs(method, requestTimeoutMs) {
|
|
366
367
|
if (typeof requestTimeoutMs === "number") {
|
|
@@ -372,16 +373,31 @@ function createGatewayRequestClient(config = {}) {
|
|
|
372
373
|
}
|
|
373
374
|
return config.timeoutMs ?? 15e3;
|
|
374
375
|
}
|
|
376
|
+
function tryParseGatewayEnvelopeJson(text) {
|
|
377
|
+
const trimmed = text.trim();
|
|
378
|
+
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) {
|
|
379
|
+
return { ok: false, reason: "non-json" };
|
|
380
|
+
}
|
|
381
|
+
try {
|
|
382
|
+
return { ok: true, value: JSON.parse(trimmed) };
|
|
383
|
+
} catch (error) {
|
|
384
|
+
if (error instanceof SyntaxError) {
|
|
385
|
+
return { ok: false, reason: "invalid-json", error };
|
|
386
|
+
}
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
375
390
|
function buildApiError(args) {
|
|
376
391
|
const failure = args.failure;
|
|
377
|
-
const legacyError = failure &&
|
|
392
|
+
const legacyError = failure && isRecord(failure.error) ? failure.error : failure?.legacyError;
|
|
378
393
|
const correlationId = failure?.correlationId ?? args.response.headers.get("x-lucern-correlation-id")?.trim() ?? args.requestId;
|
|
379
394
|
const policyTraceId = failure?.policyTraceId ?? args.response.headers.get("x-lucern-policy-trace-id")?.trim() ?? null;
|
|
380
395
|
const details = failure?.details ?? legacyError?.details;
|
|
381
396
|
const policySummary = readPolicySummaryFromDetails(details);
|
|
397
|
+
const failureMessage = typeof failure?.error === "string" ? failure.error : legacyError?.message;
|
|
382
398
|
return new LucernApiError({
|
|
383
399
|
code: failure?.code ?? legacyError?.code ?? fallbackErrorCode(args.response.status),
|
|
384
|
-
message: policySummary ??
|
|
400
|
+
message: policySummary ?? failureMessage ?? (args.response.ok ? "Platform API returned an invalid success payload." : "Platform API request failed."),
|
|
385
401
|
status: args.response.status,
|
|
386
402
|
invariant: failure?.invariant,
|
|
387
403
|
suggestion: failure?.suggestion,
|
|
@@ -648,12 +664,12 @@ function createBeliefsClient(config = {}) {
|
|
|
648
664
|
body: normalizeModulateConfidenceInput(input),
|
|
649
665
|
idempotencyKey: idempotencyKey ?? randomIdempotencyKey()
|
|
650
666
|
});
|
|
651
|
-
async
|
|
667
|
+
const getOpinionHistory = async (beliefId) => {
|
|
652
668
|
const response = await gateway.request({
|
|
653
669
|
path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence-history`
|
|
654
670
|
});
|
|
655
671
|
return mapOpinionHistoryEntriesFromGatewayData(response.data);
|
|
656
|
-
}
|
|
672
|
+
};
|
|
657
673
|
return {
|
|
658
674
|
/**
|
|
659
675
|
* Create a belief within a topic scope.
|
|
@@ -698,13 +714,9 @@ function createBeliefsClient(config = {}) {
|
|
|
698
714
|
* trigger = cause of the score change
|
|
699
715
|
* triggeringRef = optional pointer to the evidence or worktree that drove the change
|
|
700
716
|
*/
|
|
701
|
-
|
|
702
|
-
return getOpinionHistory(beliefId);
|
|
703
|
-
},
|
|
717
|
+
getOpinionHistory,
|
|
704
718
|
/** @deprecated Use getOpinionHistory(). */
|
|
705
|
-
|
|
706
|
-
return getOpinionHistory(beliefId);
|
|
707
|
-
},
|
|
719
|
+
getConfidenceHistory: getOpinionHistory,
|
|
708
720
|
/**
|
|
709
721
|
* Fork a scored belief into a new formulation.
|
|
710
722
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/authContext.ts","../src/coreClient.ts","../src/sdkSurface.ts","../src/beliefsClient.ts"],"names":["cleanString"],"mappings":"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","file":"beliefsClient.js","sourcesContent":["import type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./contracts/auth-session.contract\";\nimport type { JsonObject } from \"./types\";\n\nexport type LucernSdkAuthFailureReason =\n | \"principal_missing\"\n | \"tenant_missing\"\n | \"membership_missing\"\n | \"workspace_missing\"\n | \"policy_denied\";\n\nexport type PermitReadyAuthContext = {\n subject: string;\n tenant: string;\n workspace: string;\n resource?: string;\n action?: string;\n relation?: string;\n context?: JsonObject;\n};\n\nexport type LucernSdkAuthPolicyDecision = \"allow\" | \"deny\" | \"unknown\";\n\nexport type LucernSdkAuthContextInput = {\n clerkId?: string;\n principalId?: string;\n tenantId?: string;\n workspaceId?: string;\n principalType?: SessionPrincipalType;\n authMode?: SessionAuthMode;\n roles?: readonly string[];\n scopes?: readonly string[];\n delegationChain?: readonly SessionDelegationHop[];\n policyTraceId?: string;\n correlationId?: string;\n membershipId?: string;\n policyDecision?: LucernSdkAuthPolicyDecision;\n permit?: Partial<PermitReadyAuthContext>;\n};\n\nexport type CanonicalLucernSdkAuthContext = {\n clerkId?: string;\n principalId: string;\n tenantId: string;\n workspaceId: string;\n principalType: SessionPrincipalType;\n authMode: SessionAuthMode;\n roles: string[];\n scopes: string[];\n delegationChain: SessionDelegationHop[];\n policyTraceId?: string;\n correlationId?: string;\n membershipId?: string;\n permit: PermitReadyAuthContext;\n};\n\nexport class LucernSdkAuthContextError extends Error {\n readonly reason: LucernSdkAuthFailureReason;\n\n constructor(reason: LucernSdkAuthFailureReason, message: string) {\n super(message);\n this.name = \"LucernSdkAuthContextError\";\n this.reason = reason;\n }\n}\n\nfunction cleanString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized ? normalized : undefined;\n}\n\nfunction cleanStringList(values: readonly string[] | undefined): string[] {\n if (!values) {\n return [];\n }\n return values\n .map((value) => value.trim())\n .filter(\n (value, index, list) =>\n value.length > 0 && list.indexOf(value) === index\n );\n}\n\nfunction requireString(\n value: string | undefined,\n reason: LucernSdkAuthFailureReason,\n label: string\n): string {\n const normalized = cleanString(value);\n if (!normalized) {\n throw new LucernSdkAuthContextError(\n reason,\n `Canonical Lucern SDK auth context is missing ${label}.`\n );\n }\n return normalized;\n}\n\nfunction requirePrincipalType(\n principalType: SessionPrincipalType | undefined\n): SessionPrincipalType {\n if (!principalType) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is missing principalType.\"\n );\n }\n return principalType;\n}\n\nfunction requireAuthMode(authMode: SessionAuthMode | undefined): SessionAuthMode {\n if (!authMode) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is missing authMode.\"\n );\n }\n return authMode;\n}\n\nfunction ensurePermitMatch(args: {\n field: keyof PermitReadyAuthContext;\n expected: string;\n actual?: string;\n}) {\n const actual = cleanString(args.actual);\n if (actual && actual !== args.expected) {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n `Canonical Lucern SDK auth context has conflicting Permit ${args.field}.`\n );\n }\n}\n\nexport function normalizeCanonicalLucernAuthContext(\n input: LucernSdkAuthContextInput | undefined\n): CanonicalLucernSdkAuthContext {\n if (!input) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is required.\"\n );\n }\n\n if (input.policyDecision === \"deny\") {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n \"Canonical Lucern SDK auth context carries a denied policy decision.\"\n );\n }\n\n const principalId = requireString(\n input.principalId,\n \"principal_missing\",\n \"principalId\"\n );\n const tenantId = requireString(input.tenantId, \"tenant_missing\", \"tenantId\");\n const workspaceId = requireString(\n input.workspaceId,\n \"workspace_missing\",\n \"workspaceId\"\n );\n const roles = cleanStringList(input.roles);\n const scopes = cleanStringList(input.scopes);\n const principalType = requirePrincipalType(input.principalType);\n const authMode = requireAuthMode(input.authMode);\n const roleBasedInteractiveAuth =\n authMode === \"interactive_user\" && roles.length > 0;\n if (\n roles.length === 0 ||\n (scopes.length === 0 && !roleBasedInteractiveAuth)\n ) {\n throw new LucernSdkAuthContextError(\n \"membership_missing\",\n \"Canonical Lucern SDK auth context requires non-empty roles and scopes.\"\n );\n }\n\n const subject = cleanString(input.permit?.subject) ?? principalId;\n const tenant = cleanString(input.permit?.tenant) ?? tenantId;\n const workspace = cleanString(input.permit?.workspace) ?? workspaceId;\n\n ensurePermitMatch({\n field: \"subject\",\n expected: principalId,\n actual: subject,\n });\n ensurePermitMatch({ field: \"tenant\", expected: tenantId, actual: tenant });\n ensurePermitMatch({\n field: \"workspace\",\n expected: workspaceId,\n actual: workspace,\n });\n\n const context = input.permit?.context\n ? ({ ...input.permit.context } as JsonObject)\n : undefined;\n\n return {\n clerkId: cleanString(input.clerkId),\n principalId,\n tenantId,\n workspaceId,\n principalType,\n authMode,\n roles,\n scopes,\n delegationChain: input.delegationChain ? [...input.delegationChain] : [],\n policyTraceId: cleanString(input.policyTraceId),\n correlationId: cleanString(input.correlationId),\n membershipId: cleanString(input.membershipId),\n permit: {\n subject,\n tenant,\n workspace,\n resource: cleanString(input.permit?.resource),\n action: cleanString(input.permit?.action),\n relation: cleanString(input.permit?.relation),\n context,\n },\n };\n}\n\nexport function createCanonicalAuthHeaders(\n authContext: CanonicalLucernSdkAuthContext\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"x-lucern-principal-id\": authContext.principalId,\n \"x-lucern-principal-type\": authContext.principalType,\n \"x-lucern-tenant\": authContext.tenantId,\n \"x-lucern-tenant-id\": authContext.tenantId,\n \"x-lucern-workspace\": authContext.workspaceId,\n \"x-lucern-workspace-id\": authContext.workspaceId,\n \"x-lucern-auth-mode\": authContext.authMode,\n \"x-lucern-roles\": authContext.roles.join(\",\"),\n \"x-lucern-scopes\": authContext.scopes.join(\",\"),\n \"x-lucern-permit-context\": JSON.stringify(authContext.permit),\n };\n\n if (authContext.clerkId) {\n headers[\"x-lucern-clerk-id\"] = authContext.clerkId;\n headers[\"x-lucern-user-id\"] = authContext.clerkId;\n }\n if (authContext.delegationChain.length > 0) {\n headers[\"x-lucern-delegation-chain\"] = JSON.stringify(\n authContext.delegationChain\n );\n }\n if (authContext.policyTraceId) {\n headers[\"x-lucern-policy-trace-id\"] = authContext.policyTraceId;\n }\n if (authContext.correlationId) {\n headers[\"x-correlation-id\"] = authContext.correlationId;\n headers[\"x-lucern-correlation-id\"] = authContext.correlationId;\n }\n if (authContext.membershipId) {\n headers[\"x-lucern-membership-id\"] = authContext.membershipId;\n }\n\n return headers;\n}\n","import {\n createCanonicalAuthHeaders,\n LucernSdkAuthContextError,\n normalizeCanonicalLucernAuthContext,\n type LucernSdkAuthContextInput,\n} from \"./authContext\";\nimport type { JsonObject, JsonValue } from \"./types\";\n\n/** Tenant and workspace identifiers used to scope gateway requests. */\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\n/** Successful response envelope from the platform gateway with correlation metadata. */\nexport type PlatformGatewaySuccess<T> = {\n success: true;\n data: T;\n correlationId: string;\n policyTraceId: string | null;\n idempotentReplay: boolean;\n};\n\n/** Failed response envelope with structured error codes and optional invariant references. */\nexport type PlatformGatewayFailure = {\n success: false;\n /**\n * Error string is the canonical envelope field.\n * Object form is legacy-only compatibility for older gateway responses.\n */\n error:\n | string\n | {\n code: string;\n message: string;\n details?: JsonValue;\n };\n code?: string;\n invariant?: string | null;\n suggestion?: string | null;\n details?: JsonValue;\n legacyError?: {\n code: string;\n message: string;\n details?: JsonValue;\n };\n correlationId: string;\n policyTraceId: string | null;\n};\n\n/** Discriminated union of success and failure gateway responses. */\nexport type PlatformGatewayEnvelope<T> =\n | PlatformGatewaySuccess<T>\n | PlatformGatewayFailure;\n\n/**\n * Structured error thrown when a platform API request fails.\n *\n * Includes HTTP status, machine-readable error code, optional invariant\n * reference, and actionable suggestions for common failure modes.\n */\nexport class LucernApiError extends Error {\n public readonly code: string;\n public readonly status: number;\n public readonly invariant?: string | null;\n public readonly suggestion?: string | null;\n public readonly details?: JsonValue;\n public readonly requestId?: string;\n public readonly correlationId?: string;\n public readonly policyTraceId?: string | null;\n\n constructor(args: {\n code: string;\n message: string;\n status: number;\n invariant?: string | null;\n suggestion?: string | null;\n details?: JsonValue;\n requestId?: string;\n correlationId?: string;\n policyTraceId?: string | null;\n }) {\n super(args.message);\n this.name = \"LucernApiError\";\n this.code = args.code;\n this.status = args.status;\n this.invariant = args.invariant;\n this.suggestion = args.suggestion;\n this.details = args.details;\n this.requestId = args.requestId;\n this.correlationId = args.correlationId;\n this.policyTraceId = args.policyTraceId;\n }\n}\n\n/** Supported HTTP methods for gateway requests. */\nexport type GatewayHttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\ntype FetchLike = (\n input: RequestInfo | URL,\n init?: RequestInit\n) => Promise<Response>;\n\n/** Context passed to the `onRequest` hook before each gateway request attempt. */\nexport type GatewayRequestHookContext = {\n requestId: string;\n attempt: number;\n maxRetries: number;\n method: GatewayHttpMethod;\n path: string;\n url: string;\n headers: Headers;\n body?: string;\n timeoutMs: number;\n};\n\n/** Context passed to the `onResponse` hook after each gateway request attempt (including retries and failures). */\nexport type GatewayResponseHookContext = GatewayRequestHookContext & {\n durationMs: number;\n status?: number;\n response?: Response;\n error?: unknown;\n correlationId?: string;\n policyTraceId?: string | null;\n idempotentReplay?: boolean;\n retryAfterMs?: number | null;\n willRetry: boolean;\n};\n\n/**\n * Low-level transport configuration for the platform gateway client.\n *\n * Most developers should use {@link createLucernClient} instead, which wraps\n * this config with higher-level conveniences like `apiKey` and `environment`.\n */\nexport type GatewayClientConfig = {\n baseUrl?: string;\n fetchImpl?: FetchLike;\n getAuthHeaders?:\n | (() => Promise<Record<string, string>>)\n | (() => Record<string, string>);\n /**\n * Canonical Master Control identity tuple applied to every SDK request.\n * Use this for tenant/workspace-scoped graph and identity operations.\n */\n authContext?:\n | LucernSdkAuthContextInput\n | (() => Promise<LucernSdkAuthContextInput | undefined>)\n | (() => LucernSdkAuthContextInput | undefined);\n /** When true, requests fail before fetch if `authContext` is absent. */\n requireCanonicalAuthContext?: boolean;\n /** Max retries for transient errors (5xx, network). Defaults to 2. */\n maxRetries?: number;\n /** Request timeout in ms. Defaults to 15000. */\n timeoutMs?: number;\n /** Optional timeout overrides by HTTP method. */\n timeoutMsByMethod?: Partial<Record<GatewayHttpMethod, number>>;\n /** Optional request ID factory used for correlation headers. */\n requestIdFactory?: () => string;\n /** Invoked before each request attempt, including retries. */\n onRequest?:\n | ((context: GatewayRequestHookContext) => void)\n | ((context: GatewayRequestHookContext) => Promise<void>);\n /** Invoked after each request attempt, including retries and failures. */\n onResponse?:\n | ((context: GatewayResponseHookContext) => void)\n | ((context: GatewayResponseHookContext) => Promise<void>);\n};\n\n/**\n * Serialize a gateway query object into a URL query string.\n */\nexport function toQueryString(\n scope: GatewayScope & Record<string, string | number | boolean | undefined>\n): string {\n const params = new URLSearchParams();\n if (scope.tenantId) {\n params.set(\"tenantId\", scope.tenantId);\n }\n if (scope.workspaceId) {\n params.set(\"workspaceId\", scope.workspaceId);\n }\n for (const [key, value] of Object.entries(scope)) {\n if (key === \"tenantId\" || key === \"workspaceId\") {\n continue;\n }\n if (value === undefined) {\n continue;\n }\n params.set(key, String(value));\n }\n const serialized = params.toString();\n return serialized.length > 0 ? `?${serialized}` : \"\";\n}\n\nfunction fillRandomBytes(length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n if (typeof globalThis.crypto?.getRandomValues === \"function\") {\n globalThis.crypto.getRandomValues(bytes);\n return bytes;\n }\n\n for (let index = 0; index < length; index += 1) {\n bytes[index] = Math.floor(Math.random() * 256);\n }\n return bytes;\n}\n\nfunction generatePortableRequestId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n\n const bytes = fillRandomBytes(16);\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (value) => value.toString(16).padStart(2, \"0\"));\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(\n 6,\n 8\n ).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10).join(\"\")}`;\n}\n\n/**\n * Generate a random idempotency key for retry-safe writes.\n */\nexport function randomIdempotencyKey(): string {\n return generatePortableRequestId();\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status >= 500 || status === 408 || status === 429;\n}\n\nfunction fallbackErrorCode(status: number): string {\n if (status === 401) {\n return \"AUTHENTICATION_REQUIRED\";\n }\n if (status === 403) {\n return \"FORBIDDEN\";\n }\n if (status === 404) {\n return \"NOT_FOUND\";\n }\n if (status === 408) {\n return \"UPSTREAM_ERROR\";\n }\n if (status === 409) {\n return \"CONFLICT\";\n }\n if (status === 429) {\n return \"RATE_LIMIT_EXCEEDED\";\n }\n if (status >= 500) {\n return \"UPSTREAM_ERROR\";\n }\n return \"INTERNAL_ERROR\";\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseRetryAfterMs(value: string | null): number | null {\n if (!value) {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const numeric = Number(trimmed);\n if (Number.isFinite(numeric)) {\n return Math.max(0, Math.round(numeric * 1000));\n }\n const parsedDate = Date.parse(trimmed);\n if (Number.isFinite(parsedDate)) {\n return Math.max(0, parsedDate - Date.now());\n }\n return null;\n}\n\nfunction computeRetryDelayMs(args: {\n attempt: number;\n status?: number;\n retryAfterMs?: number | null;\n}): number {\n const baseDelay =\n args.status === 429\n ? Math.max(\n args.retryAfterMs ?? 0,\n Math.min(1000 * 2 ** args.attempt, 10_000)\n )\n : Math.min(1000 * 2 ** args.attempt, 4000);\n\n if (args.status !== 429) {\n return baseDelay;\n }\n\n const jitterWindow = Math.max(250, Math.round(baseDelay * 0.25));\n return baseDelay + Math.round(Math.random() * jitterWindow);\n}\n\nfunction timeoutError(timeoutMs: number): Error {\n const error = new Error(`Request timed out after ${timeoutMs}ms`);\n error.name = \"AbortError\";\n return error;\n}\n\nfunction readPolicySummaryFromDetails(details?: JsonValue): string | null {\n if (!details || typeof details !== \"object\" || Array.isArray(details)) {\n return null;\n }\n\n const directSummary = (details as { summary?: JsonValue }).summary;\n if (typeof directSummary === \"string\" && directSummary.trim().length > 0) {\n return directSummary.trim();\n }\n\n const policy = (details as { policy?: JsonValue }).policy;\n if (!policy || typeof policy !== \"object\" || Array.isArray(policy)) {\n return null;\n }\n\n const explanation = (policy as { explanation?: JsonValue }).explanation;\n if (!explanation || typeof explanation !== \"object\" || Array.isArray(explanation)) {\n return null;\n }\n\n const nestedSummary = (explanation as { summary?: JsonValue }).summary;\n if (typeof nestedSummary === \"string\" && nestedSummary.trim().length > 0) {\n return nestedSummary.trim();\n }\n\n return null;\n}\n\nasync function resolveConfiguredAuthContext(\n authContext: GatewayClientConfig[\"authContext\"]\n): Promise<LucernSdkAuthContextInput | undefined> {\n if (typeof authContext === \"function\") {\n return await authContext();\n }\n return authContext;\n}\n\nfunction mergeHeaderRecord(\n base: Record<string, string>,\n addition: Record<string, string>\n): Record<string, string> {\n const headers = new Headers(base);\n for (const [key, value] of Object.entries(addition)) {\n const existing = headers.get(key);\n if (existing !== null && existing !== value) {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n `Canonical Lucern SDK auth context conflicts with existing ${key} header.`\n );\n }\n headers.set(key, value);\n }\n return Object.fromEntries(headers.entries());\n}\n\n/**\n * Create the transport client used by all SDK modules.\n */\nexport function createGatewayRequestClient(config: GatewayClientConfig = {}) {\n const fetchImpl = config.fetchImpl ?? fetch;\n const baseUrl = config.baseUrl?.replace(/\\/+$/, \"\") ?? \"\";\n const maxRetries = config.maxRetries ?? 2;\n const requestIdFactory = config.requestIdFactory ?? (() => generatePortableRequestId());\n\n async function resolveAuthHeaders(): Promise<Record<string, string>> {\n const base = config.getAuthHeaders ? await config.getAuthHeaders() : {};\n const authContextInput = await resolveConfiguredAuthContext(\n config.authContext\n );\n if (!authContextInput && !config.requireCanonicalAuthContext) {\n return base;\n }\n const authContext = normalizeCanonicalLucernAuthContext(authContextInput);\n return mergeHeaderRecord(base, createCanonicalAuthHeaders(authContext));\n }\n\n async function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs: number\n ): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetchImpl(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (controller.signal.aborted) {\n throw timeoutError(timeoutMs);\n }\n throw error;\n } finally {\n clearTimeout(timer);\n }\n }\n\n async function parsePayload<T>(\n response: Response\n ): Promise<PlatformGatewayEnvelope<T> | null> {\n const text = await response.text();\n if (!text) {\n return null;\n }\n try {\n return JSON.parse(text) as PlatformGatewayEnvelope<T>;\n } catch {\n return null;\n }\n }\n\n function resolveTimeoutMs(\n method: GatewayHttpMethod,\n requestTimeoutMs?: number\n ): number {\n if (typeof requestTimeoutMs === \"number\") {\n return requestTimeoutMs;\n }\n const methodTimeoutMs = config.timeoutMsByMethod?.[method];\n if (typeof methodTimeoutMs === \"number\") {\n return methodTimeoutMs;\n }\n return config.timeoutMs ?? 15_000;\n }\n\n function buildApiError(args: {\n requestId: string;\n response: Response;\n failure?: PlatformGatewayFailure | null;\n }): LucernApiError {\n const failure = args.failure;\n const legacyError =\n failure && typeof failure.error === \"object\" && failure.error !== null\n ? failure.error\n : failure?.legacyError;\n const correlationId =\n failure?.correlationId ??\n args.response.headers.get(\"x-lucern-correlation-id\")?.trim() ??\n args.requestId;\n const policyTraceId =\n failure?.policyTraceId ??\n args.response.headers.get(\"x-lucern-policy-trace-id\")?.trim() ??\n null;\n const details = failure?.details ?? legacyError?.details;\n const policySummary = readPolicySummaryFromDetails(details);\n\n return new LucernApiError({\n code: failure?.code ?? legacyError?.code ?? fallbackErrorCode(args.response.status),\n message:\n policySummary ??\n (typeof failure?.error === \"string\"\n ? failure.error\n : legacyError?.message ??\n (args.response.ok\n ? \"Platform API returned an invalid success payload.\"\n : \"Platform API request failed.\")),\n status: args.response.status,\n invariant: failure?.invariant,\n suggestion: failure?.suggestion,\n details,\n requestId: args.requestId,\n correlationId,\n policyTraceId,\n });\n }\n\n async function request<T>(args: {\n path: string;\n method?: GatewayHttpMethod;\n body?: JsonObject;\n idempotencyKey?: string;\n requestId?: string;\n timeoutMs?: number;\n }): Promise<PlatformGatewaySuccess<T>> {\n const authHeaders = await resolveAuthHeaders();\n const method = args.method ?? \"GET\";\n const timeoutMs = resolveTimeoutMs(method, args.timeoutMs);\n const headers = new Headers({\n \"content-type\": \"application/json\",\n ...authHeaders,\n });\n if (args.idempotencyKey) {\n headers.set(\"idempotency-key\", args.idempotencyKey);\n }\n const requestId =\n headers.get(\"x-correlation-id\")?.trim() ||\n headers.get(\"x-request-id\")?.trim() ||\n args.requestId ||\n requestIdFactory();\n if (!headers.has(\"x-correlation-id\") && !headers.has(\"x-request-id\")) {\n headers.set(\"x-correlation-id\", requestId);\n }\n\n const url = `${baseUrl}${args.path}`;\n const serializedBody = args.body ? JSON.stringify(args.body) : undefined;\n const init: RequestInit = {\n method,\n headers,\n body: serializedBody,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const hookRequestContext: GatewayRequestHookContext = {\n requestId,\n attempt,\n maxRetries,\n method,\n path: args.path,\n url,\n headers: new Headers(headers),\n body: serializedBody,\n timeoutMs,\n };\n await config.onRequest?.(hookRequestContext);\n const startedAt = Date.now();\n try {\n const response = await fetchWithTimeout(url, init, timeoutMs);\n const responseClone = response.clone();\n const payload = await parsePayload<T>(response);\n const retryAfterMs = parseRetryAfterMs(\n response.headers.get(\"Retry-After\")\n );\n\n if (!response.ok || !payload?.success) {\n const failure =\n payload && !payload.success ? (payload as PlatformGatewayFailure) : null;\n const apiError = buildApiError({\n requestId,\n response,\n failure,\n });\n const willRetry = attempt < maxRetries && isRetryableStatus(response.status);\n\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n status: response.status,\n response: responseClone,\n error: apiError,\n correlationId: apiError.correlationId ?? requestId,\n policyTraceId: apiError.policyTraceId ?? null,\n retryAfterMs,\n willRetry,\n });\n\n if (willRetry) {\n lastError = apiError;\n await delay(\n computeRetryDelayMs({\n attempt,\n status: response.status,\n retryAfterMs,\n })\n );\n continue;\n }\n\n throw apiError;\n }\n\n const successPayload = payload as PlatformGatewaySuccess<T>;\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n status: response.status,\n response: responseClone,\n correlationId:\n successPayload.correlationId ??\n response.headers.get(\"x-lucern-correlation-id\")?.trim() ??\n requestId,\n policyTraceId:\n successPayload.policyTraceId ??\n response.headers.get(\"x-lucern-policy-trace-id\")?.trim() ??\n null,\n idempotentReplay: successPayload.idempotentReplay,\n retryAfterMs,\n willRetry: false,\n });\n\n return successPayload;\n } catch (fetchError) {\n if (fetchError instanceof LucernApiError) {\n throw fetchError;\n }\n const willRetry = attempt < maxRetries;\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n error: fetchError,\n correlationId: requestId,\n policyTraceId: null,\n willRetry,\n });\n lastError = fetchError;\n if (willRetry) {\n await delay(computeRetryDelayMs({ attempt }));\n }\n }\n }\n\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Platform API request failed after retries.\");\n }\n\n return {\n request,\n };\n}\n","import type { PlatformGatewaySuccess } from \"./coreClient\";\nimport type { JsonObject, ListResult } from \"./types\";\n\ntype TopicScopedValue = {\n topicId?: string;\n};\n\ntype TextScopedValue = {\n text?: string;\n canonicalText?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): AnyRecord {\n return value && typeof value === \"object\" ? (value as AnyRecord) : {};\n}\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeVerificationStatus(value: unknown): string | undefined {\n const status = cleanString(value);\n if (!status) {\n return undefined;\n }\n if (status === \"verified\") {\n return \"human_verified\";\n }\n if (status === \"rejected\") {\n return \"contradicted\";\n }\n return status;\n}\n\nfunction cloneWith<T extends AnyRecord>(value: T, patch: AnyRecord): T {\n return { ...value, ...patch } as T;\n}\n\n/**\n * Resolve the canonical topic identifier.\n */\nexport function resolveTopicId(value: TopicScopedValue): string | undefined {\n return cleanString(value.topicId);\n}\n\n/**\n * Resolve the canonical text field from text-first or legacy canonicalText-first inputs.\n */\nexport function resolveText(value: TextScopedValue): string | undefined {\n return cleanString(value.text) ?? cleanString(value.canonicalText);\n}\n\n/**\n * Attach the topicId to a record.\n */\nexport function withTopicAlias<T extends AnyRecord>(value: T): T {\n const topicId = cleanString(value.topicId) ?? undefined;\n if (!topicId) {\n return value;\n }\n return cloneWith(value, { topicId });\n}\n\n/**\n * Attach the text/canonicalText alias pair to a record.\n */\nexport function withTextAlias<T extends AnyRecord>(value: T): T {\n const text =\n cleanString(value.text) ?? cleanString(value.canonicalText) ?? undefined;\n if (!text) {\n return value;\n }\n return cloneWith(value, { text, canonicalText: text });\n}\n\n/**\n * Attach topic and text aliases to SDK node-like records.\n */\nexport function withSdkAliases<T extends AnyRecord>(value: T): T {\n return withTopicAlias(withTextAlias(value));\n}\n\n/**\n * Normalize a belief/question/evidence write payload to the canonical gateway shape.\n */\nexport function normalizeNodeWriteInput<T extends JsonObject>(value: T): T {\n const topicId = resolveTopicId(value);\n const text = resolveText(value);\n const verificationStatus = normalizeVerificationStatus(value.verificationStatus);\n const next = { ...value } as JsonObject;\n\n if (topicId) {\n next.topicId = topicId;\n }\n if (text) {\n next.text = text;\n next.canonicalText = text;\n }\n if (verificationStatus) {\n next.verificationStatus = verificationStatus;\n }\n\n return next as T;\n}\n\nexport function normalizeNodeVerificationStatus(value: unknown) {\n return normalizeVerificationStatus(value);\n}\n\n/**\n * Build a topic-aware query object.\n */\nexport function normalizeTopicQuery<T extends JsonObject>(value: T): T {\n const topicId = cleanString(value.topicId);\n if (!topicId) {\n return value;\n }\n return { ...value, topicId } as T;\n}\n\n/**\n * Extract list items from array or list-envelope payloads.\n */\nexport function asListItems<T>(data: unknown, legacyKey?: string): T[] {\n if (Array.isArray(data)) {\n return data as T[];\n }\n\n const record = asRecord(data);\n if (Array.isArray(record.items)) {\n return record.items as T[];\n }\n if (legacyKey && Array.isArray(record[legacyKey])) {\n return record[legacyKey] as T[];\n }\n\n return [];\n}\n\n/**\n * Standardize list data to { items, total } while retaining an optional legacy array key.\n */\nexport function createListResult<T, LegacyKey extends string>(\n items: T[],\n legacyKey?: LegacyKey\n): ListResult<T, LegacyKey> {\n const result = {\n items,\n total: items.length,\n } as ListResult<T, LegacyKey>;\n\n if (legacyKey) {\n (result as Record<string, unknown>)[legacyKey] = items;\n }\n\n return result;\n}\n\n/**\n * Map a gateway success envelope's data while preserving the transport metadata.\n */\nexport function mapGatewayData<T, U>(\n response: PlatformGatewaySuccess<T>,\n mapper: (data: T) => U\n): PlatformGatewaySuccess<U> {\n return {\n ...response,\n data: mapper(response.data),\n };\n}\n\n/**\n * Apply SDK aliases across all items in a list-like payload.\n */\nexport function mapAliasedList<\n TItem extends AnyRecord,\n LegacyKey extends string,\n>(\n data: unknown,\n legacyKey?: LegacyKey\n): ListResult<TItem, LegacyKey> {\n const items = asListItems<TItem>(data, legacyKey).map((item) =>\n withSdkAliases(item)\n );\n return createListResult(items, legacyKey);\n}\n","import {\n createGatewayRequestClient,\n type GatewayClientConfig,\n LucernApiError,\n type PlatformGatewaySuccess,\n randomIdempotencyKey,\n} from \"./coreClient\";\nimport {\n type Opinion,\n} from \"./opinion\";\nimport { normalizeNodeWriteInput } from \"./sdkSurface\";\nimport type {\n CreateBeliefResponse,\n ForkBeliefResponse,\n JsonObject,\n ModulateConfidenceResponse,\n} from \"./types\";\n\nexport { LucernApiError };\nexport type { PlatformGatewaySuccess } from \"./coreClient\";\nexport type {\n CreateBeliefResponse,\n ForkBeliefResponse,\n ModulateConfidenceResponse,\n} from \"./types\";\nexport type { Opinion } from \"./opinion\";\n\n/** Configuration for the beliefs client. Inherits gateway transport settings. */\nexport type BeliefsClientConfig = GatewayClientConfig;\n\nexport type OpinionHistoryEntry = {\n t: number;\n b: number;\n d: number;\n u: number;\n a: number;\n P: number;\n trigger: string;\n triggeringRef?: {\n kind: \"evidence\" | \"question\" | \"answer\" | \"contradiction\" | \"worktree\";\n id: string;\n };\n rationale?: string;\n userId?: string;\n slOperator?: string;\n};\n\ntype GatewayRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): GatewayRecord {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as GatewayRecord)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction normalizeOpinionTuple(record: GatewayRecord): {\n b: number;\n d: number;\n u: number;\n a: number;\n} {\n const opinion = asRecord(record.opinion);\n const rawBelief = readNumber(opinion.b) ?? readNumber(record.belief);\n const rawDisbelief = readNumber(opinion.d) ?? readNumber(record.disbelief);\n const rawUncertainty = readNumber(opinion.u) ?? readNumber(record.uncertainty);\n const rawBaseRate = readNumber(opinion.a) ?? readNumber(record.baseRate);\n\n if (\n rawBelief === undefined ||\n rawDisbelief === undefined ||\n rawUncertainty === undefined ||\n rawBaseRate === undefined\n ) {\n throw new Error(\n \"Gateway opinion history entries must include belief, disbelief, uncertainty, and baseRate.\"\n );\n }\n\n return {\n b: clamp01(rawBelief),\n d: clamp01(rawDisbelief),\n u: clamp01(rawUncertainty),\n a: clamp01(rawBaseRate),\n };\n}\n\nexport function mapOpinionHistoryEntriesFromGatewayData(\n payload: GatewayRecord\n): OpinionHistoryEntry[] {\n const entries = Array.isArray(payload.entries) ? payload.entries : [];\n return entries\n .map((value) => {\n const record = asRecord(value);\n const tuple = normalizeOpinionTuple(record);\n const projected =\n readNumber(record.confidence) ?? clamp01(tuple.b + tuple.a * tuple.u);\n const triggeringEvidenceId = readString(record.triggeringEvidenceId);\n const triggeringQuestionId = readString(record.triggeringQuestionId);\n const triggeringAnswerId = readString(record.triggeringAnswerId);\n const triggeringContradictionId = readString(\n record.triggeringContradictionId\n );\n const triggeringWorktreeId = readString(record.triggeringWorktreeId);\n const triggeringRef = triggeringEvidenceId\n ? ({ kind: \"evidence\", id: triggeringEvidenceId } as const)\n : triggeringQuestionId\n ? ({ kind: \"question\", id: triggeringQuestionId } as const)\n : triggeringAnswerId\n ? ({ kind: \"answer\", id: triggeringAnswerId } as const)\n : triggeringContradictionId\n ? ({ kind: \"contradiction\", id: triggeringContradictionId } as const)\n : triggeringWorktreeId\n ? ({ kind: \"worktree\", id: triggeringWorktreeId } as const)\n : undefined;\n const trigger = readString(record.trigger);\n if (!trigger) {\n throw new Error(\"Gateway opinion history entries must include trigger.\");\n }\n\n return {\n t: readNumber(record.timestamp) ?? readNumber(record.assessedAt) ?? 0,\n b: tuple.b,\n d: tuple.d,\n u: tuple.u,\n a: tuple.a,\n P: clamp01(projected),\n trigger,\n ...(triggeringRef ? { triggeringRef } : {}),\n ...(readString(record.rationale)\n ? { rationale: readString(record.rationale)! }\n : {}),\n ...(readString(record.userId) ? { userId: readString(record.userId)! } : {}),\n ...(readString(record.slOperator)\n ? { slOperator: readString(record.slOperator)! }\n : {}),\n };\n })\n .sort((left, right) => left.t - right.t);\n}\n\n/**\n * Input for creating a new belief within a topic scope.\n *\n * Use `text` as the canonical belief statement.\n * `canonicalText` remains available as a legacy alias for backwards compatibility.\n * Beliefs start as drafts with a vacuous prior `(0, 0, 1, a)`. When omitted,\n * `baseRate` defaults to the canonical neutral prior `0.5`.\n */\nexport type CreateBeliefInput = {\n topicId?: string;\n /** Preferred belief statement alias. */\n text?: string;\n /** @deprecated Use text. */\n canonicalText?: string;\n layer?: \"L1\" | \"L2\" | \"L3\" | \"L4\";\n domain?: string;\n sourceType?: \"human\" | \"ai\" | \"agent\" | \"imported\";\n content?: string;\n contentHash?: string;\n globalId?: string;\n title?: string;\n subtype?: string;\n confidence?: number;\n baseRate?: number;\n tags?: string[];\n metadata?: JsonObject;\n verificationStatus?: \"unverified\" | \"verified\" | \"rejected\";\n};\n\n/**\n * Input for refining an existing draft belief.\n *\n * Use `text` as the canonical belief statement.\n * `canonicalText` remains available as a legacy alias for backwards compatibility.\n */\nexport type RefineBeliefInput = {\n /** Preferred belief statement alias. */\n text?: string;\n /** @deprecated Use text. */\n canonicalText?: string;\n rationale?: string;\n title?: string;\n};\n\ntype BeliefConfidenceTrigger =\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n | \"fusion\"\n | \"discount\"\n | \"deduction\";\n\ntype ModulateConfidenceInputBase = {\n trigger: BeliefConfidenceTrigger;\n rationale: string;\n triggeringEvidenceId?: string;\n triggeringQuestionId?: string;\n triggeringAnswerId?: string;\n triggeringContradictionId?: string;\n triggeringWorktreeId?: string;\n maxInlinePropagationTargets?: number;\n};\n\n/**\n * Record an append-only confidence change using an explicit subjective-logic\n * opinion tuple.\n */\nexport type ModulateConfidenceOpinionInput = ModulateConfidenceInputBase & {\n opinion: Opinion;\n};\n\nexport type ModulateConfidenceInput = ModulateConfidenceOpinionInput;\n\nfunction normalizeModulateConfidenceInput(\n input: ModulateConfidenceInput\n): JsonObject {\n const opinion = input.opinion;\n\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: input.trigger,\n rationale: input.rationale,\n triggeringEvidenceId: input.triggeringEvidenceId,\n triggeringQuestionId: input.triggeringQuestionId,\n triggeringAnswerId: input.triggeringAnswerId,\n triggeringContradictionId: input.triggeringContradictionId,\n triggeringWorktreeId: input.triggeringWorktreeId,\n maxInlinePropagationTargets: input.maxInlinePropagationTargets,\n };\n}\n\n/**\n * Input for forking a scored belief into a new formulation.\n * Scored beliefs are immutable — fork to evolve understanding.\n */\nexport type ForkBeliefInput = {\n newFormulation: string;\n forkReason?:\n | \"refinement\"\n | \"contradiction_response\"\n | \"scope_change\"\n | \"confidence_collapse\"\n | \"manual\";\n rationale?: string;\n};\n\n/** Input for changing a belief's lifecycle status. */\nexport type UpdateBeliefStatusInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n status: \"active\" | \"superseded\" | \"archived\";\n reason?: string;\n};\n\n/** Input for updating a belief's rationale without refining its text. */\nexport type UpdateBeliefRationaleInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n rationale?: string;\n};\n\n/** Input for creating a belief-to-belief reasoning edge. */\nexport type LinkBeliefsInput = {\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n};\n\n/** Input for unlinking a belief from an attached evidence item. */\nexport type UnlinkBeliefEvidenceInput = {\n beliefNodeId?: string;\n beliefId?: string;\n nodeId?: string;\n insightId?: string;\n evidenceId?: string;\n};\n\n/** Input for updating a belief's criticality classification. */\nexport type UpdateBeliefCriticalityInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n};\n\n/** Input for bulk-updating multiple beliefs' criticality. */\nexport type BatchUpdateBeliefCriticalityInput = {\n updates: Array<{\n beliefId: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n ifFalseImpact?: string;\n triagePriority?: number;\n reasoning?: string;\n dependentBeliefIds?: string[];\n blockedByBeliefIds?: string[];\n }>;\n};\n\n/** Input for moving beliefs into a different topic scope. */\nexport type ReassignBeliefsTopicInput = {\n beliefNodeIds?: string[];\n beliefIds?: string[];\n targetTopicId: string;\n reason?: string;\n};\n\n/**\n * Create the beliefs client for belief lifecycle operations.\n *\n * @param config - Gateway transport configuration.\n * @returns An object with `createBelief`, `refineBelief`, `modulateConfidence`, and `forkBelief` methods.\n */\nexport function createBeliefsClient(config: BeliefsClientConfig = {}) {\n const gateway = createGatewayRequestClient(config);\n\n function normalizeBaseRate(value: unknown): number {\n const baseRate = readNumber(value);\n const normalized = baseRate ?? 0.5;\n if (normalized < 0 || normalized > 1) {\n throw new Error(\"baseRate must be within [0, 1].\");\n }\n return normalized;\n }\n const modulateConfidence: {\n (\n beliefId: string,\n input: ModulateConfidenceOpinionInput,\n idempotencyKey?: string\n ): Promise<PlatformGatewaySuccess<ModulateConfidenceResponse>>;\n } = async (\n beliefId: string,\n input: ModulateConfidenceInput,\n idempotencyKey?: string\n ) =>\n gateway.request<ModulateConfidenceResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence`,\n method: \"POST\",\n body: normalizeModulateConfidenceInput(input),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n\n async function getOpinionHistory(\n beliefId: string\n ): Promise<OpinionHistoryEntry[]> {\n const response = await gateway.request<GatewayRecord>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence-history`,\n });\n return mapOpinionHistoryEntriesFromGatewayData(response.data);\n }\n\n return {\n /**\n * Create a belief within a topic scope.\n */\n async createBelief(input: CreateBeliefInput, idempotencyKey?: string) {\n const baseRate = normalizeBaseRate(input.baseRate);\n return gateway.request<CreateBeliefResponse>({\n path: \"/api/platform/v1/beliefs\",\n method: \"POST\",\n body: {\n ...(normalizeNodeWriteInput(input) as JsonObject),\n baseRate,\n },\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Refine a draft belief in place.\n */\n async refineBelief(\n beliefId: string,\n input: RefineBeliefInput,\n idempotencyKey?: string\n ) {\n return gateway.request<CreateBeliefResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}`,\n method: \"PATCH\",\n body: normalizeNodeWriteInput(input as JsonObject),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Record a confidence change for an existing belief.\n */\n modulateConfidence,\n\n /**\n * Returns the belief's confidence trajectory as a chronological array.\n *\n * Canonical UI trend shape (what every trend component consumes):\n * { t: number, b: number, d: number, u: number, a: number, P: number, trigger: string, triggeringRef?: { kind: \"evidence\" | \"worktree\"; id: string } }[]\n *\n * Where:\n * t = assessedAt (epoch ms)\n * b, d, u, a = Opinion 4-tuple components\n * P = projected probability = b + a*u (precomputed for UI convenience)\n * trigger = cause of the score change\n * triggeringRef = optional pointer to the evidence or worktree that drove the change\n */\n async getOpinionHistory(beliefId: string): Promise<OpinionHistoryEntry[]> {\n return getOpinionHistory(beliefId);\n },\n\n /** @deprecated Use getOpinionHistory(). */\n async getConfidenceHistory(\n beliefId: string\n ): Promise<OpinionHistoryEntry[]> {\n return getOpinionHistory(beliefId);\n },\n\n /**\n * Fork a scored belief into a new formulation.\n */\n async forkBelief(\n beliefId: string,\n input: ForkBeliefInput,\n idempotencyKey?: string\n ) {\n return gateway.request<ForkBeliefResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/fork`,\n method: \"POST\",\n body: input,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's lifecycle status.\n */\n async updateBeliefStatus(\n input: UpdateBeliefStatusInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-status\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's rationale without changing its text.\n */\n async updateBeliefRationale(\n input: UpdateBeliefRationaleInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-rationale\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Create a typed relationship between two beliefs.\n */\n async linkBeliefs(input: LinkBeliefsInput, idempotencyKey?: string) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/link\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Remove an evidence attachment from a belief.\n */\n async unlinkBeliefEvidence(\n input: UnlinkBeliefEvidenceInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/unlink-evidence\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's criticality metadata.\n */\n async updateBeliefCriticality(\n input: UpdateBeliefCriticalityInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-criticality\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update multiple beliefs' criticality in one mutation.\n */\n async batchUpdateBeliefCriticality(\n input: BatchUpdateBeliefCriticalityInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/batch-update-criticality\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Reassign beliefs to a different topic scope.\n */\n async reassignBeliefsTopic(\n input: ReassignBeliefsTopicInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/reassign-topic\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/authContext.ts","../src/coreClient.ts","../src/sdkSurface.ts","../src/beliefsClient.ts"],"names":["cleanString"],"mappings":"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","file":"beliefsClient.js","sourcesContent":["import type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./contracts/auth-session.contract\";\nimport type { JsonObject } from \"./types\";\n\nexport type LucernSdkAuthFailureReason =\n | \"principal_missing\"\n | \"tenant_missing\"\n | \"membership_missing\"\n | \"workspace_missing\"\n | \"policy_denied\";\n\nexport type PermitReadyAuthContext = {\n subject: string;\n tenant: string;\n workspace: string;\n resource?: string;\n action?: string;\n relation?: string;\n context?: JsonObject;\n};\n\nexport type LucernSdkAuthPolicyDecision = \"allow\" | \"deny\" | \"unknown\";\n\nexport type LucernSdkAuthContextInput = {\n clerkId?: string;\n principalId?: string;\n tenantId?: string;\n workspaceId?: string;\n principalType?: SessionPrincipalType;\n authMode?: SessionAuthMode;\n roles?: readonly string[];\n scopes?: readonly string[];\n delegationChain?: readonly SessionDelegationHop[];\n policyTraceId?: string;\n correlationId?: string;\n membershipId?: string;\n policyDecision?: LucernSdkAuthPolicyDecision;\n permit?: Partial<PermitReadyAuthContext>;\n};\n\nexport type CanonicalLucernSdkAuthContext = {\n clerkId?: string;\n principalId: string;\n tenantId: string;\n workspaceId: string;\n principalType: SessionPrincipalType;\n authMode: SessionAuthMode;\n roles: string[];\n scopes: string[];\n delegationChain: SessionDelegationHop[];\n policyTraceId?: string;\n correlationId?: string;\n membershipId?: string;\n permit: PermitReadyAuthContext;\n};\n\nexport class LucernSdkAuthContextError extends Error {\n readonly reason: LucernSdkAuthFailureReason;\n\n constructor(reason: LucernSdkAuthFailureReason, message: string) {\n super(message);\n this.name = \"LucernSdkAuthContextError\";\n this.reason = reason;\n }\n}\n\nfunction cleanString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized ? normalized : undefined;\n}\n\nfunction cleanStringList(values: readonly string[] | undefined): string[] {\n if (!values) {\n return [];\n }\n return values\n .map((value) => value.trim())\n .filter(\n (value, index, list) =>\n value.length > 0 && list.indexOf(value) === index\n );\n}\n\nfunction requireString(\n value: string | undefined,\n reason: LucernSdkAuthFailureReason,\n label: string\n): string {\n const normalized = cleanString(value);\n if (!normalized) {\n throw new LucernSdkAuthContextError(\n reason,\n `Canonical Lucern SDK auth context is missing ${label}.`\n );\n }\n return normalized;\n}\n\nfunction requirePrincipalType(\n principalType: SessionPrincipalType | undefined\n): SessionPrincipalType {\n if (!principalType) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is missing principalType.\"\n );\n }\n return principalType;\n}\n\nfunction requireAuthMode(authMode: SessionAuthMode | undefined): SessionAuthMode {\n if (!authMode) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is missing authMode.\"\n );\n }\n return authMode;\n}\n\nfunction ensurePermitMatch(args: {\n field: keyof PermitReadyAuthContext;\n expected: string;\n actual?: string;\n}) {\n const actual = cleanString(args.actual);\n if (actual && actual !== args.expected) {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n `Canonical Lucern SDK auth context has conflicting Permit ${args.field}.`\n );\n }\n}\n\nexport function normalizeCanonicalLucernAuthContext(\n input: LucernSdkAuthContextInput | undefined\n): CanonicalLucernSdkAuthContext {\n if (!input) {\n throw new LucernSdkAuthContextError(\n \"principal_missing\",\n \"Canonical Lucern SDK auth context is required.\"\n );\n }\n\n if (input.policyDecision === \"deny\") {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n \"Canonical Lucern SDK auth context carries a denied policy decision.\"\n );\n }\n\n const principalId = requireString(\n input.principalId,\n \"principal_missing\",\n \"principalId\"\n );\n const tenantId = requireString(input.tenantId, \"tenant_missing\", \"tenantId\");\n const workspaceId = requireString(\n input.workspaceId,\n \"workspace_missing\",\n \"workspaceId\"\n );\n const roles = cleanStringList(input.roles);\n const scopes = cleanStringList(input.scopes);\n const principalType = requirePrincipalType(input.principalType);\n const authMode = requireAuthMode(input.authMode);\n const roleBasedInteractiveAuth =\n authMode === \"interactive_user\" && roles.length > 0;\n if (\n roles.length === 0 ||\n (scopes.length === 0 && !roleBasedInteractiveAuth)\n ) {\n throw new LucernSdkAuthContextError(\n \"membership_missing\",\n \"Canonical Lucern SDK auth context requires non-empty roles and scopes.\"\n );\n }\n\n const subject = cleanString(input.permit?.subject) ?? principalId;\n const tenant = cleanString(input.permit?.tenant) ?? tenantId;\n const workspace = cleanString(input.permit?.workspace) ?? workspaceId;\n\n ensurePermitMatch({\n field: \"subject\",\n expected: principalId,\n actual: subject,\n });\n ensurePermitMatch({ field: \"tenant\", expected: tenantId, actual: tenant });\n ensurePermitMatch({\n field: \"workspace\",\n expected: workspaceId,\n actual: workspace,\n });\n\n const context = input.permit?.context\n ? ({ ...input.permit.context } as JsonObject)\n : undefined;\n\n return {\n clerkId: cleanString(input.clerkId),\n principalId,\n tenantId,\n workspaceId,\n principalType,\n authMode,\n roles,\n scopes,\n delegationChain: input.delegationChain ? [...input.delegationChain] : [],\n policyTraceId: cleanString(input.policyTraceId),\n correlationId: cleanString(input.correlationId),\n membershipId: cleanString(input.membershipId),\n permit: {\n subject,\n tenant,\n workspace,\n resource: cleanString(input.permit?.resource),\n action: cleanString(input.permit?.action),\n relation: cleanString(input.permit?.relation),\n context,\n },\n };\n}\n\nexport function createCanonicalAuthHeaders(\n authContext: CanonicalLucernSdkAuthContext\n): Record<string, string> {\n const headers: Record<string, string> = {\n \"x-lucern-principal-id\": authContext.principalId,\n \"x-lucern-principal-type\": authContext.principalType,\n \"x-lucern-tenant\": authContext.tenantId,\n \"x-lucern-tenant-id\": authContext.tenantId,\n \"x-lucern-workspace\": authContext.workspaceId,\n \"x-lucern-workspace-id\": authContext.workspaceId,\n \"x-lucern-auth-mode\": authContext.authMode,\n \"x-lucern-roles\": authContext.roles.join(\",\"),\n \"x-lucern-scopes\": authContext.scopes.join(\",\"),\n \"x-lucern-permit-context\": JSON.stringify(authContext.permit),\n };\n\n if (authContext.clerkId) {\n headers[\"x-lucern-clerk-id\"] = authContext.clerkId;\n headers[\"x-lucern-user-id\"] = authContext.clerkId;\n }\n if (authContext.delegationChain.length > 0) {\n headers[\"x-lucern-delegation-chain\"] = JSON.stringify(\n authContext.delegationChain\n );\n }\n if (authContext.policyTraceId) {\n headers[\"x-lucern-policy-trace-id\"] = authContext.policyTraceId;\n }\n if (authContext.correlationId) {\n headers[\"x-correlation-id\"] = authContext.correlationId;\n headers[\"x-lucern-correlation-id\"] = authContext.correlationId;\n }\n if (authContext.membershipId) {\n headers[\"x-lucern-membership-id\"] = authContext.membershipId;\n }\n\n return headers;\n}\n","import {\n createCanonicalAuthHeaders,\n LucernSdkAuthContextError,\n normalizeCanonicalLucernAuthContext,\n type LucernSdkAuthContextInput,\n} from \"./authContext\";\nimport type { JsonObject, JsonValue } from \"./types\";\n\n/** Tenant and workspace identifiers used to scope gateway requests. */\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\n/** Successful response envelope from the platform gateway with correlation metadata. */\nexport type PlatformGatewaySuccess<T> = {\n success: true;\n data: T;\n correlationId: string;\n policyTraceId: string | null;\n idempotentReplay: boolean;\n};\n\n/** Failed response envelope with structured error codes and optional invariant references. */\nexport type PlatformGatewayFailure = {\n success: false;\n /**\n * Error string is the canonical envelope field.\n * Object form is legacy-only compatibility for older gateway responses.\n */\n error:\n | string\n | {\n code: string;\n message: string;\n details?: JsonValue;\n };\n code?: string;\n invariant?: string | null;\n suggestion?: string | null;\n details?: JsonValue;\n legacyError?: {\n code: string;\n message: string;\n details?: JsonValue;\n };\n correlationId: string;\n policyTraceId: string | null;\n};\n\n/** Discriminated union of success and failure gateway responses. */\nexport type PlatformGatewayEnvelope<T> =\n | PlatformGatewaySuccess<T>\n | PlatformGatewayFailure;\n\n/**\n * Structured error thrown when a platform API request fails.\n *\n * Includes HTTP status, machine-readable error code, optional invariant\n * reference, and actionable suggestions for common failure modes.\n */\nexport class LucernApiError extends Error {\n public readonly code: string;\n public readonly status: number;\n public readonly invariant?: string | null;\n public readonly suggestion?: string | null;\n public readonly details?: JsonValue;\n public readonly requestId?: string;\n public readonly correlationId?: string;\n public readonly policyTraceId?: string | null;\n\n constructor(args: {\n code: string;\n message: string;\n status: number;\n invariant?: string | null;\n suggestion?: string | null;\n details?: JsonValue;\n requestId?: string;\n correlationId?: string;\n policyTraceId?: string | null;\n }) {\n super(args.message);\n this.name = \"LucernApiError\";\n this.code = args.code;\n this.status = args.status;\n this.invariant = args.invariant;\n this.suggestion = args.suggestion;\n this.details = args.details;\n this.requestId = args.requestId;\n this.correlationId = args.correlationId;\n this.policyTraceId = args.policyTraceId;\n }\n}\n\n/** Supported HTTP methods for gateway requests. */\nexport type GatewayHttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\ntype FetchLike = (\n input: RequestInfo | URL,\n init?: RequestInit\n) => Promise<Response>;\n\ntype JsonParseAttempt =\n | { ok: true; value: unknown }\n | { ok: false; reason: \"non-json\" | \"invalid-json\"; error?: SyntaxError };\n\n/** Context passed to the `onRequest` hook before each gateway request attempt. */\nexport type GatewayRequestHookContext = {\n requestId: string;\n attempt: number;\n maxRetries: number;\n method: GatewayHttpMethod;\n path: string;\n url: string;\n headers: Headers;\n body?: string;\n timeoutMs: number;\n};\n\n/** Context passed to the `onResponse` hook after each gateway request attempt (including retries and failures). */\nexport type GatewayResponseHookContext = GatewayRequestHookContext & {\n durationMs: number;\n status?: number;\n response?: Response;\n error?: unknown;\n correlationId?: string;\n policyTraceId?: string | null;\n idempotentReplay?: boolean;\n retryAfterMs?: number | null;\n willRetry: boolean;\n};\n\n/**\n * Low-level transport configuration for the platform gateway client.\n *\n * Most developers should use {@link createLucernClient} instead, which wraps\n * this config with higher-level conveniences like `apiKey` and `environment`.\n */\nexport type GatewayClientConfig = {\n baseUrl?: string;\n fetchImpl?: FetchLike;\n getAuthHeaders?:\n | (() => Promise<Record<string, string>>)\n | (() => Record<string, string>);\n /**\n * Canonical Master Control identity tuple applied to every SDK request.\n * Use this for tenant/workspace-scoped graph and identity operations.\n */\n authContext?:\n | LucernSdkAuthContextInput\n | (() => Promise<LucernSdkAuthContextInput | undefined>)\n | (() => LucernSdkAuthContextInput | undefined);\n /** When true, requests fail before fetch if `authContext` is absent. */\n requireCanonicalAuthContext?: boolean;\n /** Max retries for transient errors (5xx, network). Defaults to 2. */\n maxRetries?: number;\n /** Request timeout in ms. Defaults to 15000. */\n timeoutMs?: number;\n /** Optional timeout overrides by HTTP method. */\n timeoutMsByMethod?: Partial<Record<GatewayHttpMethod, number>>;\n /** Optional request ID factory used for correlation headers. */\n requestIdFactory?: () => string;\n /** Invoked before each request attempt, including retries. */\n onRequest?:\n | ((context: GatewayRequestHookContext) => void)\n | ((context: GatewayRequestHookContext) => Promise<void>);\n /** Invoked after each request attempt, including retries and failures. */\n onResponse?:\n | ((context: GatewayResponseHookContext) => void)\n | ((context: GatewayResponseHookContext) => Promise<void>);\n};\n\n/**\n * Serialize a gateway query object into a URL query string.\n */\nexport function toQueryString(\n scope: GatewayScope & Record<string, string | number | boolean | undefined>\n): string {\n const params = new URLSearchParams();\n if (scope.tenantId) {\n params.set(\"tenantId\", scope.tenantId);\n }\n if (scope.workspaceId) {\n params.set(\"workspaceId\", scope.workspaceId);\n }\n for (const [key, value] of Object.entries(scope)) {\n if (key === \"tenantId\" || key === \"workspaceId\") {\n continue;\n }\n if (value === undefined) {\n continue;\n }\n params.set(key, String(value));\n }\n const serialized = params.toString();\n return serialized.length > 0 ? `?${serialized}` : \"\";\n}\n\nfunction fillRandomBytes(length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n if (typeof globalThis.crypto?.getRandomValues === \"function\") {\n globalThis.crypto.getRandomValues(bytes);\n return bytes;\n }\n\n for (let index = 0; index < length; index += 1) {\n bytes[index] = Math.floor(Math.random() * 256);\n }\n return bytes;\n}\n\nfunction generatePortableRequestId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n\n const bytes = fillRandomBytes(16);\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (value) => value.toString(16).padStart(2, \"0\"));\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(\n 6,\n 8\n ).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10).join(\"\")}`;\n}\n\n/**\n * Generate a random idempotency key for retry-safe writes.\n */\nexport const randomIdempotencyKey = generatePortableRequestId;\n\nfunction isRetryableStatus(status: number): boolean {\n return status >= 500 || status === 408 || status === 429;\n}\n\nfunction fallbackErrorCode(status: number): string {\n if (status === 401) {\n return \"AUTHENTICATION_REQUIRED\";\n }\n if (status === 403) {\n return \"FORBIDDEN\";\n }\n if (status === 404) {\n return \"NOT_FOUND\";\n }\n if (status === 408) {\n return \"UPSTREAM_ERROR\";\n }\n if (status === 409) {\n return \"CONFLICT\";\n }\n if (status === 429) {\n return \"RATE_LIMIT_EXCEEDED\";\n }\n if (status >= 500) {\n return \"UPSTREAM_ERROR\";\n }\n return \"INTERNAL_ERROR\";\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseRetryAfterMs(value: string | null): number | null {\n if (!value) {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const numeric = Number(trimmed);\n if (Number.isFinite(numeric)) {\n return Math.max(0, Math.round(numeric * 1000));\n }\n const parsedDate = Date.parse(trimmed);\n if (Number.isFinite(parsedDate)) {\n return Math.max(0, parsedDate - Date.now());\n }\n return null;\n}\n\nfunction computeRetryDelayMs(args: {\n attempt: number;\n status?: number;\n retryAfterMs?: number | null;\n}): number {\n const baseDelay =\n args.status === 429\n ? Math.max(\n args.retryAfterMs ?? 0,\n Math.min(1000 * 2 ** args.attempt, 10_000)\n )\n : Math.min(1000 * 2 ** args.attempt, 4000);\n\n if (args.status !== 429) {\n return baseDelay;\n }\n\n const jitterWindow = Math.max(250, Math.round(baseDelay * 0.25));\n return baseDelay + Math.round(Math.random() * jitterWindow);\n}\n\nfunction timeoutError(timeoutMs: number): Error {\n const error = new Error(`Request timed out after ${timeoutMs}ms`);\n error.name = \"AbortError\";\n return error;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readPolicySummaryFromDetails(details?: JsonValue): string | null {\n if (!isRecord(details)) {\n return null;\n }\n\n const directSummary = details.summary;\n if (typeof directSummary === \"string\" && directSummary.trim().length > 0) {\n return directSummary.trim();\n }\n\n const policy = details.policy;\n if (!isRecord(policy)) {\n return null;\n }\n\n const explanation = policy.explanation;\n if (!isRecord(explanation)) {\n return null;\n }\n\n const nestedSummary = explanation.summary;\n if (typeof nestedSummary === \"string\" && nestedSummary.trim().length > 0) {\n return nestedSummary.trim();\n }\n\n return null;\n}\n\nasync function resolveConfiguredAuthContext(\n authContext: GatewayClientConfig[\"authContext\"]\n): Promise<LucernSdkAuthContextInput | undefined> {\n if (typeof authContext === \"function\") {\n return await authContext();\n }\n return authContext;\n}\n\nfunction mergeHeaderRecord(\n base: Record<string, string>,\n addition: Record<string, string>\n): Record<string, string> {\n const headers = new Headers(base);\n for (const [key, value] of Object.entries(addition)) {\n const existing = headers.get(key);\n if (existing !== null && existing !== value) {\n throw new LucernSdkAuthContextError(\n \"policy_denied\",\n `Canonical Lucern SDK auth context conflicts with existing ${key} header.`\n );\n }\n headers.set(key, value);\n }\n return Object.fromEntries(headers.entries());\n}\n\n/**\n * Create the transport client used by all SDK modules.\n */\nexport function createGatewayRequestClient(config: GatewayClientConfig = {}) {\n const fetchImpl = config.fetchImpl ?? fetch;\n const baseUrl = config.baseUrl?.replace(/\\/+$/, \"\") ?? \"\";\n const maxRetries = config.maxRetries ?? 2;\n const requestIdFactory = config.requestIdFactory ?? (() => generatePortableRequestId());\n\n async function resolveAuthHeaders(): Promise<Record<string, string>> {\n const base = config.getAuthHeaders ? await config.getAuthHeaders() : {};\n const authContextInput = await resolveConfiguredAuthContext(\n config.authContext\n );\n if (!authContextInput && !config.requireCanonicalAuthContext) {\n return base;\n }\n const authContext = normalizeCanonicalLucernAuthContext(authContextInput);\n return mergeHeaderRecord(base, createCanonicalAuthHeaders(authContext));\n }\n\n async function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs: number\n ): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetchImpl(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (controller.signal.aborted) {\n throw timeoutError(timeoutMs);\n }\n throw error;\n } finally {\n clearTimeout(timer);\n }\n }\n\n async function parsePayload<T>(\n response: Response\n ): Promise<PlatformGatewayEnvelope<T> | null> {\n const text = await response.text();\n if (!text) {\n return null;\n }\n const parsed = tryParseGatewayEnvelopeJson(text);\n if (!parsed.ok) {\n return null;\n }\n return isRecord(parsed.value)\n ? (parsed.value as PlatformGatewayEnvelope<T>)\n : null;\n }\n\n function resolveTimeoutMs(\n method: GatewayHttpMethod,\n requestTimeoutMs?: number\n ): number {\n if (typeof requestTimeoutMs === \"number\") {\n return requestTimeoutMs;\n }\n const methodTimeoutMs = config.timeoutMsByMethod?.[method];\n if (typeof methodTimeoutMs === \"number\") {\n return methodTimeoutMs;\n }\n return config.timeoutMs ?? 15_000;\n }\n\n function tryParseGatewayEnvelopeJson(text: string): JsonParseAttempt {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) {\n return { ok: false, reason: \"non-json\" };\n }\n try {\n return { ok: true, value: JSON.parse(trimmed) };\n } catch (error) {\n if (error instanceof SyntaxError) {\n return { ok: false, reason: \"invalid-json\", error };\n }\n throw error;\n }\n }\n\n function buildApiError(args: {\n requestId: string;\n response: Response;\n failure?: PlatformGatewayFailure | null;\n }): LucernApiError {\n const failure = args.failure;\n const legacyError =\n failure && isRecord(failure.error) ? failure.error : failure?.legacyError;\n const correlationId =\n failure?.correlationId ??\n args.response.headers.get(\"x-lucern-correlation-id\")?.trim() ??\n args.requestId;\n const policyTraceId =\n failure?.policyTraceId ??\n args.response.headers.get(\"x-lucern-policy-trace-id\")?.trim() ??\n null;\n const details = failure?.details ?? legacyError?.details;\n const policySummary = readPolicySummaryFromDetails(details);\n const failureMessage =\n typeof failure?.error === \"string\"\n ? failure.error\n : legacyError?.message;\n\n return new LucernApiError({\n code:\n failure?.code ??\n legacyError?.code ??\n fallbackErrorCode(args.response.status),\n message:\n policySummary ??\n failureMessage ??\n (args.response.ok\n ? \"Platform API returned an invalid success payload.\"\n : \"Platform API request failed.\"),\n status: args.response.status,\n invariant: failure?.invariant,\n suggestion: failure?.suggestion,\n details,\n requestId: args.requestId,\n correlationId,\n policyTraceId,\n });\n }\n\n async function request<T>(args: {\n path: string;\n method?: GatewayHttpMethod;\n body?: JsonObject;\n idempotencyKey?: string;\n requestId?: string;\n timeoutMs?: number;\n }): Promise<PlatformGatewaySuccess<T>> {\n const authHeaders = await resolveAuthHeaders();\n const method = args.method ?? \"GET\";\n const timeoutMs = resolveTimeoutMs(method, args.timeoutMs);\n const headers = new Headers({\n \"content-type\": \"application/json\",\n ...authHeaders,\n });\n if (args.idempotencyKey) {\n headers.set(\"idempotency-key\", args.idempotencyKey);\n }\n const requestId =\n headers.get(\"x-correlation-id\")?.trim() ||\n headers.get(\"x-request-id\")?.trim() ||\n args.requestId ||\n requestIdFactory();\n if (!headers.has(\"x-correlation-id\") && !headers.has(\"x-request-id\")) {\n headers.set(\"x-correlation-id\", requestId);\n }\n\n const url = `${baseUrl}${args.path}`;\n const serializedBody = args.body ? JSON.stringify(args.body) : undefined;\n const init: RequestInit = {\n method,\n headers,\n body: serializedBody,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const hookRequestContext: GatewayRequestHookContext = {\n requestId,\n attempt,\n maxRetries,\n method,\n path: args.path,\n url,\n headers: new Headers(headers),\n body: serializedBody,\n timeoutMs,\n };\n await config.onRequest?.(hookRequestContext);\n const startedAt = Date.now();\n try {\n const response = await fetchWithTimeout(url, init, timeoutMs);\n const responseClone = response.clone();\n const payload = await parsePayload<T>(response);\n const retryAfterMs = parseRetryAfterMs(\n response.headers.get(\"Retry-After\")\n );\n\n if (!response.ok || !payload?.success) {\n const failure =\n payload && !payload.success ? (payload as PlatformGatewayFailure) : null;\n const apiError = buildApiError({\n requestId,\n response,\n failure,\n });\n const willRetry = attempt < maxRetries && isRetryableStatus(response.status);\n\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n status: response.status,\n response: responseClone,\n error: apiError,\n correlationId: apiError.correlationId ?? requestId,\n policyTraceId: apiError.policyTraceId ?? null,\n retryAfterMs,\n willRetry,\n });\n\n if (willRetry) {\n lastError = apiError;\n await delay(\n computeRetryDelayMs({\n attempt,\n status: response.status,\n retryAfterMs,\n })\n );\n continue;\n }\n\n throw apiError;\n }\n\n const successPayload = payload as PlatformGatewaySuccess<T>;\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n status: response.status,\n response: responseClone,\n correlationId:\n successPayload.correlationId ??\n response.headers.get(\"x-lucern-correlation-id\")?.trim() ??\n requestId,\n policyTraceId:\n successPayload.policyTraceId ??\n response.headers.get(\"x-lucern-policy-trace-id\")?.trim() ??\n null,\n idempotentReplay: successPayload.idempotentReplay,\n retryAfterMs,\n willRetry: false,\n });\n\n return successPayload;\n } catch (fetchError) {\n if (fetchError instanceof LucernApiError) {\n throw fetchError;\n }\n const willRetry = attempt < maxRetries;\n await config.onResponse?.({\n ...hookRequestContext,\n durationMs: Date.now() - startedAt,\n error: fetchError,\n correlationId: requestId,\n policyTraceId: null,\n willRetry,\n });\n lastError = fetchError;\n if (willRetry) {\n await delay(computeRetryDelayMs({ attempt }));\n }\n }\n }\n\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Platform API request failed after retries.\");\n }\n\n return {\n request,\n };\n}\n","import type { PlatformGatewaySuccess } from \"./coreClient\";\nimport type { JsonObject, ListResult } from \"./types\";\n\ntype TopicScopedValue = {\n topicId?: string;\n};\n\ntype TextScopedValue = {\n text?: string;\n canonicalText?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is AnyRecord {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): AnyRecord {\n return isRecord(value) ? value : {};\n}\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeVerificationStatus(value: unknown): string | undefined {\n const status = cleanString(value);\n if (!status) {\n return undefined;\n }\n if (status === \"verified\") {\n return \"human_verified\";\n }\n if (status === \"rejected\") {\n return \"contradicted\";\n }\n return status;\n}\n\nfunction cloneWith<T extends AnyRecord>(value: T, patch: AnyRecord): T {\n return { ...value, ...patch } as T;\n}\n\n/**\n * Resolve the canonical topic identifier.\n */\nexport function resolveTopicId(value: TopicScopedValue): string | undefined {\n return cleanString(value.topicId);\n}\n\n/**\n * Resolve the canonical text field from text-first or legacy canonicalText-first inputs.\n */\nexport function resolveText(value: TextScopedValue): string | undefined {\n return cleanString(value.text) ?? cleanString(value.canonicalText);\n}\n\n/**\n * Attach the topicId to a record.\n */\nexport function withTopicAlias<T extends AnyRecord>(value: T): T {\n const topicId = cleanString(value.topicId) ?? undefined;\n if (!topicId) {\n return value;\n }\n return cloneWith(value, { topicId });\n}\n\n/**\n * Attach the text/canonicalText alias pair to a record.\n */\nexport function withTextAlias<T extends AnyRecord>(value: T): T {\n const text =\n cleanString(value.text) ?? cleanString(value.canonicalText) ?? undefined;\n if (!text) {\n return value;\n }\n return cloneWith(value, { text, canonicalText: text });\n}\n\n/**\n * Attach topic and text aliases to SDK node-like records.\n */\nexport function withSdkAliases<T extends AnyRecord>(value: T): T {\n return withTopicAlias(withTextAlias(value));\n}\n\n/**\n * Normalize a belief/question/evidence write payload to the canonical gateway shape.\n */\nexport function normalizeNodeWriteInput<T extends JsonObject>(value: T): T {\n const topicId = resolveTopicId(value);\n const text = resolveText(value);\n const verificationStatus = normalizeVerificationStatus(value.verificationStatus);\n const next = { ...value } as JsonObject;\n\n if (topicId) {\n next.topicId = topicId;\n }\n if (text) {\n next.text = text;\n next.canonicalText = text;\n }\n if (verificationStatus) {\n next.verificationStatus = verificationStatus;\n }\n\n return next as T;\n}\n\nexport const normalizeNodeVerificationStatus = normalizeVerificationStatus;\n\n/**\n * Build a topic-aware query object.\n */\nexport function normalizeTopicQuery<T extends JsonObject>(value: T): T {\n const topicId = cleanString(value.topicId);\n if (!topicId) {\n return value;\n }\n return { ...value, topicId } as T;\n}\n\n/**\n * Extract list items from array or list-envelope payloads.\n */\nexport function asListItems<T>(data: unknown, legacyKey?: string): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n\n const record = asRecord(data);\n if (Array.isArray(record.items)) {\n return record.items;\n }\n if (legacyKey && Array.isArray(record[legacyKey])) {\n return record[legacyKey];\n }\n\n return [];\n}\n\n/**\n * Standardize list data to { items, total } while retaining an optional legacy array key.\n */\nexport function createListResult<T, LegacyKey extends string>(\n items: T[],\n legacyKey?: LegacyKey\n): ListResult<T, LegacyKey> {\n const result = {\n items,\n total: items.length,\n } as ListResult<T, LegacyKey>;\n\n if (legacyKey) {\n return {\n ...result,\n [legacyKey]: items,\n } as ListResult<T, LegacyKey>;\n }\n\n return result;\n}\n\n/**\n * Map a gateway success envelope's data while preserving the transport metadata.\n */\nexport function mapGatewayData<T, U>(\n response: PlatformGatewaySuccess<T>,\n mapper: (data: T) => U\n): PlatformGatewaySuccess<U> {\n return {\n ...response,\n data: mapper(response.data),\n };\n}\n\n/**\n * Apply SDK aliases across all items in a list-like payload.\n */\nexport function mapAliasedList<\n TItem extends AnyRecord,\n LegacyKey extends string,\n>(\n data: unknown,\n legacyKey?: LegacyKey\n): ListResult<TItem, LegacyKey> {\n const items = asListItems<TItem>(data, legacyKey).map((item) =>\n withSdkAliases(item)\n );\n return createListResult(items, legacyKey);\n}\n","import {\n createGatewayRequestClient,\n type GatewayClientConfig,\n LucernApiError,\n type PlatformGatewaySuccess,\n randomIdempotencyKey,\n} from \"./coreClient\";\nimport {\n type Opinion,\n} from \"./opinion\";\nimport { normalizeNodeWriteInput } from \"./sdkSurface\";\nimport type {\n CreateBeliefResponse,\n ForkBeliefResponse,\n JsonObject,\n ModulateConfidenceResponse,\n} from \"./types\";\n\nexport { LucernApiError };\nexport type { PlatformGatewaySuccess } from \"./coreClient\";\nexport type {\n CreateBeliefResponse,\n ForkBeliefResponse,\n ModulateConfidenceResponse,\n} from \"./types\";\nexport type { Opinion } from \"./opinion\";\n\n/** Configuration for the beliefs client. Inherits gateway transport settings. */\nexport type BeliefsClientConfig = GatewayClientConfig;\n\nexport type OpinionHistoryEntry = {\n t: number;\n b: number;\n d: number;\n u: number;\n a: number;\n P: number;\n trigger: string;\n triggeringRef?: {\n kind: \"evidence\" | \"question\" | \"answer\" | \"contradiction\" | \"worktree\";\n id: string;\n };\n rationale?: string;\n userId?: string;\n slOperator?: string;\n};\n\ntype GatewayRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): GatewayRecord {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as GatewayRecord)\n : {};\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction normalizeOpinionTuple(record: GatewayRecord): {\n b: number;\n d: number;\n u: number;\n a: number;\n} {\n const opinion = asRecord(record.opinion);\n const rawBelief = readNumber(opinion.b) ?? readNumber(record.belief);\n const rawDisbelief = readNumber(opinion.d) ?? readNumber(record.disbelief);\n const rawUncertainty = readNumber(opinion.u) ?? readNumber(record.uncertainty);\n const rawBaseRate = readNumber(opinion.a) ?? readNumber(record.baseRate);\n\n if (\n rawBelief === undefined ||\n rawDisbelief === undefined ||\n rawUncertainty === undefined ||\n rawBaseRate === undefined\n ) {\n throw new Error(\n \"Gateway opinion history entries must include belief, disbelief, uncertainty, and baseRate.\"\n );\n }\n\n return {\n b: clamp01(rawBelief),\n d: clamp01(rawDisbelief),\n u: clamp01(rawUncertainty),\n a: clamp01(rawBaseRate),\n };\n}\n\nexport function mapOpinionHistoryEntriesFromGatewayData(\n payload: GatewayRecord\n): OpinionHistoryEntry[] {\n const entries = Array.isArray(payload.entries) ? payload.entries : [];\n return entries\n .map((value) => {\n const record = asRecord(value);\n const tuple = normalizeOpinionTuple(record);\n const projected =\n readNumber(record.confidence) ?? clamp01(tuple.b + tuple.a * tuple.u);\n const triggeringEvidenceId = readString(record.triggeringEvidenceId);\n const triggeringQuestionId = readString(record.triggeringQuestionId);\n const triggeringAnswerId = readString(record.triggeringAnswerId);\n const triggeringContradictionId = readString(\n record.triggeringContradictionId\n );\n const triggeringWorktreeId = readString(record.triggeringWorktreeId);\n const triggeringRef = triggeringEvidenceId\n ? ({ kind: \"evidence\", id: triggeringEvidenceId } as const)\n : triggeringQuestionId\n ? ({ kind: \"question\", id: triggeringQuestionId } as const)\n : triggeringAnswerId\n ? ({ kind: \"answer\", id: triggeringAnswerId } as const)\n : triggeringContradictionId\n ? ({ kind: \"contradiction\", id: triggeringContradictionId } as const)\n : triggeringWorktreeId\n ? ({ kind: \"worktree\", id: triggeringWorktreeId } as const)\n : undefined;\n const trigger = readString(record.trigger);\n if (!trigger) {\n throw new Error(\"Gateway opinion history entries must include trigger.\");\n }\n\n return {\n t: readNumber(record.timestamp) ?? readNumber(record.assessedAt) ?? 0,\n b: tuple.b,\n d: tuple.d,\n u: tuple.u,\n a: tuple.a,\n P: clamp01(projected),\n trigger,\n ...(triggeringRef ? { triggeringRef } : {}),\n ...(readString(record.rationale)\n ? { rationale: readString(record.rationale)! }\n : {}),\n ...(readString(record.userId) ? { userId: readString(record.userId)! } : {}),\n ...(readString(record.slOperator)\n ? { slOperator: readString(record.slOperator)! }\n : {}),\n };\n })\n .sort((left, right) => left.t - right.t);\n}\n\n/**\n * Input for creating a new belief within a topic scope.\n *\n * Use `text` as the canonical belief statement.\n * `canonicalText` remains available as a legacy alias for backwards compatibility.\n * Beliefs start as drafts with a vacuous prior `(0, 0, 1, a)`. When omitted,\n * `baseRate` defaults to the canonical neutral prior `0.5`.\n */\nexport type CreateBeliefInput = {\n topicId?: string;\n /** Preferred belief statement alias. */\n text?: string;\n /** @deprecated Use text. */\n canonicalText?: string;\n layer?: \"L1\" | \"L2\" | \"L3\" | \"L4\";\n domain?: string;\n sourceType?: \"human\" | \"ai\" | \"agent\" | \"imported\";\n content?: string;\n contentHash?: string;\n globalId?: string;\n title?: string;\n subtype?: string;\n confidence?: number;\n baseRate?: number;\n tags?: string[];\n metadata?: JsonObject;\n verificationStatus?: \"unverified\" | \"verified\" | \"rejected\";\n};\n\n/**\n * Input for refining an existing draft belief.\n *\n * Use `text` as the canonical belief statement.\n * `canonicalText` remains available as a legacy alias for backwards compatibility.\n */\nexport type RefineBeliefInput = {\n /** Preferred belief statement alias. */\n text?: string;\n /** @deprecated Use text. */\n canonicalText?: string;\n rationale?: string;\n title?: string;\n};\n\ntype BeliefConfidenceTrigger =\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n | \"fusion\"\n | \"discount\"\n | \"deduction\";\n\ntype ModulateConfidenceInputBase = {\n trigger: BeliefConfidenceTrigger;\n rationale: string;\n triggeringEvidenceId?: string;\n triggeringQuestionId?: string;\n triggeringAnswerId?: string;\n triggeringContradictionId?: string;\n triggeringWorktreeId?: string;\n maxInlinePropagationTargets?: number;\n};\n\n/**\n * Record an append-only confidence change using an explicit subjective-logic\n * opinion tuple.\n */\nexport type ModulateConfidenceOpinionInput = ModulateConfidenceInputBase & {\n opinion: Opinion;\n};\n\nexport type ModulateConfidenceInput = ModulateConfidenceOpinionInput;\n\nfunction normalizeModulateConfidenceInput(\n input: ModulateConfidenceInput\n): JsonObject {\n const opinion = input.opinion;\n\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: input.trigger,\n rationale: input.rationale,\n triggeringEvidenceId: input.triggeringEvidenceId,\n triggeringQuestionId: input.triggeringQuestionId,\n triggeringAnswerId: input.triggeringAnswerId,\n triggeringContradictionId: input.triggeringContradictionId,\n triggeringWorktreeId: input.triggeringWorktreeId,\n maxInlinePropagationTargets: input.maxInlinePropagationTargets,\n };\n}\n\n/**\n * Input for forking a scored belief into a new formulation.\n * Scored beliefs are immutable — fork to evolve understanding.\n */\nexport type ForkBeliefInput = {\n newFormulation: string;\n forkReason?:\n | \"refinement\"\n | \"contradiction_response\"\n | \"scope_change\"\n | \"confidence_collapse\"\n | \"manual\";\n rationale?: string;\n};\n\n/** Input for changing a belief's lifecycle status. */\nexport type UpdateBeliefStatusInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n status: \"active\" | \"superseded\" | \"archived\";\n reason?: string;\n};\n\n/** Input for updating a belief's rationale without refining its text. */\nexport type UpdateBeliefRationaleInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n rationale?: string;\n};\n\n/** Input for creating a belief-to-belief reasoning edge. */\nexport type LinkBeliefsInput = {\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n};\n\n/** Input for unlinking a belief from an attached evidence item. */\nexport type UnlinkBeliefEvidenceInput = {\n beliefNodeId?: string;\n beliefId?: string;\n nodeId?: string;\n insightId?: string;\n evidenceId?: string;\n};\n\n/** Input for updating a belief's criticality classification. */\nexport type UpdateBeliefCriticalityInput = {\n id?: string;\n nodeId?: string;\n beliefId?: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n};\n\n/** Input for bulk-updating multiple beliefs' criticality. */\nexport type BatchUpdateBeliefCriticalityInput = {\n updates: Array<{\n beliefId: string;\n criticality:\n | \"blocking\"\n | \"important\"\n | \"supporting\"\n | \"essential\"\n | \"nice_to_have\";\n ifFalseImpact?: string;\n triagePriority?: number;\n reasoning?: string;\n dependentBeliefIds?: string[];\n blockedByBeliefIds?: string[];\n }>;\n};\n\n/** Input for moving beliefs into a different topic scope. */\nexport type ReassignBeliefsTopicInput = {\n beliefNodeIds?: string[];\n beliefIds?: string[];\n targetTopicId: string;\n reason?: string;\n};\n\n/**\n * Create the beliefs client for belief lifecycle operations.\n *\n * @param config - Gateway transport configuration.\n * @returns An object with `createBelief`, `refineBelief`, `modulateConfidence`, and `forkBelief` methods.\n */\nexport function createBeliefsClient(config: BeliefsClientConfig = {}) {\n const gateway = createGatewayRequestClient(config);\n\n function normalizeBaseRate(value: unknown): number {\n const baseRate = readNumber(value);\n const normalized = baseRate ?? 0.5;\n if (normalized < 0 || normalized > 1) {\n throw new Error(\"baseRate must be within [0, 1].\");\n }\n return normalized;\n }\n const modulateConfidence: {\n (\n beliefId: string,\n input: ModulateConfidenceOpinionInput,\n idempotencyKey?: string\n ): Promise<PlatformGatewaySuccess<ModulateConfidenceResponse>>;\n } = async (\n beliefId: string,\n input: ModulateConfidenceInput,\n idempotencyKey?: string\n ) =>\n gateway.request<ModulateConfidenceResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence`,\n method: \"POST\",\n body: normalizeModulateConfidenceInput(input),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n\n const getOpinionHistory = async (\n beliefId: string\n ): Promise<OpinionHistoryEntry[]> => {\n const response = await gateway.request<GatewayRecord>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/confidence-history`,\n });\n return mapOpinionHistoryEntriesFromGatewayData(response.data);\n };\n\n return {\n /**\n * Create a belief within a topic scope.\n */\n async createBelief(input: CreateBeliefInput, idempotencyKey?: string) {\n const baseRate = normalizeBaseRate(input.baseRate);\n return gateway.request<CreateBeliefResponse>({\n path: \"/api/platform/v1/beliefs\",\n method: \"POST\",\n body: {\n ...(normalizeNodeWriteInput(input) as JsonObject),\n baseRate,\n },\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Refine a draft belief in place.\n */\n async refineBelief(\n beliefId: string,\n input: RefineBeliefInput,\n idempotencyKey?: string\n ) {\n return gateway.request<CreateBeliefResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}`,\n method: \"PATCH\",\n body: normalizeNodeWriteInput(input as JsonObject),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Record a confidence change for an existing belief.\n */\n modulateConfidence,\n\n /**\n * Returns the belief's confidence trajectory as a chronological array.\n *\n * Canonical UI trend shape (what every trend component consumes):\n * { t: number, b: number, d: number, u: number, a: number, P: number, trigger: string, triggeringRef?: { kind: \"evidence\" | \"worktree\"; id: string } }[]\n *\n * Where:\n * t = assessedAt (epoch ms)\n * b, d, u, a = Opinion 4-tuple components\n * P = projected probability = b + a*u (precomputed for UI convenience)\n * trigger = cause of the score change\n * triggeringRef = optional pointer to the evidence or worktree that drove the change\n */\n getOpinionHistory,\n\n /** @deprecated Use getOpinionHistory(). */\n getConfidenceHistory: getOpinionHistory,\n\n /**\n * Fork a scored belief into a new formulation.\n */\n async forkBelief(\n beliefId: string,\n input: ForkBeliefInput,\n idempotencyKey?: string\n ) {\n return gateway.request<ForkBeliefResponse>({\n path: `/api/platform/v1/beliefs/${encodeURIComponent(beliefId)}/fork`,\n method: \"POST\",\n body: input,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's lifecycle status.\n */\n async updateBeliefStatus(\n input: UpdateBeliefStatusInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-status\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's rationale without changing its text.\n */\n async updateBeliefRationale(\n input: UpdateBeliefRationaleInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-rationale\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Create a typed relationship between two beliefs.\n */\n async linkBeliefs(input: LinkBeliefsInput, idempotencyKey?: string) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/link\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Remove an evidence attachment from a belief.\n */\n async unlinkBeliefEvidence(\n input: UnlinkBeliefEvidenceInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/unlink-evidence\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update a belief's criticality metadata.\n */\n async updateBeliefCriticality(\n input: UpdateBeliefCriticalityInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/update-criticality\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Update multiple beliefs' criticality in one mutation.\n */\n async batchUpdateBeliefCriticality(\n input: BatchUpdateBeliefCriticalityInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/batch-update-criticality\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n /**\n * Reassign beliefs to a different topic scope.\n */\n async reassignBeliefsTopic(\n input: ReassignBeliefsTopicInput,\n idempotencyKey?: string\n ) {\n return gateway.request<Record<string, unknown>>({\n path: \"/api/platform/v1/beliefs/reassign-topic\",\n method: \"POST\",\n body: input as JsonObject,\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n };\n}\n"]}
|
|
@@ -5,7 +5,10 @@ function createListResult(items, legacyKey) {
|
|
|
5
5
|
total: items.length
|
|
6
6
|
};
|
|
7
7
|
if (legacyKey) {
|
|
8
|
-
|
|
8
|
+
return {
|
|
9
|
+
...result,
|
|
10
|
+
[legacyKey]: items
|
|
11
|
+
};
|
|
9
12
|
}
|
|
10
13
|
return result;
|
|
11
14
|
}
|
|
@@ -15,6 +18,9 @@ function cleanOptionalString(value) {
|
|
|
15
18
|
const normalized = value?.trim();
|
|
16
19
|
return normalized ? normalized : void 0;
|
|
17
20
|
}
|
|
21
|
+
function isRecord(value) {
|
|
22
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
23
|
+
}
|
|
18
24
|
function cleanRequiredString(value, label) {
|
|
19
25
|
const normalized = cleanOptionalString(value);
|
|
20
26
|
if (!normalized) {
|
|
@@ -54,9 +60,10 @@ function topicPayload(input, allowed, operation) {
|
|
|
54
60
|
};
|
|
55
61
|
}
|
|
56
62
|
function listResultFromEnvelope(data, legacyKey) {
|
|
57
|
-
const record = data
|
|
63
|
+
const record = isRecord(data) ? data : {};
|
|
64
|
+
const legacyItems = record[legacyKey];
|
|
58
65
|
return createListResult(
|
|
59
|
-
Array.isArray(
|
|
66
|
+
Array.isArray(legacyItems) ? legacyItems : Array.isArray(data) ? data : [],
|
|
60
67
|
legacyKey
|
|
61
68
|
);
|
|
62
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdkSurface.ts","../src/boundaryClientSurface.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/sdkSurface.ts","../src/boundaryClientSurface.ts"],"names":[],"mappings":";AAoJO,SAAS,gBAAA,CACd,OACA,SAAA,EAC0B;AAC1B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,KAAA;AAAA,IACA,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,KACf;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC5JO,SAAS,oBAAoB,KAAA,EAA2B;AAC7D,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,EAAK;AAC/B,EAAA,OAAO,aAAa,UAAA,GAAa,MAAA;AACnC;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEO,SAAS,mBAAA,CACd,OACA,KAAA,EACA;AACA,EAAA,MAAM,UAAA,GAAa,oBAAoB,KAAK,CAAA;AAC5C,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,YAAY,KAAA,EAA+B;AACzD,EAAA,OAAO,oBAAoB,KAAA,CAAM,OAAO,CAAA,IAAK,mBAAA,CAAoB,MAAM,SAAS,CAAA;AAClF;AAEO,SAAS,eAAe,KAAA,EAA+B;AAC5D,EAAA,MAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AACjC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,eAAA,CACd,KAAA,EACA,OAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAY,OAAO,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,UAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA;AAC3E,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,GAAG,SAAS,CAAA,gCAAA,EAAmC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACvE;AAAA,EACF;AACF;AAEO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,EACA,SAAA,EACA;AACA,EAAA,eAAA,CAAgB,KAAA,EAAO,SAAS,SAAS,CAAA;AACzC,EAAA,OAAO,EAAE,GAAG,KAAA,EAAM;AACpB;AAEO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,EACA,SAAA,EACA;AACA,EAAA,eAAA,CAAgB,KAAA,EAAO,SAAS,SAAS,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,OAAA,EAAS,eAAe,KAAK,CAAA;AAAA,IAC7B,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,sBAAA,CACd,MACA,SAAA,EAC0B;AAC1B,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAI,CAAA,GAAI,OAAO,EAAC;AACxC,EAAA,MAAM,WAAA,GAAc,OAAO,SAAS,CAAA;AACpC,EAAA,OAAO,gBAAA;AAAA,IACL,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GACrB,WAAA,GACA,MAAM,OAAA,CAAQ,IAAI,CAAA,GAChB,IAAA,GACA,EAAC;AAAA,IACP;AAAA,GACF;AACF","file":"boundaryClientSurface.js","sourcesContent":["import type { PlatformGatewaySuccess } from \"./coreClient\";\nimport type { JsonObject, ListResult } from \"./types\";\n\ntype TopicScopedValue = {\n topicId?: string;\n};\n\ntype TextScopedValue = {\n text?: string;\n canonicalText?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is AnyRecord {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): AnyRecord {\n return isRecord(value) ? value : {};\n}\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeVerificationStatus(value: unknown): string | undefined {\n const status = cleanString(value);\n if (!status) {\n return undefined;\n }\n if (status === \"verified\") {\n return \"human_verified\";\n }\n if (status === \"rejected\") {\n return \"contradicted\";\n }\n return status;\n}\n\nfunction cloneWith<T extends AnyRecord>(value: T, patch: AnyRecord): T {\n return { ...value, ...patch } as T;\n}\n\n/**\n * Resolve the canonical topic identifier.\n */\nexport function resolveTopicId(value: TopicScopedValue): string | undefined {\n return cleanString(value.topicId);\n}\n\n/**\n * Resolve the canonical text field from text-first or legacy canonicalText-first inputs.\n */\nexport function resolveText(value: TextScopedValue): string | undefined {\n return cleanString(value.text) ?? cleanString(value.canonicalText);\n}\n\n/**\n * Attach the topicId to a record.\n */\nexport function withTopicAlias<T extends AnyRecord>(value: T): T {\n const topicId = cleanString(value.topicId) ?? undefined;\n if (!topicId) {\n return value;\n }\n return cloneWith(value, { topicId });\n}\n\n/**\n * Attach the text/canonicalText alias pair to a record.\n */\nexport function withTextAlias<T extends AnyRecord>(value: T): T {\n const text =\n cleanString(value.text) ?? cleanString(value.canonicalText) ?? undefined;\n if (!text) {\n return value;\n }\n return cloneWith(value, { text, canonicalText: text });\n}\n\n/**\n * Attach topic and text aliases to SDK node-like records.\n */\nexport function withSdkAliases<T extends AnyRecord>(value: T): T {\n return withTopicAlias(withTextAlias(value));\n}\n\n/**\n * Normalize a belief/question/evidence write payload to the canonical gateway shape.\n */\nexport function normalizeNodeWriteInput<T extends JsonObject>(value: T): T {\n const topicId = resolveTopicId(value);\n const text = resolveText(value);\n const verificationStatus = normalizeVerificationStatus(value.verificationStatus);\n const next = { ...value } as JsonObject;\n\n if (topicId) {\n next.topicId = topicId;\n }\n if (text) {\n next.text = text;\n next.canonicalText = text;\n }\n if (verificationStatus) {\n next.verificationStatus = verificationStatus;\n }\n\n return next as T;\n}\n\nexport const normalizeNodeVerificationStatus = normalizeVerificationStatus;\n\n/**\n * Build a topic-aware query object.\n */\nexport function normalizeTopicQuery<T extends JsonObject>(value: T): T {\n const topicId = cleanString(value.topicId);\n if (!topicId) {\n return value;\n }\n return { ...value, topicId } as T;\n}\n\n/**\n * Extract list items from array or list-envelope payloads.\n */\nexport function asListItems<T>(data: unknown, legacyKey?: string): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n\n const record = asRecord(data);\n if (Array.isArray(record.items)) {\n return record.items;\n }\n if (legacyKey && Array.isArray(record[legacyKey])) {\n return record[legacyKey];\n }\n\n return [];\n}\n\n/**\n * Standardize list data to { items, total } while retaining an optional legacy array key.\n */\nexport function createListResult<T, LegacyKey extends string>(\n items: T[],\n legacyKey?: LegacyKey\n): ListResult<T, LegacyKey> {\n const result = {\n items,\n total: items.length,\n } as ListResult<T, LegacyKey>;\n\n if (legacyKey) {\n return {\n ...result,\n [legacyKey]: items,\n } as ListResult<T, LegacyKey>;\n }\n\n return result;\n}\n\n/**\n * Map a gateway success envelope's data while preserving the transport metadata.\n */\nexport function mapGatewayData<T, U>(\n response: PlatformGatewaySuccess<T>,\n mapper: (data: T) => U\n): PlatformGatewaySuccess<U> {\n return {\n ...response,\n data: mapper(response.data),\n };\n}\n\n/**\n * Apply SDK aliases across all items in a list-like payload.\n */\nexport function mapAliasedList<\n TItem extends AnyRecord,\n LegacyKey extends string,\n>(\n data: unknown,\n legacyKey?: LegacyKey\n): ListResult<TItem, LegacyKey> {\n const items = asListItems<TItem>(data, legacyKey).map((item) =>\n withSdkAliases(item)\n );\n return createListResult(items, legacyKey);\n}\n","import { createListResult } from \"./sdkSurface\";\nimport type { JsonObject, ListResult } from \"./types\";\n\nexport type TopicProjectAliasInput = {\n topicId?: string;\n /** @deprecated Use topicId. */\n projectId?: string;\n};\n\nexport function cleanOptionalString(value: string | undefined) {\n const normalized = value?.trim();\n return normalized ? normalized : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function cleanRequiredString(\n value: string | undefined,\n label: string\n) {\n const normalized = cleanOptionalString(value);\n if (!normalized) {\n throw new Error(`${label} is required`);\n }\n return normalized;\n}\n\nexport function readTopicId(input: TopicProjectAliasInput) {\n return cleanOptionalString(input.topicId) ?? cleanOptionalString(input.projectId);\n}\n\nexport function requireTopicId(input: TopicProjectAliasInput) {\n const topicId = readTopicId(input);\n if (!topicId) {\n throw new Error(\"topicId is required\");\n }\n return topicId;\n}\n\nexport function assertKnownKeys<T extends string>(\n input: Record<string, unknown>,\n allowed: readonly T[],\n operation: string\n) {\n const allowedSet = new Set<string>(allowed);\n const unknownKeys = Object.keys(input).filter((key) => !allowedSet.has(key));\n if (unknownKeys.length > 0) {\n throw new Error(\n `${operation} received unsupported field(s): ${unknownKeys.join(\", \")}`\n );\n }\n}\n\nexport function knownPayload<T extends string>(\n input: Record<string, unknown>,\n allowed: readonly T[],\n operation: string\n) {\n assertKnownKeys(input, allowed, operation);\n return { ...input } as JsonObject;\n}\n\nexport function topicPayload<T extends string>(\n input: TopicProjectAliasInput & Record<string, unknown>,\n allowed: readonly T[],\n operation: string\n) {\n assertKnownKeys(input, allowed, operation);\n return {\n ...input,\n topicId: requireTopicId(input),\n projectId: undefined,\n } as JsonObject;\n}\n\nexport function listResultFromEnvelope<T, LegacyKey extends string>(\n data: unknown,\n legacyKey: LegacyKey\n): ListResult<T, LegacyKey> {\n const record = isRecord(data) ? data : {};\n const legacyItems = record[legacyKey];\n return createListResult(\n Array.isArray(legacyItems)\n ? legacyItems\n : Array.isArray(data)\n ? data\n : [],\n legacyKey\n );\n}\n"]}
|