@fabricorg/platform-host 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +21 -0
- package/README.md +26 -0
- package/dist/index.cjs +698 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +187 -0
- package/dist/index.d.ts +187 -0
- package/dist/index.js +694 -0
- package/dist/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/host.ts","../src/memory-store.ts","../src/postgres-store.ts"],"names":["result"],"mappings":"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","file":"index.js","sourcesContent":["import {\n\tAdapterRegistry,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tresolveAction,\n\tresolveStateMachine,\n\tvalidateTransition,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionDefinition,\n\tActionId,\n\tActionStatus,\n\tAssetEventEnvelope,\n\tRuntimePolicyDefinition,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionAuthorizationInput,\n\tAdapterInvocationRecord,\n\tExecuteActionResult,\n\tGovernedActionHost,\n\tPendingAssetEvent,\n\tPlatformHostOptions,\n\tSubmitActionInput,\n\tSubmitActionResult,\n} from \"./types\";\n\nconst DEFAULT_EXTRACT_EVENTS = (data: Record<string, unknown>): PendingAssetEvent[] => {\n\tconst value = data._events;\n\treturn Array.isArray(value) ? (value as PendingAssetEvent[]) : [];\n};\n\nexport function createGovernedActionHost<TDb>(\n\toptions: PlatformHostOptions<TDb>,\n): GovernedActionHost {\n\tconst adapters = new AdapterRegistry();\n\tfor (const adapter of options.adapters ?? []) adapters.register(adapter);\n\tconst now = options.now ?? (() => new Date());\n\tconst extractEvents = options.extractEvents ?? DEFAULT_EXTRACT_EVENTS;\n\n\tasync function submitAction(input: SubmitActionInput): Promise<SubmitActionResult> {\n\t\tconst action = resolveAction(input.actionId);\n\t\tif (!action) throw new Error(`Unknown action: ${input.actionId}`);\n\t\tconst authorizationInput = toAuthorizationInput(action, input);\n\t\tif (!(await options.authorization.checkEntitlement(authorizationInput))) {\n\t\t\tthrow new Error(`Module \"${action.namespace}\" is not enabled for tenant ${input.tenantId}`);\n\t\t}\n\t\tif (!(await options.authorization.authorize(authorizationInput))) {\n\t\t\tthrow new Error(`Actor ${input.actorId} is not authorized for action ${input.actionId}`);\n\t\t}\n\n\t\tconst actionInvocationId = createFabricId(\"act\");\n\t\tconst correlationId = input.correlationId ?? createFabricId(\"corr\");\n\t\tconst workflowId = `action-invocation-${actionInvocationId}`;\n\t\tawait options.store.createActionInvocation({\n\t\t\tid: actionInvocationId,\n\t\t\ttenantId: input.tenantId,\n\t\t\tspaceId: input.spaceId,\n\t\t\tactionId: input.actionId,\n\t\t\tactionVersion: action.version,\n\t\t\tactorId: input.actorId,\n\t\t\tactorType: input.actorType,\n\t\t\tstatus: \"pending\",\n\t\t\tparameters: input.parameters,\n\t\t\tresult: {},\n\t\t\tcorrelationId,\n\t\t\t...(input.causationId ? { causationId: input.causationId } : {}),\n\t\t});\n\n\t\tif (options.dispatcher) {\n\t\t\ttry {\n\t\t\t\tconst dispatched = await options.dispatcher.dispatch({\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\ttenantId: input.tenantId,\n\t\t\t\t\tspaceId: input.spaceId,\n\t\t\t\t\tworkflowId,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tworkflowId: dispatched.workflowId,\n\t\t\t\t\t...(dispatched.runId ? { runId: dispatched.runId } : {}),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst message = errorMessage(error);\n\t\t\t\tawait options.store.updateActionInvocation(\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\tinput.tenantId,\n\t\t\t\t\tinput.spaceId,\n\t\t\t\t\t{ status: \"failed\", error: message },\n\t\t\t\t);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst executed = await executeInvocation(\n\t\t\tactionInvocationId,\n\t\t\tinput.tenantId,\n\t\t\tinput.spaceId,\n\t\t);\n\t\treturn { ...executed, workflowId };\n\t}\n\n\tasync function executeInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ExecuteActionResult> {\n\t\tconst invocation = await options.store.getActionInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tif (isTerminal(invocation.status)) {\n\t\t\treturn {\n\t\t\t\tactionInvocationId,\n\t\t\t\tstatus: invocation.status,\n\t\t\t\tresult: invocation.result,\n\t\t\t\t...(invocation.error ? { error: invocation.error } : {}),\n\t\t\t};\n\t\t}\n\t\tconst action = resolveAction(invocation.actionId);\n\t\tif (!action) {\n\t\t\treturn fail(invocation, \"failed\", `Unknown action: ${invocation.actionId}`);\n\t\t}\n\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\tstatus: \"running\",\n\t\t});\n\n\t\tconst parsed = action.schema.safeParse(invocation.parameters);\n\t\tif (!parsed.success) {\n\t\t\tconst message = parsed.error.issues\n\t\t\t\t.map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n\t\t\t\t.join(\"; \");\n\t\t\treturn fail(invocation, \"validation_failed\", message);\n\t\t}\n\n\t\tconst authorizationInput = toAuthorizationInput(action, invocation);\n\t\tconst definitions = options.resolvePolicies\n\t\t\t? await options.resolvePolicies({\n\t\t\t\t\t...authorizationInput,\n\t\t\t\t\tdeclaredPolicyIds: action.policies ?? [],\n\t\t\t\t})\n\t\t\t: declaredPolicies(action.policies ?? []);\n\t\tconst outcomes = await evaluatePolicyDefinitions(definitions, {\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tactionInvocationId,\n\t\t\tactionId: action.actionId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tparameters: parsed.data,\n\t\t\tdb: options.store.db,\n\t\t\tservices: options.services,\n\t\t\tmode: \"execute\",\n\t\t});\n\t\tfor (const outcome of outcomes) {\n\t\t\tawait options.store.appendPolicyEvaluation({\n\t\t\t\tid: createFabricId(\"pol\"),\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\toutcome,\n\t\t\t\tcreatedAt: now(),\n\t\t\t});\n\t\t}\n\t\tconst aggregate = aggregatePolicyOutcomes(outcomes);\n\t\tif (aggregate?.result === \"block\") {\n\t\t\tconst reason = aggregate.reason ?? `Blocked by policy ${aggregate.policyId}`;\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ComplianceBlocked\",\n\t\t\t\tsubjectType: \"ActionInvocation\",\n\t\t\t\tsubjectId: actionInvocationId,\n\t\t\t\tpayload: { actionId: action.actionId, policyId: aggregate.policyId, reason },\n\t\t\t});\n\t\t\treturn fail(invocation, \"blocked_by_policy\", reason);\n\t\t}\n\n\t\tconst binding = action.stateMachine;\n\t\tif (binding) {\n\t\t\tconst entityId = binding.getEntityId(parsed.data);\n\t\t\tconst currentState = entityId\n\t\t\t\t? ((await options.store.getEntityState(\n\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\tentityId,\n\t\t\t\t\t)) ?? initialState(binding.entityType))\n\t\t\t\t: initialState(binding.entityType);\n\t\t\tconst targetState =\n\t\t\t\ttypeof binding.targetState === \"function\"\n\t\t\t\t\t? binding.targetState(parsed.data)\n\t\t\t\t\t: binding.targetState;\n\t\t\tconst transition = validateTransition(\n\t\t\t\tbinding.entityType,\n\t\t\t\tcurrentState,\n\t\t\t\ttargetState,\n\t\t\t\taction.actionId,\n\t\t\t);\n\t\t\tif (!transition.valid) {\n\t\t\t\treturn fail(invocation, \"failed\", transition.error ?? \"Invalid state transition\");\n\t\t\t}\n\t\t}\n\n\t\tlet data: Record<string, unknown>;\n\t\tlet domainEvents: PendingAssetEvent[] = [];\n\t\ttry {\n\t\t\tconst handlerResult = await options.store.transaction((db) =>\n\t\t\t\taction.handler\n\t\t\t\t\t? action.handler(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\t\t\t\tactorType: invocation.actorType,\n\t\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\tservices: options.services,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tparsed.data,\n\t\t\t\t\t\t)\n\t\t\t\t\t: Promise.resolve({ success: true, data: {} }),\n\t\t\t);\n\t\t\tif (!handlerResult.success) {\n\t\t\t\treturn fail(invocation, \"failed\", handlerResult.error ?? \"Action handler failed\");\n\t\t\t}\n\t\t\tdata = handlerResult.data ?? {};\n\t\t\tdomainEvents = extractEvents(data);\n\t\t\tif (action.eventPhase !== \"after_adapters\") {\n\t\t\t\tfor (const event of domainEvents) await appendEvent(invocation, event);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn fail(invocation, \"failed\", errorMessage(error));\n\t\t}\n\n\t\tfor (const step of action.adapterSteps ?? []) {\n\t\t\tconst input = step.getInput(parsed.data, data);\n\t\t\tif (!input) continue;\n\t\t\tconst adapter = adapters.require(step.adapterType, step.operation);\n\t\t\tconst adapterInvocationId = createFabricId(\"adp\");\n\t\t\tconst adapterEventSubject = options.adapterEventSubject?.(\n\t\t\t\taction.actionId,\n\t\t\t\tparsed.data,\n\t\t\t\tdata,\n\t\t\t) ?? { subjectType: \"AdapterInvocation\", subjectId: adapterInvocationId };\n\t\t\tconst recordedInput = options.redactAdapterInput\n\t\t\t\t? options.redactAdapterInput(\n\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\tstep.adapterType,\n\t\t\t\t\t\tstep.operation,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t)\n\t\t\t\t: input;\n\t\t\tconst startedAt = now();\n\t\t\tconst record: AdapterInvocationRecord = {\n\t\t\t\tid: adapterInvocationId,\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\tadapterType: step.adapterType,\n\t\t\t\toperation: step.operation,\n\t\t\t\tvendor: adapter.vendor,\n\t\t\t\tstatus: \"running\",\n\t\t\t\tinput: recordedInput,\n\t\t\t\tattempt: 1,\n\t\t\t\tcreatedAt: startedAt,\n\t\t\t\tupdatedAt: startedAt,\n\t\t\t};\n\t\t\tawait options.store.createAdapterInvocation(record);\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"AdapterInvocationStarted\",\n\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst result = await executeWithAdapterRetry({\n\t\t\t\t\tpolicy: step.retryPolicy ?? adapter.retryPolicy,\n\t\t\t\t\tdefaultIdempotent: adapter.idempotent,\n\t\t\t\t\texecute: async (attempt, maxAttempts) => {\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn adapter.execute(input, {\n\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t...(invocation.causationId\n\t\t\t\t\t\t\t\t? { causationId: invocation.causationId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tisSuccessful: (result) => result.success,\n\t\t\t\t\tgetError: (result) => result.error,\n\t\t\t\t});\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: result.error ?? \"Adapter failed\",\n\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t});\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"AdapterInvocationFailed\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t\t\t});\n\t\t\t\t\treturn fail(invocation, \"failed\", result.error ?? \"Adapter failed\");\n\t\t\t\t}\n\t\t\t\tconst resultRecord = result as unknown as Record<string, unknown>;\n\t\t\t\tconst output = isRecord(resultRecord.output)\n\t\t\t\t\t? resultRecord.output\n\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(resultRecord).filter(\n\t\t\t\t\t\t\t\t([key]) => key !== \"success\" && key !== \"error\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"succeeded\",\n\t\t\t\t\toutput,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"AdapterInvocationSucceeded\",\n\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\tinput: recordedInput,\n\t\t\t\t\t\toutput,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst message = errorMessage(error);\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: message,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\treturn fail(invocation, \"failed\", message);\n\t\t\t}\n\t\t}\n\n\t\tif (action.eventPhase === \"after_adapters\") {\n\t\t\tfor (const event of domainEvents) await appendEvent(invocation, event);\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data);\n\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\tstatus: \"completed\",\n\t\t\tresult,\n\t\t});\n\t\treturn { actionInvocationId, status: \"completed\", result };\n\t}\n\n\tasync function appendEvent(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\tactorId: string;\n\t\t\tactorType: string;\n\t\t\tcorrelationId: string;\n\t\t\tcausationId?: string;\n\t\t},\n\t\tevent: PendingAssetEvent,\n\t): Promise<void> {\n\t\tconst timestamp = now();\n\t\tconst envelope: AssetEventEnvelope = {\n\t\t\tid: createFabricId(\"evt\"),\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\teventType: event.eventType,\n\t\t\teventSchemaVersion: event.eventSchemaVersion ?? 1,\n\t\t\tsubjectType: event.subjectType,\n\t\t\tsubjectId: event.subjectId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tactionInvocationId: invocation.id,\n\t\t\tpayload: event.payload,\n\t\t\tsequence: await options.store.nextEventSequence(\n\t\t\t\tinvocation.tenantId,\n\t\t\t\tinvocation.spaceId,\n\t\t\t),\n\t\t\toccurredAt: timestamp,\n\t\t\trecordedAt: timestamp,\n\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t};\n\t\tawait options.store.appendEvent(envelope);\n\t}\n\n\tasync function fail(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t},\n\t\tstatus: Extract<ActionStatus, \"failed\" | \"blocked_by_policy\" | \"validation_failed\">,\n\t\terror: string,\n\t): Promise<ExecuteActionResult> {\n\t\tawait options.store.updateActionInvocation(\n\t\t\tinvocation.id,\n\t\t\tinvocation.tenantId,\n\t\t\tinvocation.spaceId,\n\t\t\t{ status, error },\n\t\t);\n\t\treturn { actionInvocationId: invocation.id, status, error };\n\t}\n\n\treturn { submitAction, executeInvocation };\n}\n\nfunction toAuthorizationInput(\n\taction: ActionDefinition,\n\tinput: {\n\t\ttenantId: string;\n\t\tspaceId: string;\n\t\tactorId: string;\n\t\tactorType: import(\"@fabricorg/platform\").ActorType;\n\t},\n): ActionAuthorizationInput {\n\treturn {\n\t\tactionId: action.actionId,\n\t\tnamespace: action.namespace,\n\t\trequiredPermissions: action.requiredPermissions ?? [],\n\t\trequiredRoles: action.requiredRoles ?? [],\n\t\ttenantId: input.tenantId,\n\t\tspaceId: input.spaceId,\n\t\tactorId: input.actorId,\n\t\tactorType: input.actorType,\n\t};\n}\n\nfunction declaredPolicies(policyIds: readonly string[]): RuntimePolicyDefinition[] {\n\treturn policyIds.map((policyId) => ({\n\t\tpolicyId: policyId as `${string}.v${number}`,\n\t\tpolicyVersion: Number(policyId.split(\".v\").at(-1) ?? 1),\n\t\tkind: \"code\",\n\t\tcodeEvaluatorPolicyId: policyId as `${string}.v${number}`,\n\t}));\n}\n\nfunction initialState(entityType: string): string {\n\tconst machine = resolveStateMachine(entityType);\n\treturn Object.values(machine?.states ?? {}).find((state) => state.stateClass === \"initial\")?.id ?? \"none\";\n}\n\nfunction isTerminal(status: ActionStatus): boolean {\n\treturn [\"completed\", \"failed\", \"blocked_by_policy\", \"validation_failed\"].includes(status);\n}\n\nfunction withoutPrivateHostFields(data: Record<string, unknown>): Record<string, unknown> {\n\tconst { _events: _ignored, ...result } = data;\n\treturn result;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tCreateActionInvocationInput,\n\tPlatformHostStore,\n\tPolicyEvaluationRecord,\n} from \"./types\";\n\nexport class MemoryPlatformHostStore<TDb> implements PlatformHostStore<TDb> {\n\treadonly invocations: ActionInvocationRecord[] = [];\n\treadonly policyEvaluations: PolicyEvaluationRecord[] = [];\n\treadonly adapterInvocations: AdapterInvocationRecord[] = [];\n\treadonly events: AssetEventEnvelope[] = [];\n\n\tconstructor(readonly db: TDb) {}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst now = new Date();\n\t\tconst record = { ...input, createdAt: now, updatedAt: now };\n\t\tthis.invocations.push(record);\n\t\treturn record;\n\t}\n\n\tasync getActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined> {\n\t\treturn this.invocations.find(\n\t\t\t(record) => record.id === id && record.tenantId === tenantId && record.spaceId === spaceId,\n\t\t);\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\">>,\n\t): Promise<void> {\n\t\tconst record = await this.getActionInvocation(id, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${id}`);\n\t\tObject.assign(record, patch, { updatedAt: new Date() });\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tthis.policyEvaluations.push(record);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tthis.adapterInvocations.push(record);\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tconst record = this.adapterInvocations.find((candidate) => candidate.id === id);\n\t\tif (!record) throw new Error(`AdapterInvocation not found: ${id}`);\n\t\tObject.assign(record, patch);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tthis.events.push(event);\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\treturn (\n\t\t\tthis.events.filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)\n\t\t\t\t.length + 1\n\t\t);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined> {\n\t\tlet state: string | undefined;\n\t\tfor (const event of this.events) {\n\t\t\tif (\n\t\t\t\tevent.tenantId !== tenantId ||\n\t\t\t\tevent.spaceId !== spaceId ||\n\t\t\t\tevent.subjectType !== entityType ||\n\t\t\t\tevent.subjectId !== entityId\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst candidate = (event.payload as { toState?: unknown } | undefined)?.toState;\n\t\t\tif (typeof candidate === \"string\") state = candidate;\n\t\t}\n\t\treturn state;\n\t}\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tCreateActionInvocationInput,\n\tPlatformHostStore,\n\tPolicyEvaluationRecord,\n} from \"./types\";\n\nexport interface PlatformHostSqlResult<Row = Record<string, unknown>> {\n\trows: Row[];\n}\n\n/** Structural subset implemented by `pg.Pool` and Lakebase-compatible clients. */\nexport interface PlatformHostSqlClient {\n\tquery<Row = Record<string, unknown>>(\n\t\tsql: string,\n\t\tvalues?: unknown[],\n\t): Promise<PlatformHostSqlResult<Row>>;\n}\n\n/** Durable mutation-pipeline ledger for Databricks Lakebase or standard Postgres. */\nexport class PostgresPlatformHostStore<TDb> implements PlatformHostStore<TDb> {\n\tconstructor(\n\t\treadonly db: TDb,\n\t\tprivate readonly sql: PlatformHostSqlClient,\n\t) {}\n\n\tasync ensureSchema(): Promise<void> {\n\t\tawait this.sql.query(`\n\t\t\tCREATE SCHEMA IF NOT EXISTS fabric_platform;\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.action_invocations (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\taction_id text NOT NULL, action_version integer NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, status text NOT NULL,\n\t\t\t\tparameters jsonb NOT NULL, result jsonb NOT NULL DEFAULT '{}'::jsonb,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text, error text,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.policy_evaluations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, outcome jsonb NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.adapter_invocations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, adapter_type text NOT NULL,\n\t\t\t\toperation text NOT NULL, vendor text NOT NULL, status text NOT NULL,\n\t\t\t\tinput jsonb NOT NULL, output jsonb, error text, attempt integer NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.event_sequences (\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, next_sequence bigint NOT NULL,\n\t\t\t\tPRIMARY KEY (tenant_id, space_id)\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.asset_events (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\tevent_type text NOT NULL, event_schema_version integer NOT NULL,\n\t\t\t\tsubject_type text NOT NULL, subject_id text NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, action_invocation_id text,\n\t\t\t\tpayload jsonb NOT NULL, sequence bigint NOT NULL,\n\t\t\t\toccurred_at timestamptz NOT NULL, recorded_at timestamptz NOT NULL,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text,\n\t\t\t\tUNIQUE (tenant_id, space_id, sequence)\n\t\t\t);\n\t\t\tCREATE INDEX IF NOT EXISTS asset_events_subject_idx\n\t\t\t\tON fabric_platform.asset_events\n\t\t\t\t(tenant_id, space_id, subject_type, subject_id, sequence);\n\t\t`);\n\t}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst now = new Date();\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.action_invocations\n\t\t\t (id,tenant_id,space_id,action_id,action_version,actor_id,actor_type,status,\n\t\t\t parameters,result,correlation_id,causation_id,error,created_at,updated_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14,$14)`,\n\t\t\t[\n\t\t\t\tinput.id, input.tenantId, input.spaceId, input.actionId, input.actionVersion,\n\t\t\t\tinput.actorId, input.actorType, input.status, JSON.stringify(input.parameters),\n\t\t\t\tJSON.stringify(input.result), input.correlationId, input.causationId ?? null,\n\t\t\t\tinput.error ?? null, now,\n\t\t\t],\n\t\t);\n\t\treturn { ...input, createdAt: now, updatedAt: now };\n\t}\n\n\tasync getActionInvocation(id: string, tenantId: string, spaceId: string) {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.action_invocations\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toActionRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\">>,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t status=COALESCE($4,status), result=COALESCE($5::jsonb,result),\n\t\t\t error=CASE WHEN $6::boolean THEN $7 ELSE error END, updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId, patch.status ?? null,\n\t\t\t patch.result === undefined ? null : JSON.stringify(patch.result),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null],\n\t\t);\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.policy_evaluations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,outcome,created_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5::jsonb,$6)`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t JSON.stringify(record.outcome), record.createdAt],\n\t\t);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.adapter_invocations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,adapter_type,operation,vendor,status,\n\t\t\t input,output,error,attempt,created_at,updated_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14)`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t record.adapterType, record.operation, record.vendor, record.status,\n\t\t\t JSON.stringify(record.input), record.output ? JSON.stringify(record.output) : null,\n\t\t\t record.error ?? null, record.attempt, record.createdAt, record.updatedAt],\n\t\t);\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.adapter_invocations SET\n\t\t\t status=COALESCE($2,status), output=COALESCE($3::jsonb,output),\n\t\t\t error=CASE WHEN $4::boolean THEN $5 ELSE error END,\n\t\t\t attempt=COALESCE($6,attempt), updated_at=COALESCE($7,now()) WHERE id=$1`,\n\t\t\t[id, patch.status ?? null,\n\t\t\t patch.output === undefined ? null : JSON.stringify(patch.output),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null, patch.attempt ?? null,\n\t\t\t patch.updatedAt ?? null],\n\t\t);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.asset_events\n\t\t\t (id,tenant_id,space_id,event_type,event_schema_version,subject_type,subject_id,\n\t\t\t actor_id,actor_type,action_invocation_id,payload,sequence,occurred_at,recorded_at,\n\t\t\t correlation_id,causation_id)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16)`,\n\t\t\t[event.id, event.tenantId, event.spaceId, event.eventType, event.eventSchemaVersion,\n\t\t\t event.subjectType, event.subjectId, event.actorId, event.actorType,\n\t\t\t event.actionInvocationId ?? null, JSON.stringify(event.payload), event.sequence,\n\t\t\t event.occurredAt, event.recordedAt, event.correlationId, event.causationId ?? null],\n\t\t);\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\tconst result = await this.sql.query<{ next_sequence: string | number }>(\n\t\t\t`INSERT INTO fabric_platform.event_sequences (tenant_id,space_id,next_sequence)\n\t\t\t VALUES ($1,$2,1) ON CONFLICT (tenant_id,space_id) DO UPDATE\n\t\t\t SET next_sequence=fabric_platform.event_sequences.next_sequence+1\n\t\t\t RETURNING next_sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn Number(result.rows[0]!.next_sequence);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t) {\n\t\tconst result = await this.sql.query<{ state?: string }>(\n\t\t\t`SELECT payload->>'toState' AS state FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 AND subject_type=$3 AND subject_id=$4\n\t\t\t AND payload ? 'toState' ORDER BY sequence DESC LIMIT 1`,\n\t\t\t[tenantId, spaceId, entityType, entityId],\n\t\t);\n\t\treturn result.rows[0]?.state;\n\t}\n\n\tasync listEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 ORDER BY sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toEventRecord);\n\t}\n}\n\nfunction toActionRecord(row: Record<string, unknown>): ActionInvocationRecord {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\tactionId: String(row.action_id) as ActionInvocationRecord[\"actionId\"],\n\t\tactionVersion: Number(row.action_version),\n\t\tactorId: String(row.actor_id),\n\t\tactorType: String(row.actor_type) as ActionInvocationRecord[\"actorType\"],\n\t\tstatus: String(row.status) as ActionInvocationRecord[\"status\"],\n\t\tparameters: row.parameters as Record<string, unknown>,\n\t\tresult: row.result as Record<string, unknown>, correlationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t\t...(row.error ? { error: String(row.error) } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\tupdatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toEventRecord(row: Record<string, unknown>): AssetEventEnvelope {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\teventType: String(row.event_type), eventSchemaVersion: Number(row.event_schema_version),\n\t\tsubjectType: String(row.subject_type), subjectId: String(row.subject_id),\n\t\tactorId: String(row.actor_id), actorType: String(row.actor_type),\n\t\t...(row.action_invocation_id\n\t\t\t? { actionInvocationId: String(row.action_invocation_id) }\n\t\t\t: {}),\n\t\tpayload: row.payload, sequence: Number(row.sequence),\n\t\toccurredAt: new Date(row.occurred_at as string | Date),\n\t\trecordedAt: new Date(row.recorded_at as string | Date),\n\t\tcorrelationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t};\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fabricorg/platform-host",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Canonical governed mutation host for @fabricorg/platform: durable invocation, policy, state-machine, handler, event, and adapter orchestration behind persistence ports.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"fabric",
|
|
7
|
+
"action-runtime",
|
|
8
|
+
"governance",
|
|
9
|
+
"event-sourcing",
|
|
10
|
+
"workflow"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"author": "Fabric",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/Fabric-Pro/fabric-platform.git",
|
|
17
|
+
"directory": "packages/platform-host"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/Fabric-Pro/fabric-platform/tree/main/packages/platform-host#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/Fabric-Pro/fabric-platform/issues"
|
|
22
|
+
},
|
|
23
|
+
"type": "module",
|
|
24
|
+
"sideEffects": false,
|
|
25
|
+
"main": "./dist/index.cjs",
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"import": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"default": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"require": {
|
|
34
|
+
"types": "./dist/index.d.cts",
|
|
35
|
+
"default": "./dist/index.cjs"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md",
|
|
42
|
+
"CHANGELOG.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@fabricorg/platform": "^0.7.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.10.0",
|
|
50
|
+
"tsup": "^8.5.0",
|
|
51
|
+
"typescript": "^5.7.3",
|
|
52
|
+
"vitest": "^4.1.5",
|
|
53
|
+
"@fabricorg/platform": "0.7.0"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=20"
|
|
57
|
+
},
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
63
|
+
"build": "tsup",
|
|
64
|
+
"type-check": "tsc --noEmit",
|
|
65
|
+
"test": "vitest run"
|
|
66
|
+
}
|
|
67
|
+
}
|