@lucern/sdk 0.3.0-alpha.10 → 0.3.0-alpha.11
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/README.md +1 -1
- package/dist/accessControl.d.ts +78 -0
- package/dist/accessControl.js +1118 -0
- package/dist/accessControl.js.map +1 -0
- package/dist/adminClient.js.map +1 -1
- package/dist/answersClient.js.map +1 -1
- package/dist/audiencesClient.js.map +1 -1
- package/dist/auditClient.js.map +1 -1
- package/dist/authContext.d.ts +1 -1
- package/dist/authContext.js.map +1 -1
- package/dist/beliefs/index.d.ts +1 -0
- package/dist/beliefs/index.js +799 -551
- package/dist/beliefs/index.js.map +1 -1
- package/dist/beliefsClient.js.map +1 -1
- package/dist/client.d.ts +27 -8
- package/dist/client.js +799 -551
- package/dist/client.js.map +1 -1
- package/dist/contextClient.js.map +1 -1
- package/dist/contracts/api-enums.contract.d.ts +1 -1
- package/dist/contracts/api-enums.contract.js +6 -1
- package/dist/contracts/api-enums.contract.js.map +1 -1
- package/dist/contracts/index.js +12 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/mcpTools.js +6 -0
- package/dist/contracts/mcpTools.js.map +1 -1
- package/dist/contradictions/index.d.ts +1 -0
- package/dist/contradictions/index.js +799 -551
- package/dist/contradictions/index.js.map +1 -1
- package/dist/coreClient.js.map +1 -1
- package/dist/decisions/index.d.ts +1 -0
- package/dist/decisions/index.js +799 -551
- package/dist/decisions/index.js.map +1 -1
- package/dist/decisionsClient.js.map +1 -1
- package/dist/edges/index.d.ts +1 -0
- package/dist/edges/index.js +799 -551
- package/dist/edges/index.js.map +1 -1
- package/dist/embeddingsClient.js.map +1 -1
- package/dist/eventingClient.js.map +1 -1
- package/dist/eventsCore.js.map +1 -1
- package/dist/evidence/index.d.ts +1 -0
- package/dist/evidence/index.js +799 -551
- package/dist/evidence/index.js.map +1 -1
- package/dist/evidenceClient.js.map +1 -1
- package/dist/functionSurface.js.map +1 -1
- package/dist/functionSurfaceClient.js.map +1 -1
- package/dist/gatewayFacades.d.ts +1 -0
- package/dist/gatewayFacades.js.map +1 -1
- package/dist/graphAnalysisClient.js.map +1 -1
- package/dist/graphClient.d.ts +1 -0
- package/dist/graphClient.js.map +1 -1
- package/dist/graphIntel.d.ts +1 -0
- package/dist/graphRecommendationsClient.js.map +1 -1
- package/dist/graphStateClassifierClient.js.map +1 -1
- package/dist/harnessClient.js.map +1 -1
- package/dist/identityClient.d.ts +1 -1
- package/dist/identityClient.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +790 -490
- package/dist/index.js.map +1 -1
- package/dist/infisicalRuntime.d.ts +1 -0
- package/dist/infisicalRuntime.js +64 -32
- package/dist/infisicalRuntime.js.map +1 -1
- package/dist/jobsClient.js.map +1 -1
- package/dist/learningClient.js.map +1 -1
- package/dist/lenses/index.d.ts +1 -0
- package/dist/lenses/index.js +799 -551
- package/dist/lenses/index.js.map +1 -1
- package/dist/mcpClient.js +2 -1
- package/dist/mcpClient.js.map +1 -1
- package/dist/modelRuntimeClient.js.map +1 -1
- package/dist/nodes/index.d.ts +1 -0
- package/dist/nodes/index.js +799 -551
- package/dist/nodes/index.js.map +1 -1
- package/dist/ontologies/index.d.ts +1 -0
- package/dist/ontologies/index.js +799 -551
- package/dist/ontologies/index.js.map +1 -1
- package/dist/ontologyClient.js.map +1 -1
- package/dist/ontologyLinksClient.js.map +1 -1
- package/dist/orgGraphSearchClient.js.map +1 -1
- package/dist/packsClient.js.map +1 -1
- package/dist/policyClient.js.map +1 -1
- package/dist/questions/index.d.ts +1 -0
- package/dist/questions/index.js +799 -551
- package/dist/questions/index.js.map +1 -1
- package/dist/reportsClient.js.map +1 -1
- package/dist/schemaClient.js.map +1 -1
- package/dist/secrets.d.ts +1 -0
- package/dist/secrets.js +3 -0
- package/dist/secrets.js.map +1 -0
- package/dist/sourcesClient.js.map +1 -1
- package/dist/telemetryClient.js.map +1 -1
- package/dist/toolRegistryClient.js.map +1 -1
- package/dist/topics/index.d.ts +1 -0
- package/dist/topics/index.js +799 -551
- package/dist/topics/index.js.map +1 -1
- 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.js.map +1 -1
- package/dist/worktrees/index.d.ts +1 -0
- package/dist/worktrees/index.js +799 -551
- package/dist/worktrees/index.js.map +1 -1
- package/package.json +5 -4
|
@@ -15,6 +15,7 @@ type InfisicalRuntimeHydrateOptions = {
|
|
|
15
15
|
env?: InfisicalRuntimeEnv;
|
|
16
16
|
fetchImpl?: InfisicalRuntimeFetch;
|
|
17
17
|
bootstrap?: Partial<InfisicalRuntimeBootstrapConfig>;
|
|
18
|
+
includeGeneratedSurfaceVariables?: boolean;
|
|
18
19
|
};
|
|
19
20
|
type InfisicalRuntimeHydrationResult = {
|
|
20
21
|
status: "disabled" | "hydrated";
|
package/dist/infisicalRuntime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { INFISICAL_RUNTIME_MANIFEST, INFISICAL_RUNTIME_DEFAULT_PROJECT_ID, INFISICAL_RUNTIME_DEFAULT_API_URL, findInfisicalRuntimeSurface, findInfisicalRuntimePath } from '@lucern/contracts';
|
|
1
|
+
import { INFISICAL_RUNTIME_MANIFEST, INFISICAL_RUNTIME_DEFAULT_PROJECT_ID, INFISICAL_RUNTIME_DEFAULT_API_URL, findInfisicalRuntimeSurface, findInfisicalRuntimePath, GENERATED_INFISICAL_RUNTIME_ENV } from '@lucern/contracts';
|
|
2
2
|
|
|
3
3
|
// src/infisicalRuntime.ts
|
|
4
4
|
var InfisicalRuntimeError = class extends Error {
|
|
@@ -73,10 +73,11 @@ async function hydrateInfisicalRuntimeEnv(options) {
|
|
|
73
73
|
message: `Unknown Lucern Infisical runtime surface: ${options.surfaceId}.`
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
const fallbackDelivery = surface.fallback;
|
|
77
|
+
if (surface.delivery !== "runtime_fetch" && fallbackDelivery !== "runtime_fetch") {
|
|
77
78
|
throw new InfisicalRuntimeError({
|
|
78
79
|
code: "INFISICAL_UNSUPPORTED_SURFACE_DELIVERY",
|
|
79
|
-
message: `${surface.id} uses ${surface.delivery}; runtime fetch is only valid for runtime_fetch surfaces.`
|
|
80
|
+
message: `${surface.id} uses ${surface.delivery}; runtime fetch is only valid for runtime_fetch surfaces or surfaces with a runtime_fetch fallback.`
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
@@ -89,35 +90,26 @@ async function hydrateInfisicalRuntimeEnv(options) {
|
|
|
89
90
|
const token = await loginWithUniversalAuth(bootstrap, fetchImpl);
|
|
90
91
|
const values = {};
|
|
91
92
|
const missingRequired = [];
|
|
92
|
-
const sourcePaths =
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
fetchImpl,
|
|
107
|
-
token,
|
|
108
|
-
secretPath: path.secretPath,
|
|
109
|
-
variable: runtimeVariable
|
|
110
|
-
});
|
|
111
|
-
if (!secretValue) {
|
|
112
|
-
if (runtimeVariable.required) {
|
|
113
|
-
missingRequired.push(runtimeVariable.name);
|
|
114
|
-
}
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
values[runtimeVariable.name] = secretValue.value;
|
|
118
|
-
for (const alias of runtimeVariable.aliases ?? []) {
|
|
119
|
-
values[alias] = secretValue.value;
|
|
93
|
+
const sourcePaths = /* @__PURE__ */ new Set();
|
|
94
|
+
const variables = options.includeGeneratedSurfaceVariables ? generatedSurfaceVariables(options.surfaceId) : contractSurfaceVariables(surface.sourcePathIds);
|
|
95
|
+
for (const runtimeVariable of variables) {
|
|
96
|
+
sourcePaths.add(runtimeVariable.secretPath);
|
|
97
|
+
const secretValue = await readVariableSecret({
|
|
98
|
+
bootstrap,
|
|
99
|
+
fetchImpl,
|
|
100
|
+
token,
|
|
101
|
+
secretPath: runtimeVariable.secretPath,
|
|
102
|
+
variable: runtimeVariable
|
|
103
|
+
});
|
|
104
|
+
if (!secretValue) {
|
|
105
|
+
if (runtimeVariable.required) {
|
|
106
|
+
missingRequired.push(runtimeVariable.name);
|
|
120
107
|
}
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
values[runtimeVariable.name] = secretValue.value;
|
|
111
|
+
for (const alias of runtimeVariable.aliases ?? []) {
|
|
112
|
+
values[alias] = secretValue.value;
|
|
121
113
|
}
|
|
122
114
|
}
|
|
123
115
|
if (missingRequired.length > 0) {
|
|
@@ -131,7 +123,7 @@ async function hydrateInfisicalRuntimeEnv(options) {
|
|
|
131
123
|
surfaceId: options.surfaceId,
|
|
132
124
|
environment: bootstrap.environment,
|
|
133
125
|
values,
|
|
134
|
-
sourcePaths
|
|
126
|
+
sourcePaths: [...sourcePaths]
|
|
135
127
|
};
|
|
136
128
|
}
|
|
137
129
|
function applyInfisicalRuntimeEnv(result, targetEnv, options = {}) {
|
|
@@ -202,6 +194,46 @@ async function readVariableSecret(args) {
|
|
|
202
194
|
}
|
|
203
195
|
return null;
|
|
204
196
|
}
|
|
197
|
+
function contractSurfaceVariables(sourcePathIds) {
|
|
198
|
+
return sourcePathIds.flatMap((pathId) => {
|
|
199
|
+
const path = findInfisicalRuntimePath(pathId);
|
|
200
|
+
if (!path) {
|
|
201
|
+
throw new InfisicalRuntimeError({
|
|
202
|
+
code: "INFISICAL_UNKNOWN_PATH",
|
|
203
|
+
message: `Unknown Lucern Infisical runtime path: ${pathId}.`
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return path.variables.map((variable) => ({
|
|
207
|
+
...variable,
|
|
208
|
+
secretPath: path.secretPath
|
|
209
|
+
}));
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
function generatedSurfaceVariables(surfaceId) {
|
|
213
|
+
const surface = GENERATED_INFISICAL_RUNTIME_ENV.surfaces[surfaceId];
|
|
214
|
+
if (!surface) {
|
|
215
|
+
throw new InfisicalRuntimeError({
|
|
216
|
+
code: "INFISICAL_UNKNOWN_SURFACE",
|
|
217
|
+
message: `Unknown generated Lucern Infisical runtime surface: ${surfaceId}.`
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return surface.variables.map(generatedVariableToRuntimeVariable);
|
|
221
|
+
}
|
|
222
|
+
function generatedVariableToRuntimeVariable(variable) {
|
|
223
|
+
const aliases = /* @__PURE__ */ new Set([
|
|
224
|
+
...variable.envNames.filter((name) => name !== variable.canonicalName),
|
|
225
|
+
...variable.aliases
|
|
226
|
+
]);
|
|
227
|
+
return {
|
|
228
|
+
name: variable.canonicalName,
|
|
229
|
+
required: variable.required,
|
|
230
|
+
secret: variable.secret,
|
|
231
|
+
public: variable.public,
|
|
232
|
+
aliases: [...aliases],
|
|
233
|
+
description: variable.description,
|
|
234
|
+
secretPath: variable.sourcePath
|
|
235
|
+
};
|
|
236
|
+
}
|
|
205
237
|
async function readSecretValue(args) {
|
|
206
238
|
const params = new URLSearchParams({
|
|
207
239
|
projectId: args.bootstrap.projectId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/infisicalRuntime.ts"],"names":[],"mappings":"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","file":"infisicalRuntime.js","sourcesContent":["import {\n INFISICAL_RUNTIME_DEFAULT_API_URL,\n INFISICAL_RUNTIME_DEFAULT_PROJECT_ID,\n INFISICAL_RUNTIME_MANIFEST,\n findInfisicalRuntimePath,\n findInfisicalRuntimeSurface,\n type InfisicalRuntimeEnvironment,\n type InfisicalRuntimeSurfaceId,\n type InfisicalRuntimeVariable,\n} from \"@lucern/contracts\";\n\nexport type InfisicalRuntimeEnv = Record<string, string | undefined>;\n\nexport type InfisicalRuntimeFetch = (\n input: string | URL,\n init?: RequestInit\n) => Promise<Response>;\n\nexport type InfisicalRuntimeBootstrapConfig = {\n apiUrl: string;\n projectId: string;\n clientId: string;\n clientSecret: string;\n environment: InfisicalRuntimeEnvironment;\n organizationSlug?: string;\n};\n\nexport type InfisicalRuntimeHydrateOptions = {\n surfaceId: InfisicalRuntimeSurfaceId;\n env?: InfisicalRuntimeEnv;\n fetchImpl?: InfisicalRuntimeFetch;\n bootstrap?: Partial<InfisicalRuntimeBootstrapConfig>;\n};\n\nexport type InfisicalRuntimeHydrationResult = {\n status: \"disabled\" | \"hydrated\";\n surfaceId: InfisicalRuntimeSurfaceId;\n environment?: InfisicalRuntimeEnvironment;\n values: Record<string, string>;\n sourcePaths: string[];\n};\n\nexport class InfisicalRuntimeError extends Error {\n readonly code: string;\n readonly status?: number;\n\n constructor(args: { code: string; message: string; status?: number }) {\n super(args.message);\n this.name = \"InfisicalRuntimeError\";\n this.code = args.code;\n this.status = args.status;\n }\n}\n\nexport function readInfisicalRuntimeBootstrap(\n env: InfisicalRuntimeEnv = {},\n overrides: Partial<InfisicalRuntimeBootstrapConfig> = {}\n): InfisicalRuntimeBootstrapConfig | null {\n if (isInfisicalRuntimeDisabled(env)) {\n return null;\n }\n\n const bootstrapEnv = INFISICAL_RUNTIME_MANIFEST.bootstrapEnv;\n const clientId = overrides.clientId ?? readFirst(env, bootstrapEnv.clientId);\n const clientSecret =\n overrides.clientSecret ?? readFirst(env, bootstrapEnv.clientSecret);\n const hasAuthSignal = Boolean(clientId || clientSecret);\n\n if (!hasAuthSignal) {\n return null;\n }\n\n if (!clientId || !clientSecret) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_BOOTSTRAP_INCOMPLETE\",\n message:\n \"Infisical runtime bootstrap requires both INFISICAL_CLIENT_ID and INFISICAL_CLIENT_SECRET.\",\n });\n }\n\n return {\n apiUrl:\n overrides.apiUrl ??\n readFirst(env, bootstrapEnv.apiUrl) ??\n INFISICAL_RUNTIME_DEFAULT_API_URL,\n projectId:\n overrides.projectId ??\n readFirst(env, bootstrapEnv.projectId) ??\n INFISICAL_RUNTIME_DEFAULT_PROJECT_ID,\n clientId,\n clientSecret,\n environment: normalizeInfisicalEnvironment(\n overrides.environment ?? readFirst(env, bootstrapEnv.environment)\n ),\n organizationSlug:\n overrides.organizationSlug ??\n readFirst(env, bootstrapEnv.organizationSlug),\n };\n}\n\nexport function isInfisicalRuntimeDisabled(\n env: InfisicalRuntimeEnv = {}\n): boolean {\n return INFISICAL_RUNTIME_MANIFEST.bootstrapEnv.disabled.some((name) =>\n isTruthyEnv(env[name])\n );\n}\n\nexport async function hydrateInfisicalRuntimeEnv(\n options: InfisicalRuntimeHydrateOptions\n): Promise<InfisicalRuntimeHydrationResult> {\n const env = options.env ?? {};\n const baseBootstrap = readInfisicalRuntimeBootstrap(env, options.bootstrap);\n const bootstrap = baseBootstrap\n ? {\n ...baseBootstrap,\n ...Object.fromEntries(\n Object.entries(options.bootstrap ?? {}).filter(\n ([, value]) => value !== undefined\n )\n ),\n apiUrl: trimTrailingSlash(\n options.bootstrap?.apiUrl ?? baseBootstrap.apiUrl\n ),\n }\n : null;\n if (!bootstrap) {\n return {\n status: \"disabled\",\n surfaceId: options.surfaceId,\n values: {},\n sourcePaths: [],\n };\n }\n\n const surface = findInfisicalRuntimeSurface(options.surfaceId);\n if (!surface) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNKNOWN_SURFACE\",\n message: `Unknown Lucern Infisical runtime surface: ${options.surfaceId}.`,\n });\n }\n if (surface.delivery !== \"runtime_fetch\") {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNSUPPORTED_SURFACE_DELIVERY\",\n message: `${surface.id} uses ${surface.delivery}; runtime fetch is only valid for runtime_fetch surfaces.`,\n });\n }\n\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_FETCH_UNAVAILABLE\",\n message:\n \"No fetch implementation is available for Infisical runtime hydration.\",\n });\n }\n\n const token = await loginWithUniversalAuth(bootstrap, fetchImpl);\n const values: Record<string, string> = {};\n const missingRequired: string[] = [];\n const sourcePaths: string[] = [];\n\n for (const pathId of surface.sourcePathIds) {\n const path = findInfisicalRuntimePath(pathId);\n if (!path) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNKNOWN_PATH\",\n message: `Unknown Lucern Infisical runtime path: ${pathId}.`,\n });\n }\n sourcePaths.push(path.secretPath);\n\n for (const variable of path.variables) {\n const runtimeVariable: InfisicalRuntimeVariable = variable;\n const secretValue = await readVariableSecret({\n bootstrap,\n fetchImpl,\n token,\n secretPath: path.secretPath,\n variable: runtimeVariable,\n });\n\n if (!secretValue) {\n if (runtimeVariable.required) {\n missingRequired.push(runtimeVariable.name);\n }\n continue;\n }\n\n values[runtimeVariable.name] = secretValue.value;\n for (const alias of runtimeVariable.aliases ?? []) {\n values[alias] = secretValue.value;\n }\n }\n }\n\n if (missingRequired.length > 0) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_REQUIRED_SECRETS_MISSING\",\n message: `Missing required Infisical runtime secrets: ${missingRequired.join(\", \")}.`,\n });\n }\n\n return {\n status: \"hydrated\",\n surfaceId: options.surfaceId,\n environment: bootstrap.environment,\n values,\n sourcePaths,\n };\n}\n\nexport function applyInfisicalRuntimeEnv(\n result: Pick<InfisicalRuntimeHydrationResult, \"values\">,\n targetEnv: InfisicalRuntimeEnv,\n options: { overrideExisting?: boolean } = {}\n): void {\n for (const [key, value] of Object.entries(result.values)) {\n if (options.overrideExisting || !targetEnv[key]) {\n targetEnv[key] = value;\n }\n }\n}\n\nfunction normalizeInfisicalEnvironment(\n value: string | undefined\n): InfisicalRuntimeEnvironment {\n if (value === \"dev\" || value === \"staging\" || value === \"prod\") {\n return value;\n }\n if (value === \"development\") {\n return \"dev\";\n }\n if (value === \"production\") {\n return \"prod\";\n }\n return \"prod\";\n}\n\nasync function loginWithUniversalAuth(\n bootstrap: InfisicalRuntimeBootstrapConfig,\n fetchImpl: InfisicalRuntimeFetch\n): Promise<string> {\n const response = await fetchImpl(\n `${trimTrailingSlash(bootstrap.apiUrl)}/api/v1/auth/universal-auth/login`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n clientId: bootstrap.clientId,\n clientSecret: bootstrap.clientSecret,\n ...(bootstrap.organizationSlug\n ? { organizationSlug: bootstrap.organizationSlug }\n : {}),\n }),\n }\n );\n\n const body = await readJson(response);\n if (!response.ok) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNIVERSAL_AUTH_FAILED\",\n status: response.status,\n message: `Infisical Universal Auth failed with HTTP ${response.status}: ${messageFromBody(body)}`,\n });\n }\n\n const accessToken = readNestedString(body, [\"accessToken\"]);\n if (!accessToken) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNIVERSAL_AUTH_INVALID_RESPONSE\",\n message: \"Infisical Universal Auth response did not include accessToken.\",\n });\n }\n return accessToken;\n}\n\nasync function readVariableSecret(args: {\n bootstrap: InfisicalRuntimeBootstrapConfig;\n fetchImpl: InfisicalRuntimeFetch;\n token: string;\n secretPath: string;\n variable: InfisicalRuntimeVariable;\n}): Promise<{ name: string; value: string } | null> {\n const names = [args.variable.name, ...(args.variable.aliases ?? [])];\n for (const name of names) {\n const value = await readSecretValue({\n bootstrap: args.bootstrap,\n fetchImpl: args.fetchImpl,\n token: args.token,\n secretPath: args.secretPath,\n name,\n optional: true,\n });\n if (value) {\n return { name, value };\n }\n }\n return null;\n}\n\nasync function readSecretValue(args: {\n bootstrap: InfisicalRuntimeBootstrapConfig;\n fetchImpl: InfisicalRuntimeFetch;\n token: string;\n secretPath: string;\n name: string;\n optional: boolean;\n}): Promise<string | null> {\n const params = new URLSearchParams({\n projectId: args.bootstrap.projectId,\n environment: args.bootstrap.environment,\n secretPath: args.secretPath,\n type: \"shared\",\n viewSecretValue: \"true\",\n expandSecretReferences: \"true\",\n includeImports: \"true\",\n });\n const response = await args.fetchImpl(\n `${trimTrailingSlash(args.bootstrap.apiUrl)}/api/v4/secrets/${encodeURIComponent(args.name)}?${params.toString()}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${args.token}`,\n },\n }\n );\n\n const body = await readJson(response);\n if (response.status === 404 && args.optional) {\n return null;\n }\n if (!response.ok) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_SECRET_READ_FAILED\",\n status: response.status,\n message: `Infisical secret ${args.name} read failed with HTTP ${response.status}: ${messageFromBody(body)}`,\n });\n }\n\n return readNestedString(body, [\"secret\", \"secretValue\"]);\n}\n\nasync function readJson(response: Response): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n debugInfisicalRuntimeFallback(\"response.json\", error);\n return undefined;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readNestedString(value: unknown, path: readonly string[]): string | null {\n let current: unknown = value;\n for (const key of path) {\n if (!isRecord(current) || !(key in current)) {\n return null;\n }\n current = current[key];\n }\n return typeof current === \"string\" && current.length > 0 ? current : null;\n}\n\nfunction messageFromBody(body: unknown): string {\n if (!isRecord(body)) {\n return \"no response body\";\n }\n for (const key of [\"message\", \"error\", \"errorMessage\"]) {\n if (typeof body[key] === \"string\") {\n return body[key];\n }\n }\n return JSON.stringify(body);\n}\n\nfunction readFirst(\n env: InfisicalRuntimeEnv,\n names: readonly string[]\n): string | undefined {\n for (const name of names) {\n const value = env[name]?.trim();\n if (value) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n return [\"1\", \"true\", \"yes\", \"on\"].includes(value?.toLowerCase() ?? \"\");\n}\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/u, \"\");\n}\n\nfunction debugInfisicalRuntimeFallback(message: string, error: unknown): void {\n const env = (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process?.env;\n if (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG !== \"1\" &&\n env?.LUCERN_INFISICAL_RUNTIME_DEBUG !== \"1\"\n ) {\n return;\n }\n console.debug(`[infisical-runtime] ${message}`, {\n error: formatInfisicalRuntimeError(error),\n });\n}\n\nfunction formatInfisicalRuntimeError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (typeof error === \"number\" || typeof error === \"boolean\") {\n return String(error);\n }\n if (error && typeof error === \"object\") {\n const keys = Object.keys(error).slice(0, 5);\n if (keys.length > 0) {\n return `Unknown Infisical runtime error object with keys: ${keys.join(\", \")}`;\n }\n }\n return \"Unknown Infisical runtime error shape\";\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/infisicalRuntime.ts"],"names":[],"mappings":"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","file":"infisicalRuntime.js","sourcesContent":["import {\n INFISICAL_RUNTIME_DEFAULT_API_URL,\n INFISICAL_RUNTIME_DEFAULT_PROJECT_ID,\n INFISICAL_RUNTIME_MANIFEST,\n findInfisicalRuntimePath,\n findInfisicalRuntimeSurface,\n GENERATED_INFISICAL_RUNTIME_ENV,\n type GeneratedInfisicalEnvVariable,\n type InfisicalRuntimeEnvironment,\n type InfisicalRuntimePathId,\n type InfisicalRuntimeSurfaceId,\n type InfisicalRuntimeVariable,\n} from \"@lucern/contracts\";\n\nexport type InfisicalRuntimeEnv = Record<string, string | undefined>;\n\nexport type InfisicalRuntimeFetch = (\n input: string | URL,\n init?: RequestInit\n) => Promise<Response>;\n\nexport type InfisicalRuntimeBootstrapConfig = {\n apiUrl: string;\n projectId: string;\n clientId: string;\n clientSecret: string;\n environment: InfisicalRuntimeEnvironment;\n organizationSlug?: string;\n};\n\nexport type InfisicalRuntimeHydrateOptions = {\n surfaceId: InfisicalRuntimeSurfaceId;\n env?: InfisicalRuntimeEnv;\n fetchImpl?: InfisicalRuntimeFetch;\n bootstrap?: Partial<InfisicalRuntimeBootstrapConfig>;\n includeGeneratedSurfaceVariables?: boolean;\n};\n\nexport type InfisicalRuntimeHydrationResult = {\n status: \"disabled\" | \"hydrated\";\n surfaceId: InfisicalRuntimeSurfaceId;\n environment?: InfisicalRuntimeEnvironment;\n values: Record<string, string>;\n sourcePaths: string[];\n};\n\nexport class InfisicalRuntimeError extends Error {\n readonly code: string;\n readonly status?: number;\n\n constructor(args: { code: string; message: string; status?: number }) {\n super(args.message);\n this.name = \"InfisicalRuntimeError\";\n this.code = args.code;\n this.status = args.status;\n }\n}\n\ntype RuntimeHydrationVariable = {\n readonly name: string;\n readonly required: boolean;\n readonly secret: boolean;\n readonly public: boolean;\n readonly aliases?: readonly string[];\n readonly description: string;\n readonly secretPath: string;\n};\n\nexport function readInfisicalRuntimeBootstrap(\n env: InfisicalRuntimeEnv = {},\n overrides: Partial<InfisicalRuntimeBootstrapConfig> = {}\n): InfisicalRuntimeBootstrapConfig | null {\n if (isInfisicalRuntimeDisabled(env)) {\n return null;\n }\n\n const bootstrapEnv = INFISICAL_RUNTIME_MANIFEST.bootstrapEnv;\n const clientId = overrides.clientId ?? readFirst(env, bootstrapEnv.clientId);\n const clientSecret =\n overrides.clientSecret ?? readFirst(env, bootstrapEnv.clientSecret);\n const hasAuthSignal = Boolean(clientId || clientSecret);\n\n if (!hasAuthSignal) {\n return null;\n }\n\n if (!clientId || !clientSecret) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_BOOTSTRAP_INCOMPLETE\",\n message:\n \"Infisical runtime bootstrap requires both INFISICAL_CLIENT_ID and INFISICAL_CLIENT_SECRET.\",\n });\n }\n\n return {\n apiUrl:\n overrides.apiUrl ??\n readFirst(env, bootstrapEnv.apiUrl) ??\n INFISICAL_RUNTIME_DEFAULT_API_URL,\n projectId:\n overrides.projectId ??\n readFirst(env, bootstrapEnv.projectId) ??\n INFISICAL_RUNTIME_DEFAULT_PROJECT_ID,\n clientId,\n clientSecret,\n environment: normalizeInfisicalEnvironment(\n overrides.environment ?? readFirst(env, bootstrapEnv.environment)\n ),\n organizationSlug:\n overrides.organizationSlug ??\n readFirst(env, bootstrapEnv.organizationSlug),\n };\n}\n\nexport function isInfisicalRuntimeDisabled(\n env: InfisicalRuntimeEnv = {}\n): boolean {\n return INFISICAL_RUNTIME_MANIFEST.bootstrapEnv.disabled.some((name) =>\n isTruthyEnv(env[name])\n );\n}\n\nexport async function hydrateInfisicalRuntimeEnv(\n options: InfisicalRuntimeHydrateOptions\n): Promise<InfisicalRuntimeHydrationResult> {\n const env = options.env ?? {};\n const baseBootstrap = readInfisicalRuntimeBootstrap(env, options.bootstrap);\n const bootstrap = baseBootstrap\n ? {\n ...baseBootstrap,\n ...Object.fromEntries(\n Object.entries(options.bootstrap ?? {}).filter(\n ([, value]) => value !== undefined\n )\n ),\n apiUrl: trimTrailingSlash(\n options.bootstrap?.apiUrl ?? baseBootstrap.apiUrl\n ),\n }\n : null;\n if (!bootstrap) {\n return {\n status: \"disabled\",\n surfaceId: options.surfaceId,\n values: {},\n sourcePaths: [],\n };\n }\n\n const surface = findInfisicalRuntimeSurface(options.surfaceId);\n if (!surface) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNKNOWN_SURFACE\",\n message: `Unknown Lucern Infisical runtime surface: ${options.surfaceId}.`,\n });\n }\n const fallbackDelivery = (surface as { fallback?: string }).fallback;\n if (\n surface.delivery !== \"runtime_fetch\" &&\n fallbackDelivery !== \"runtime_fetch\"\n ) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNSUPPORTED_SURFACE_DELIVERY\",\n message: `${surface.id} uses ${surface.delivery}; runtime fetch is only valid for runtime_fetch surfaces or surfaces with a runtime_fetch fallback.`,\n });\n }\n\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_FETCH_UNAVAILABLE\",\n message:\n \"No fetch implementation is available for Infisical runtime hydration.\",\n });\n }\n\n const token = await loginWithUniversalAuth(bootstrap, fetchImpl);\n const values: Record<string, string> = {};\n const missingRequired: string[] = [];\n const sourcePaths = new Set<string>();\n\n const variables = options.includeGeneratedSurfaceVariables\n ? generatedSurfaceVariables(options.surfaceId)\n : contractSurfaceVariables(surface.sourcePathIds);\n\n for (const runtimeVariable of variables) {\n sourcePaths.add(runtimeVariable.secretPath);\n const secretValue = await readVariableSecret({\n bootstrap,\n fetchImpl,\n token,\n secretPath: runtimeVariable.secretPath,\n variable: runtimeVariable,\n });\n\n if (!secretValue) {\n if (runtimeVariable.required) {\n missingRequired.push(runtimeVariable.name);\n }\n continue;\n }\n\n values[runtimeVariable.name] = secretValue.value;\n for (const alias of runtimeVariable.aliases ?? []) {\n values[alias] = secretValue.value;\n }\n }\n\n if (missingRequired.length > 0) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_REQUIRED_SECRETS_MISSING\",\n message: `Missing required Infisical runtime secrets: ${missingRequired.join(\", \")}.`,\n });\n }\n\n return {\n status: \"hydrated\",\n surfaceId: options.surfaceId,\n environment: bootstrap.environment,\n values,\n sourcePaths: [...sourcePaths],\n };\n}\n\nexport function applyInfisicalRuntimeEnv(\n result: Pick<InfisicalRuntimeHydrationResult, \"values\">,\n targetEnv: InfisicalRuntimeEnv,\n options: { overrideExisting?: boolean } = {}\n): void {\n for (const [key, value] of Object.entries(result.values)) {\n if (options.overrideExisting || !targetEnv[key]) {\n targetEnv[key] = value;\n }\n }\n}\n\nfunction normalizeInfisicalEnvironment(\n value: string | undefined\n): InfisicalRuntimeEnvironment {\n if (value === \"dev\" || value === \"staging\" || value === \"prod\") {\n return value;\n }\n if (value === \"development\") {\n return \"dev\";\n }\n if (value === \"production\") {\n return \"prod\";\n }\n return \"prod\";\n}\n\nasync function loginWithUniversalAuth(\n bootstrap: InfisicalRuntimeBootstrapConfig,\n fetchImpl: InfisicalRuntimeFetch\n): Promise<string> {\n const response = await fetchImpl(\n `${trimTrailingSlash(bootstrap.apiUrl)}/api/v1/auth/universal-auth/login`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n clientId: bootstrap.clientId,\n clientSecret: bootstrap.clientSecret,\n ...(bootstrap.organizationSlug\n ? { organizationSlug: bootstrap.organizationSlug }\n : {}),\n }),\n }\n );\n\n const body = await readJson(response);\n if (!response.ok) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNIVERSAL_AUTH_FAILED\",\n status: response.status,\n message: `Infisical Universal Auth failed with HTTP ${response.status}: ${messageFromBody(body)}`,\n });\n }\n\n const accessToken = readNestedString(body, [\"accessToken\"]);\n if (!accessToken) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNIVERSAL_AUTH_INVALID_RESPONSE\",\n message: \"Infisical Universal Auth response did not include accessToken.\",\n });\n }\n return accessToken;\n}\n\nasync function readVariableSecret(args: {\n bootstrap: InfisicalRuntimeBootstrapConfig;\n fetchImpl: InfisicalRuntimeFetch;\n token: string;\n secretPath: string;\n variable: Pick<InfisicalRuntimeVariable, \"name\" | \"aliases\">;\n}): Promise<{ name: string; value: string } | null> {\n const names = [args.variable.name, ...(args.variable.aliases ?? [])];\n for (const name of names) {\n const value = await readSecretValue({\n bootstrap: args.bootstrap,\n fetchImpl: args.fetchImpl,\n token: args.token,\n secretPath: args.secretPath,\n name,\n optional: true,\n });\n if (value) {\n return { name, value };\n }\n }\n return null;\n}\n\nfunction contractSurfaceVariables(\n sourcePathIds: readonly InfisicalRuntimePathId[]\n): RuntimeHydrationVariable[] {\n return sourcePathIds.flatMap((pathId) => {\n const path = findInfisicalRuntimePath(pathId);\n if (!path) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNKNOWN_PATH\",\n message: `Unknown Lucern Infisical runtime path: ${pathId}.`,\n });\n }\n return path.variables.map((variable) => ({\n ...variable,\n secretPath: path.secretPath,\n }));\n });\n}\n\nfunction generatedSurfaceVariables(\n surfaceId: InfisicalRuntimeSurfaceId\n): RuntimeHydrationVariable[] {\n const surface = GENERATED_INFISICAL_RUNTIME_ENV.surfaces[surfaceId];\n if (!surface) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_UNKNOWN_SURFACE\",\n message: `Unknown generated Lucern Infisical runtime surface: ${surfaceId}.`,\n });\n }\n return surface.variables.map(generatedVariableToRuntimeVariable);\n}\n\nfunction generatedVariableToRuntimeVariable(\n variable: GeneratedInfisicalEnvVariable\n): RuntimeHydrationVariable {\n const aliases = new Set<string>([\n ...variable.envNames.filter((name) => name !== variable.canonicalName),\n ...variable.aliases,\n ]);\n return {\n name: variable.canonicalName,\n required: variable.required,\n secret: variable.secret,\n public: variable.public,\n aliases: [...aliases],\n description: variable.description,\n secretPath: variable.sourcePath,\n };\n}\n\nasync function readSecretValue(args: {\n bootstrap: InfisicalRuntimeBootstrapConfig;\n fetchImpl: InfisicalRuntimeFetch;\n token: string;\n secretPath: string;\n name: string;\n optional: boolean;\n}): Promise<string | null> {\n const params = new URLSearchParams({\n projectId: args.bootstrap.projectId,\n environment: args.bootstrap.environment,\n secretPath: args.secretPath,\n type: \"shared\",\n viewSecretValue: \"true\",\n expandSecretReferences: \"true\",\n includeImports: \"true\",\n });\n const response = await args.fetchImpl(\n `${trimTrailingSlash(args.bootstrap.apiUrl)}/api/v4/secrets/${encodeURIComponent(args.name)}?${params.toString()}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${args.token}`,\n },\n }\n );\n\n const body = await readJson(response);\n if (response.status === 404 && args.optional) {\n return null;\n }\n if (!response.ok) {\n throw new InfisicalRuntimeError({\n code: \"INFISICAL_SECRET_READ_FAILED\",\n status: response.status,\n message: `Infisical secret ${args.name} read failed with HTTP ${response.status}: ${messageFromBody(body)}`,\n });\n }\n\n return readNestedString(body, [\"secret\", \"secretValue\"]);\n}\n\nasync function readJson(response: Response): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n debugInfisicalRuntimeFallback(\"response.json\", error);\n return undefined;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readNestedString(value: unknown, path: readonly string[]): string | null {\n let current: unknown = value;\n for (const key of path) {\n if (!isRecord(current) || !(key in current)) {\n return null;\n }\n current = current[key];\n }\n return typeof current === \"string\" && current.length > 0 ? current : null;\n}\n\nfunction messageFromBody(body: unknown): string {\n if (!isRecord(body)) {\n return \"no response body\";\n }\n for (const key of [\"message\", \"error\", \"errorMessage\"]) {\n if (typeof body[key] === \"string\") {\n return body[key];\n }\n }\n return JSON.stringify(body);\n}\n\nfunction readFirst(\n env: InfisicalRuntimeEnv,\n names: readonly string[]\n): string | undefined {\n for (const name of names) {\n const value = env[name]?.trim();\n if (value) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n return [\"1\", \"true\", \"yes\", \"on\"].includes(value?.toLowerCase() ?? \"\");\n}\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/u, \"\");\n}\n\nfunction debugInfisicalRuntimeFallback(message: string, error: unknown): void {\n const env = (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process?.env;\n if (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG !== \"1\" &&\n env?.LUCERN_INFISICAL_RUNTIME_DEBUG !== \"1\"\n ) {\n return;\n }\n console.debug(`[infisical-runtime] ${message}`, {\n error: formatInfisicalRuntimeError(error),\n });\n}\n\nfunction formatInfisicalRuntimeError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (typeof error === \"number\" || typeof error === \"boolean\") {\n return String(error);\n }\n if (error && typeof error === \"object\") {\n const keys = Object.keys(error).slice(0, 5);\n if (keys.length > 0) {\n return `Unknown Infisical runtime error object with keys: ${keys.join(\", \")}`;\n }\n }\n return \"Unknown Infisical runtime error shape\";\n}\n"]}
|
package/dist/jobsClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/authContext.ts","../src/coreClient.ts","../src/sdkSurface.ts","../src/boundaryClientSurface.ts","../src/jobsClient.ts"],"names":["isRecord"],"mappings":"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","file":"jobsClient.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 { 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","import {\n createGatewayRequestClient,\n type GatewayClientConfig,\n randomIdempotencyKey,\n toQueryString,\n} from \"./coreClient\";\nimport {\n cleanRequiredString,\n knownPayload,\n listResultFromEnvelope,\n} from \"./boundaryClientSurface\";\nimport { mapGatewayData } from \"./sdkSurface\";\nimport type { JsonObject, ListResult } from \"./types\";\n\nexport type JobsClientConfig = GatewayClientConfig;\n\nexport const JOBS_FIELDS = [\n \"tenantId\",\n \"workspaceId\",\n \"principalId\",\n \"topicId\",\n \"worktreeId\",\n \"jobId\",\n \"jobType\",\n \"payload\",\n \"status\",\n \"attempt\",\n \"runId\",\n \"queue\",\n \"priority\",\n \"error\",\n \"metadata\",\n \"limit\",\n \"cursor\",\n] as const;\n\nexport type JobStatus =\n | \"queued\"\n | \"claimed\"\n | \"running\"\n | \"succeeded\"\n | \"failed\"\n | \"cancelled\";\n\nexport type JobRecord = {\n jobId: string;\n tenantId: string;\n workspaceId?: string;\n principalId?: string;\n topicId?: string;\n worktreeId?: string;\n jobType: string;\n payload?: JsonObject | null;\n status: JobStatus | string;\n attempt?: number;\n runId?: string;\n queue?: string;\n priority?: string;\n error?: string;\n metadata?: JsonObject | null;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type JobRunRecord = {\n runId: string;\n jobId?: string;\n tenantId: string;\n workspaceId?: string;\n status: JobStatus | string;\n startedAt?: number;\n finishedAt?: number;\n metadata?: JsonObject | null;\n};\n\nexport type JobsScope = {\n tenantId: string;\n workspaceId?: string;\n principalId?: string;\n topicId?: string;\n worktreeId?: string;\n jobType?: string;\n status?: JobStatus;\n queue?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type EnqueueJobInput = JobsScope & {\n jobType: string;\n payload?: JsonObject;\n priority?: string;\n metadata?: JsonObject;\n};\n\nexport type ClaimJobInput = JobsScope & {\n jobType?: string;\n};\n\nexport type UpdateJobStatusInput = JobsScope & {\n jobId: string;\n status: JobStatus;\n attempt?: number;\n runId?: string;\n error?: string;\n metadata?: JsonObject;\n};\n\nexport type RetryJobInput = JobsScope & {\n jobId: string;\n metadata?: JsonObject;\n};\n\nexport type RecordJobRunStartInput = JobsScope & {\n jobId?: string;\n runId?: string;\n jobType?: string;\n metadata?: JsonObject;\n};\n\nexport type RecordJobRunFinishInput = JobsScope & {\n runId: string;\n jobId?: string;\n status: JobStatus;\n error?: string;\n metadata?: JsonObject;\n};\n\nexport type JobsResponse = ListResult<JobRecord, \"jobs\">;\n\nfunction query(input: JobsScope) {\n return {\n tenantId: cleanRequiredString(input.tenantId, \"tenantId\"),\n workspaceId: input.workspaceId,\n principalId: input.principalId,\n topicId: input.topicId,\n worktreeId: input.worktreeId,\n jobType: input.jobType,\n status: input.status,\n queue: input.queue,\n limit: input.limit,\n cursor: input.cursor,\n };\n}\n\nfunction body(input: Record<string, unknown>, operation: string) {\n return knownPayload(input, JOBS_FIELDS, operation);\n}\n\nexport function createJobsClient(config: JobsClientConfig = {}) {\n const gateway = createGatewayRequestClient(config);\n\n return {\n enqueue(input: EnqueueJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobType, \"jobType\");\n return gateway.request<JobRecord>({\n path: \"/api/platform/v1/jobs\",\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.enqueue\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n list(input: JobsScope) {\n return gateway.request<JobsResponse>({\n path: `/api/platform/v1/jobs${toQueryString(query(input))}`,\n }).then((response) =>\n mapGatewayData(response, (data) =>\n listResultFromEnvelope<JobRecord, \"jobs\">(data, \"jobs\")\n )\n );\n },\n\n claim(input: ClaimJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n return gateway.request<JobRecord>({\n path: \"/api/platform/v1/jobs/claim\",\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.claim\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n updateStatus(input: UpdateJobStatusInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobId, \"jobId\");\n return gateway.request<JobRecord>({\n path: `/api/platform/v1/jobs/${encodeURIComponent(input.jobId)}/status`,\n method: \"PATCH\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.updateStatus\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n retry(input: RetryJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobId, \"jobId\");\n return gateway.request<JobRecord>({\n path: `/api/platform/v1/jobs/${encodeURIComponent(input.jobId)}/retry`,\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.retry\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n recordRunStart(input: RecordJobRunStartInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n return gateway.request<JobRunRecord>({\n path: \"/api/platform/v1/jobs/runs/start\",\n method: \"POST\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.recordRunStart\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n recordRunFinish(input: RecordJobRunFinishInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.runId, \"runId\");\n return gateway.request<JobRunRecord>({\n path: `/api/platform/v1/jobs/runs/${encodeURIComponent(\n input.runId\n )}/finish`,\n method: \"POST\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.recordRunFinish\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/authContext.ts","../src/coreClient.ts","../src/sdkSurface.ts","../src/boundaryClientSurface.ts","../src/jobsClient.ts"],"names":["isRecord"],"mappings":"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","file":"jobsClient.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 | \"clerk_alias_missing\"\n | \"clerk_alias_unrecognized\"\n | \"policy_denied\"\n | \"policy_unavailable\"\n | \"policy_unknown\";\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 { 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","import {\n createGatewayRequestClient,\n type GatewayClientConfig,\n randomIdempotencyKey,\n toQueryString,\n} from \"./coreClient\";\nimport {\n cleanRequiredString,\n knownPayload,\n listResultFromEnvelope,\n} from \"./boundaryClientSurface\";\nimport { mapGatewayData } from \"./sdkSurface\";\nimport type { JsonObject, ListResult } from \"./types\";\n\nexport type JobsClientConfig = GatewayClientConfig;\n\nexport const JOBS_FIELDS = [\n \"tenantId\",\n \"workspaceId\",\n \"principalId\",\n \"topicId\",\n \"worktreeId\",\n \"jobId\",\n \"jobType\",\n \"payload\",\n \"status\",\n \"attempt\",\n \"runId\",\n \"queue\",\n \"priority\",\n \"error\",\n \"metadata\",\n \"limit\",\n \"cursor\",\n] as const;\n\nexport type JobStatus =\n | \"queued\"\n | \"claimed\"\n | \"running\"\n | \"succeeded\"\n | \"failed\"\n | \"cancelled\";\n\nexport type JobRecord = {\n jobId: string;\n tenantId: string;\n workspaceId?: string;\n principalId?: string;\n topicId?: string;\n worktreeId?: string;\n jobType: string;\n payload?: JsonObject | null;\n status: JobStatus | string;\n attempt?: number;\n runId?: string;\n queue?: string;\n priority?: string;\n error?: string;\n metadata?: JsonObject | null;\n createdAt?: number;\n updatedAt?: number;\n};\n\nexport type JobRunRecord = {\n runId: string;\n jobId?: string;\n tenantId: string;\n workspaceId?: string;\n status: JobStatus | string;\n startedAt?: number;\n finishedAt?: number;\n metadata?: JsonObject | null;\n};\n\nexport type JobsScope = {\n tenantId: string;\n workspaceId?: string;\n principalId?: string;\n topicId?: string;\n worktreeId?: string;\n jobType?: string;\n status?: JobStatus;\n queue?: string;\n limit?: number;\n cursor?: string;\n};\n\nexport type EnqueueJobInput = JobsScope & {\n jobType: string;\n payload?: JsonObject;\n priority?: string;\n metadata?: JsonObject;\n};\n\nexport type ClaimJobInput = JobsScope & {\n jobType?: string;\n};\n\nexport type UpdateJobStatusInput = JobsScope & {\n jobId: string;\n status: JobStatus;\n attempt?: number;\n runId?: string;\n error?: string;\n metadata?: JsonObject;\n};\n\nexport type RetryJobInput = JobsScope & {\n jobId: string;\n metadata?: JsonObject;\n};\n\nexport type RecordJobRunStartInput = JobsScope & {\n jobId?: string;\n runId?: string;\n jobType?: string;\n metadata?: JsonObject;\n};\n\nexport type RecordJobRunFinishInput = JobsScope & {\n runId: string;\n jobId?: string;\n status: JobStatus;\n error?: string;\n metadata?: JsonObject;\n};\n\nexport type JobsResponse = ListResult<JobRecord, \"jobs\">;\n\nfunction query(input: JobsScope) {\n return {\n tenantId: cleanRequiredString(input.tenantId, \"tenantId\"),\n workspaceId: input.workspaceId,\n principalId: input.principalId,\n topicId: input.topicId,\n worktreeId: input.worktreeId,\n jobType: input.jobType,\n status: input.status,\n queue: input.queue,\n limit: input.limit,\n cursor: input.cursor,\n };\n}\n\nfunction body(input: Record<string, unknown>, operation: string) {\n return knownPayload(input, JOBS_FIELDS, operation);\n}\n\nexport function createJobsClient(config: JobsClientConfig = {}) {\n const gateway = createGatewayRequestClient(config);\n\n return {\n enqueue(input: EnqueueJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobType, \"jobType\");\n return gateway.request<JobRecord>({\n path: \"/api/platform/v1/jobs\",\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.enqueue\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n list(input: JobsScope) {\n return gateway.request<JobsResponse>({\n path: `/api/platform/v1/jobs${toQueryString(query(input))}`,\n }).then((response) =>\n mapGatewayData(response, (data) =>\n listResultFromEnvelope<JobRecord, \"jobs\">(data, \"jobs\")\n )\n );\n },\n\n claim(input: ClaimJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n return gateway.request<JobRecord>({\n path: \"/api/platform/v1/jobs/claim\",\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.claim\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n updateStatus(input: UpdateJobStatusInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobId, \"jobId\");\n return gateway.request<JobRecord>({\n path: `/api/platform/v1/jobs/${encodeURIComponent(input.jobId)}/status`,\n method: \"PATCH\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.updateStatus\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n retry(input: RetryJobInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.jobId, \"jobId\");\n return gateway.request<JobRecord>({\n path: `/api/platform/v1/jobs/${encodeURIComponent(input.jobId)}/retry`,\n method: \"POST\",\n body: body(input as unknown as Record<string, unknown>, \"jobs.retry\"),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n recordRunStart(input: RecordJobRunStartInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n return gateway.request<JobRunRecord>({\n path: \"/api/platform/v1/jobs/runs/start\",\n method: \"POST\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.recordRunStart\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n\n recordRunFinish(input: RecordJobRunFinishInput, idempotencyKey?: string) {\n cleanRequiredString(input.tenantId, \"tenantId\");\n cleanRequiredString(input.runId, \"runId\");\n return gateway.request<JobRunRecord>({\n path: `/api/platform/v1/jobs/runs/${encodeURIComponent(\n input.runId\n )}/finish`,\n method: \"POST\",\n body: body(\n input as unknown as Record<string, unknown>,\n \"jobs.recordRunFinish\"\n ),\n idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),\n });\n },\n };\n}\n"]}
|