@highstate/backend 0.9.19 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{chunk-5WVU2AK4.js → chunk-JNUJ4LTX.js} +15 -3
  2. package/dist/chunk-JNUJ4LTX.js.map +1 -0
  3. package/dist/index.js +24 -22
  4. package/dist/index.js.map +1 -1
  5. package/dist/library/package-resolution-worker.js +3 -3
  6. package/dist/library/package-resolution-worker.js.map +1 -1
  7. package/dist/library/worker/main.js.map +1 -1
  8. package/dist/shared/index.js +1 -1
  9. package/package.json +8 -5
  10. package/prisma/project/api-key.prisma +5 -0
  11. package/prisma/project/evaluation.prisma +10 -0
  12. package/prisma/project/instance.prisma +15 -18
  13. package/prisma/project/page.prisma +9 -1
  14. package/prisma/project/secret.prisma +12 -0
  15. package/prisma/project/service-account.prisma +6 -0
  16. package/prisma/project/terminal.prisma +19 -2
  17. package/prisma/project/trigger.prisma +7 -1
  18. package/prisma/project/unlock-method.prisma +14 -0
  19. package/prisma/project/worker.prisma +34 -3
  20. package/src/artifact/index.ts +1 -1
  21. package/src/business/evaluation.ts +0 -1
  22. package/src/business/secret.test.ts +11 -7
  23. package/src/business/secret.ts +4 -13
  24. package/src/library/package-resolution-worker.ts +3 -3
  25. package/src/library/worker/evaluator.ts +3 -3
  26. package/src/lock/memory.ts +1 -1
  27. package/src/orchestrator/operation-context.ts +1 -2
  28. package/src/orchestrator/operation-workset.ts +0 -1
  29. package/src/orchestrator/operation.ts +5 -0
  30. package/src/orchestrator/plan-test-builder.ts +0 -1
  31. package/src/runner/abstractions.ts +7 -0
  32. package/src/runner/artifact-env.ts +0 -1
  33. package/src/runner/local.ts +10 -1
  34. package/src/shared/models/project/api-key.ts +1 -1
  35. package/src/shared/models/project/operation.ts +13 -0
  36. package/src/shared/resolvers/graph-resolver.ts +0 -3
  37. package/src/shared/resolvers/input.ts +8 -1
  38. package/src/terminal/abstractions.ts +1 -1
  39. package/src/terminal/docker.ts +4 -4
  40. package/src/worker/docker.ts +0 -1
  41. package/src/worker/manager.ts +2 -2
  42. package/dist/chunk-5WVU2AK4.js.map +0 -1
@@ -503,7 +503,19 @@ var operationOptionsSchema = z.object({
503
503
  * - additive with dependency resolution options: refreshes all selected instances;
504
504
  * - works with both all operation types.
505
505
  */
506
- refresh: z.boolean().default(false)
506
+ refresh: z.boolean().default(false),
507
+ /**
508
+ * Enable debug logging for Pulumi engine and resource providers.
509
+ *
510
+ * **Security Note:**
511
+ * Debug mode may expose sensitive information including credentials in the logs.
512
+ * Use only when absolutely necessary for troubleshooting.
513
+ *
514
+ * **Implementation:**
515
+ * - sets Pulumi's debug option to true;
516
+ * - sets TF_LOG=DEBUG environment variable for Terraform providers.
517
+ */
518
+ debug: z.boolean().default(false)
507
519
  }).partial();
508
520
  var operationTypeSchema = z.enum([
509
521
  "update",
@@ -1531,5 +1543,5 @@ var resolverFactories = {
1531
1543
  };
1532
1544
 
1533
1545
  export { AccessError, BackendError, CannotDeleteLastUnlockMethodError, GraphResolver, InputHashResolver, InputResolver, InstanceLockLostError, InstanceLockedError, InstanceNotFoundError, InstanceStateNotFoundError, InvalidInstanceKindError, MAX_WORKER_START_ATTEMPTS, OperationNotFoundError, ProjectLockedError, ProjectNotFoundError, PromiseTracker, SystemSecretNames, ValidationResolver, WorkerVersionNotFoundError, apiKeyMetaSchema, apiKeyOutputSchema, apiKeyQuerySchema, applyLibraryUpdate, artifactOutputSchema, artifactQuerySchema, backendUnlockMethodSchema, codebaseLibrary, codebaseProjectModelStorage, collectionQueryResult, collectionQuerySchema, createAsyncBatcher, databaseProjectModelStorage, diffLibraries, extractDigestFromImage, finalInstanceOperationStatuses, finalOperationStatuses, forSchema, getAllDependents, getMatchedInjectionInstanceInputs, getResolvedHubInputs, getResolvedInjectionInstanceInputs, getResolvedInstanceInputs, getResolvedInstanceOutputs, getWorkerIdentity, globalProjectSpace, hasObjectMeta, hostPulumiBackend, instanceCustomStatusInputSchema, instanceLockEventSchema, instanceLockOutputSchema, instanceStateEventSchema, int32ToBytes, isFinalOperationStatus, isInstanceDeployed, isTransientInstanceOperationStatus, isTransientOperationStatus, isVirtualGhostInstance, librarySpecSchema, operationEventSchema, operationInputSchema, operationMetaSchema, operationOptionsSchema, operationOutputSchema, operationPhaseInstanceSchema, operationPhaseSchema, operationPhaseTypeSchema, operationStatusSchema, operationTypeSchema, pageDetailsOutputSchema, pageOutputSchema, pageQuerySchema, projectInputSchema, projectModelEventSchema, projectModelStorageSpecSchema, projectOutputSchema, projectUnlockStateSchema, projectUnlockSuiteSchema, pulumiBackendSpecSchema, resolverFactories, secretOutputSchema, secretQuerySchema, serviceAccountOutputSchema, serviceAccountQuerySchema, terminalDetailsOutputSchema, terminalOutputSchema, terminalQuerySchema, terminalSessionOutputSchema, terminalStatusSchema, toApiKeyOutput, toPageOutput, toSecretOutput, toTerminalDetailsOutput, toTerminalOutput, toTerminalSessionOutput, toWorkerOutput, toWorkerVersionOutput, triggerOutputSchema, triggerQuerySchema, unlockMethodInputSchema, unlockMethodMetaSchema, unlockMethodOutputSchema, unlockMethodType, waitAll, workerOutputSchema, workerQuerySchema, workerUnitRegistrationEventSchema, workerVersionOutputSchema, workerVersionStatusSchema };
1534
- //# sourceMappingURL=chunk-5WVU2AK4.js.map
1535
- //# sourceMappingURL=chunk-5WVU2AK4.js.map
1546
+ //# sourceMappingURL=chunk-JNUJ4LTX.js.map
1547
+ //# sourceMappingURL=chunk-JNUJ4LTX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/models/backend/library.ts","../src/shared/models/backend/well-known.ts","../src/shared/models/backend/project.ts","../src/shared/models/backend/pulumi.ts","../src/shared/models/backend/unlock-method.ts","../src/shared/models/base.ts","../src/shared/models/errors.ts","../src/shared/models/project/api-key.ts","../src/shared/models/project/artifact.ts","../src/shared/models/project/custom-status.ts","../src/shared/models/project/lock.ts","../src/shared/models/project/model.ts","../src/shared/models/project/operation.ts","../src/shared/models/project/page.ts","../src/shared/models/project/secret.ts","../src/shared/models/project/service-account.ts","../src/shared/models/project/state.ts","../src/shared/models/project/terminal.ts","../src/shared/models/project/trigger.ts","../src/shared/models/project/unlock-method.ts","../src/shared/models/project/worker.ts","../src/shared/resolvers/graph-resolver.ts","../src/shared/resolvers/input.ts","../src/shared/utils/async-batcher.ts","../src/shared/utils/hash.ts","../src/shared/utils/promise-tracker.ts","../src/shared/resolvers/input-hash.ts","../src/shared/resolvers/state.ts","../src/shared/resolvers/validation.ts","../src/shared/resolvers/registry.ts"],"names":["z","objectMetaSchema","commonObjectMetaSchema","instanceIdSchema","serviceAccountMetaSchema","SystemSecretNames","nodeId","resolvedInputs","mapValues","isUnitModel"],"mappings":"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","file":"chunk-JNUJ4LTX.js","sourcesContent":["import { type ComponentModel, type EntityModel, z } from \"@highstate/contract\"\n\nexport const librarySpecSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"host\"),\n }),\n])\n\nexport type LibrarySpec = z.infer<typeof librarySpecSchema>\n\nexport type LibraryModel = {\n components: Record<string, ComponentModel>\n entities: Record<string, EntityModel>\n}\n\nexport type LibraryUpdate =\n | {\n type: \"reload-started\" | \"reload-completed\"\n }\n | {\n type: \"component-updated\"\n component: ComponentModel\n }\n | {\n type: \"entity-updated\"\n entity: EntityModel\n }\n | {\n type: \"component-removed\"\n componentType: string\n }\n | {\n type: \"entity-removed\"\n entityType: string\n }\n\nexport function diffLibraries(oldLibrary: LibraryModel, newLibrary: LibraryModel): LibraryUpdate[] {\n const updates: LibraryUpdate[] = []\n\n for (const [componentType, newComponent] of Object.entries(newLibrary.components)) {\n const existingComponent = oldLibrary.components[componentType]\n if (existingComponent?.definitionHash !== newComponent.definitionHash) {\n updates.push({ type: \"component-updated\", component: newComponent })\n }\n }\n\n for (const componentType of Object.keys(oldLibrary.components)) {\n if (!newLibrary.components[componentType]) {\n updates.push({ type: \"component-removed\", componentType })\n }\n }\n\n for (const [entityType, newEntity] of Object.entries(newLibrary.entities)) {\n const existingEntity = oldLibrary.entities[entityType]\n if (existingEntity?.definitionHash !== newEntity.definitionHash) {\n updates.push({ type: \"entity-updated\", entity: newEntity })\n }\n }\n\n for (const entityType of Object.keys(oldLibrary.entities)) {\n if (!newLibrary.entities[entityType]) {\n updates.push({ type: \"entity-removed\", entityType })\n }\n }\n\n return updates\n}\n\nexport function applyLibraryUpdate(\n components: Record<string, ComponentModel>,\n entities: Record<string, EntityModel>,\n update: LibraryUpdate,\n): void {\n switch (update.type) {\n case \"component-updated\":\n components[update.component.type] = update.component\n break\n case \"entity-updated\":\n entities[update.entity.type] = update.entity\n break\n case \"component-removed\":\n delete components[update.componentType]\n break\n case \"entity-removed\":\n delete entities[update.entityType]\n break\n }\n}\n","import type {\n LibraryCreateInput,\n ProjectModelStorageCreateInput,\n ProjectSpaceCreateInput,\n PulumiBackendCreateInput,\n} from \"../../../database/_generated/backend/postgresql/models\"\n\nexport const globalProjectSpace = {\n id: \"q8xbilhwpsn65zjlv5kz44qh\",\n meta: {\n title: \"Global Project Space\",\n description: \"The default project space for all projects.\",\n icon: \"mdi-earth\",\n iconColor: \"#4CAF50\",\n },\n} satisfies ProjectSpaceCreateInput\n\nexport const codebaseLibrary = {\n id: \"n0rfvpl9o77iqf29ff4kk5gf\",\n meta: {\n title: \"Codebase Library\",\n description:\n \"The library which loads components and entities from packages (local or NPM-installed) in the codebase.\",\n icon: \"mdi-package-variant\",\n iconColor: \"#2196F3\",\n },\n spec: { type: \"host\" },\n} satisfies LibraryCreateInput\n\nexport const hostPulumiBackend = {\n id: \"pmn9y901jeiz2ydh93045l39\",\n meta: {\n title: \"Host Pulumi Backend\",\n description: \"The Pulumi backend which will always use the Pulumi CLI configured on the host.\",\n },\n spec: { type: \"host\" },\n} satisfies PulumiBackendCreateInput\n\nexport const codebaseProjectModelStorage = {\n id: \"qppfcerovu3h22o0x8rlpc3g\",\n meta: {\n title: \"Codebase Model Storage\",\n description: \"The storage which stores project model in the codebase.\",\n icon: \"mdi-code-json\",\n },\n spec: { type: \"codebase\" },\n} satisfies ProjectModelStorageCreateInput\n\nexport const databaseProjectModelStorage = {\n id: \"rmi0hmo1tjjsyfry9l178fus\",\n meta: {\n title: \"Database Model Storage\",\n description:\n \"The storage which stores project model in the database alongside the project state.\",\n icon: \"mdi-database\",\n },\n spec: { type: \"database\" },\n} satisfies ProjectModelStorageCreateInput\n","import { commonObjectMetaSchema, genericNameSchema, timestampsSchema, z } from \"@highstate/contract\"\nimport {\n codebaseLibrary,\n codebaseProjectModelStorage,\n globalProjectSpace,\n hostPulumiBackend,\n} from \"./well-known\"\n\nexport const projectModelStorageSpecSchema = z.discriminatedUnion(\"type\", [\n z.object({\n /**\n * The project model is stored in the codebase where Highstate is running.\n */\n type: z.literal(\"codebase\"),\n }),\n z.object({\n /**\n * The project model is stored in the project database alongside the project data.\n */\n type: z.literal(\"database\"),\n }),\n])\n\nexport const projectInputSchema = z.object({\n name: genericNameSchema,\n spaceId: z.cuid2().default(globalProjectSpace.id),\n modelStorageId: z.cuid2().default(codebaseProjectModelStorage.id),\n libraryId: z.cuid2().default(codebaseLibrary.id),\n pulumiBackendId: z.cuid2().default(hostPulumiBackend.id),\n meta: commonObjectMetaSchema,\n})\n\nexport const projectOutputSchema = z.object({\n id: z.string(),\n name: genericNameSchema,\n meta: commonObjectMetaSchema,\n spaceId: z.cuid2(),\n modelStorageId: z.cuid2(),\n libraryId: z.cuid2(),\n pulumiBackendId: z.cuid2(),\n ...timestampsSchema.shape,\n})\n\nexport type ProjectModelStorageSpec = z.infer<typeof projectModelStorageSpecSchema>\n\nexport type ProjectInput = z.infer<typeof projectInputSchema>\nexport type ProjectOutput = z.infer<typeof projectOutputSchema>\n\n/**\n * The project unlock suite is something that the frontend\n * needs to unlock the project and provide the backend\n * with the necessary information to decrypt the master key.\n */\nexport const projectUnlockSuiteSchema = z.object({\n /**\n * The list of encrypted AGE identities that can be used to decrypt the master key of the project.\n *\n * The frontend should try to decrypt at least one of these identities\n * using the password or passkey.\n */\n encryptedIdentities: z.array(z.string()),\n\n /**\n * Whether one of the identities is a passkey and user should be asked to use it.\n */\n hasPasskey: z.boolean(),\n})\n\nexport type ProjectUnlockSuite = z.infer<typeof projectUnlockSuiteSchema>\n\nexport const projectUnlockStateSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"locked\"),\n unlockSuite: projectUnlockSuiteSchema.optional(),\n }),\n z.object({\n type: z.literal(\"unlocked\"),\n }),\n])\n\nexport type ProjectUnlockState = z.infer<typeof projectUnlockStateSchema>\n\nexport type { Project } from \"../../../database\"\n","import { z } from \"@highstate/contract\"\n\nexport const pulumiBackendSpecSchema = z.discriminatedUnion(\"type\", [\n z.object({\n /**\n * Use the Pulumi backend configured on the host where Highstate backend is running.\n *\n * The backend is expected to be configured with the `pulumi login` command by the user.\n */\n type: z.literal(\"host\"),\n }),\n])\n\nexport type PulumiBackendSpec = z.infer<typeof pulumiBackendSpecSchema>\n","import { objectMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\n\n/**\n * Complete unlock method schema for database storage.\n * Contains all unlock method information including encryption details.\n *\n * Do not confuse with the project unlock method schema.\n */\nexport const backendUnlockMethodSchema = z.object({\n id: z.string(),\n meta: objectMetaSchema,\n\n /**\n * The AGE recipient of the unlock method to use to encrypt the master key for this unlock method.\n */\n recipient: z.string(),\n})\n\nexport type BackendUnlockMethod = z.infer<typeof backendUnlockMethodSchema>\n","import type { ObjectMeta } from \"@highstate/contract\"\nimport { constant, mapValues } from \"remeda\"\nimport { z } from \"zod\"\n\nexport function hasObjectMeta(value: unknown): value is { meta: ObjectMeta } {\n return typeof value === \"object\" && value !== null && \"meta\" in value\n}\n\nconst sortBySchema = z.object({\n key: z.string(),\n order: z.enum([\"asc\", \"desc\"]),\n})\n\nexport type GenericEntity = {\n id: string\n meta: ObjectMeta\n createdAt?: Date\n}\n\nexport const collectionQuerySchema = z.object({\n /**\n * The search string to filter documents by display name, description, or other text fields.\n */\n search: z.string().optional(),\n\n /**\n * The sorting configuration for the results.\n *\n * Can be a single sort field or an array of sort fields.\n * Each sort field contains the key and order.\n */\n sortBy: z.array(sortBySchema).optional(),\n\n /**\n * The number of items to skip.\n *\n * Defaults to 0 if not specified.\n */\n skip: z.number().int().nonnegative().default(0).optional(),\n\n /**\n * The count of documents to return.\n *\n * Defaults to 20 if not specified.\n * Maximum value is 100.\n */\n count: z.number().int().positive().max(100).default(20).optional(),\n})\n\nexport type CollectionQuery = z.infer<typeof collectionQuerySchema>\n\nexport function collectionQueryResult<TSchema extends z.ZodType>(schema: TSchema) {\n return z.object({\n items: z.array(schema),\n total: z.number().int().nonnegative(),\n })\n}\n\nexport type CollectionQueryResult<T> = {\n /**\n * The list of objects matching the query and restricted by pagination.\n */\n items: T[]\n\n /**\n * The total number of documents matching the query.\n */\n total: number\n}\n\n/**\n * Creates a selection object using the provided schema.\n *\n * It can be used in zod pick or prisma select.\n *\n * @param schema The Zod schema to create the selection object from.\n */\nexport function forSchema<TSchema extends z.ZodObject>(\n schema: TSchema,\n): { [K in keyof TSchema[\"shape\"]]: true } {\n return mapValues(schema.shape, constant(true)) as { [K in keyof TSchema[\"shape\"]]: true }\n}\n","export class BackendError extends Error {\n constructor(message: string, cause?: unknown) {\n super(message, { cause })\n this.name = \"BackendError\"\n }\n}\n\nexport class AccessError extends BackendError {\n constructor(message: string) {\n super(message)\n this.name = \"AccessError\"\n }\n}\n\nexport class ProjectLockedError extends AccessError {\n constructor(projectId: string) {\n super(`The project with ID \"${projectId}\" is locked, decryption is not possible.`)\n }\n}\n\nexport class ProjectNotFoundError extends BackendError {\n constructor(projectId: string) {\n super(`Project with ID \"${projectId}\" not found.`)\n this.name = \"ProjectNotFoundError\"\n }\n}\n\nexport class CannotDeleteLastUnlockMethodError extends BackendError {\n constructor(projectId: string) {\n super(`Refused to delete the last unlock method for project \"${projectId}\".`)\n this.name = \"CannotDeleteLastUnlockMethodError\"\n }\n}\n\nexport class InstanceNotFoundError extends BackendError {\n constructor(projectId: string, instanceId: string) {\n super(`Instance with ID \"${instanceId}\" not found in project \"${projectId}\".`)\n this.name = \"InstanceNotFoundError\"\n }\n}\n\nexport class InvalidInstanceKindError extends BackendError {\n constructor(projectId: string, instanceId: string, expectedKind: string, actualKind: string) {\n super(\n `Instance \"${instanceId}\" in project \"${projectId}\" has kind \"${actualKind}\", but expected \"${expectedKind}\".`,\n )\n this.name = \"InvalidInstanceKindError\"\n }\n}\n\nexport class OperationNotFoundError extends BackendError {\n constructor(projectId: string, operationId: string) {\n super(`Operation with ID \"${operationId}\" not found in project \"${projectId}\".`)\n this.name = \"OperationNotFoundError\"\n }\n}\n\nexport class InstanceLockLostError extends BackendError {\n constructor(projectId: string, instanceIds: string[], token: string) {\n super(\n `Instance lock lost for instances [${instanceIds.join(\", \")}] in project \"${projectId}\" with token \"${token}\".`,\n )\n this.name = \"InstanceLockLostError\"\n }\n}\n\nexport class InstanceStateNotFoundError extends BackendError {\n constructor(projectId: string, instanceId: string) {\n super(`State for instance with ID \"${instanceId}\" not found in project \"${projectId}\".`)\n this.name = \"InstanceStateNotFoundError\"\n }\n}\n\nexport class InstanceLockedError extends BackendError {\n constructor(projectId: string, instanceId: string) {\n super(`Instance with ID \"${instanceId}\" in project \"${projectId}\" is locked.`)\n this.name = \"InstanceLockedError\"\n }\n}\n\nexport class WorkerVersionNotFoundError extends BackendError {\n constructor(projectId: string, workerVersionId: string) {\n super(`Worker version with ID \"${workerVersionId}\" not found in project \"${projectId}\".`)\n this.name = \"WorkerVersionNotFoundError\"\n }\n}\n","import type { ServiceAccount } from \"../../../database\"\nimport {\n commonObjectMetaSchema,\n objectMetaSchema,\n serviceAccountMetaSchema,\n z,\n} from \"@highstate/contract\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const apiKeyMetaSchema = objectMetaSchema\n .pick({\n title: true,\n description: true,\n })\n .required({ title: true })\n\nexport type ApiKeyMeta = z.infer<typeof apiKeyMetaSchema>\n\nexport const apiKeyOutputSchema = z.object({\n id: z.cuid2(),\n meta: commonObjectMetaSchema,\n serviceAccountId: z.cuid2(),\n serviceAccountMeta: serviceAccountMetaSchema.nullable(),\n createdAt: z.date(),\n})\n\nexport type ApiKeyOutput = z.infer<typeof apiKeyOutputSchema>\n\nexport const apiKeyQuerySchema = collectionQuerySchema.extend({\n serviceAccountId: z.string().optional(),\n})\n\nexport type ApiKeyQuery = z.infer<typeof apiKeyQuerySchema>\n\nexport function toApiKeyOutput(\n apiKey: Omit<ApiKeyOutput, \"serviceAccountMeta\">,\n serviceAccount?: Pick<ServiceAccount, \"meta\"> | null,\n): ApiKeyOutput {\n return {\n ...apiKey,\n serviceAccountMeta: serviceAccount?.meta ?? null,\n }\n}\n","import { commonObjectMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const artifactOutputSchema = z.object({\n id: z.cuid2(),\n hash: z.string(),\n size: z.number(),\n meta: commonObjectMetaSchema,\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type ArtifactOutput = z.infer<typeof artifactOutputSchema>\n\nexport const artifactQuerySchema = collectionQuerySchema.extend({\n stateId: z.string().optional(),\n serviceAccountId: z.string().optional(),\n terminalId: z.string().optional(),\n pageId: z.string().optional(),\n})\n\nexport type ArtifactQuery = z.infer<typeof artifactQuerySchema>\n","import { commonObjectMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\n\nexport const instanceCustomStatusInputSchema = z.object({\n name: z.string(),\n meta: commonObjectMetaSchema,\n value: z.string(),\n message: z.string().optional(),\n order: z.number().min(0).max(100).optional(),\n})\n\nexport type InstanceCustomStatusInput = z.infer<typeof instanceCustomStatusInputSchema>\n","import { commonObjectMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\n\nexport const instanceLockOutputSchema = z.object({\n stateId: z.cuid2(),\n meta: commonObjectMetaSchema,\n acquiredAt: z.date(),\n})\n\nexport type InstanceLockOutput = z.infer<typeof instanceLockOutputSchema>\n\nexport const instanceLockEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"locked\"),\n locks: instanceLockOutputSchema.array(),\n }),\n z.object({\n type: z.literal(\"unlocked\"),\n stateIds: z.array(z.string()),\n }),\n])\n\nexport type InstanceLockEvent = z.infer<typeof instanceLockEventSchema>\n","import {\n type HubModel,\n hubModelSchema,\n type InstanceModel,\n instanceIdSchema,\n instanceModelSchema,\n} from \"@highstate/contract\"\nimport { z } from \"zod\"\n\nexport const projectModelEventSchema = z.object({\n updatedInstances: instanceModelSchema.array().optional(),\n updatedHubs: hubModelSchema.array().optional(),\n updatedVirtualInstances: instanceModelSchema.array().optional(),\n updatedGhostInstances: instanceModelSchema.array().optional(),\n\n deletedInstanceIds: instanceIdSchema.array().optional(),\n deletedHubIds: z.string().array().optional(),\n deletedVirtualInstanceIds: instanceIdSchema.array().optional(),\n deletedGhostInstanceIds: instanceIdSchema.array().optional(),\n})\n\nexport type ProjectNodeEvent = z.infer<typeof projectModelEventSchema>\n\nexport type ProjectModel = {\n instances: InstanceModel[]\n hubs: HubModel[]\n}\n\nexport type FullProjectModel = ProjectModel & {\n virtualInstances: InstanceModel[]\n ghostInstances: InstanceModel[]\n}\n","import type { Operation, OperationStatus, OperationType } from \"../../../database\"\nimport { instanceIdSchema, objectMetaSchema, z } from \"@highstate/contract\"\n\n/**\n * Phase type for operation execution.\n */\nexport const operationPhaseTypeSchema = z.enum([\"destroy\", \"update\", \"refresh\"])\n\n/**\n * Instance information for operation phase.\n */\nexport const operationPhaseInstanceSchema = z.object({\n /**\n * The ID of the instance.\n */\n id: instanceIdSchema,\n\n /**\n * The parent ID of the instance, either from the model or the state.\n */\n parentId: z.string().optional(),\n\n /**\n * Human-readable explanation of the decision.\n * */\n message: z.string(),\n})\n\n/**\n * Single phase of operation execution.\n */\nexport const operationPhaseSchema = z.object({\n /**\n * Type of phase being executed.\n */\n type: operationPhaseTypeSchema,\n\n /**\n * List of instances to be processed in this phase.\n */\n instances: z.array(operationPhaseInstanceSchema),\n})\n\nexport type OperationPhase = z.infer<typeof operationPhaseSchema>\nexport type OperationPhaseType = z.infer<typeof operationPhaseTypeSchema>\nexport type OperationPhaseInstance = z.infer<typeof operationPhaseInstanceSchema>\n\nexport const operationOptionsSchema = z\n .object({\n /**\n * Force update all dependencies regardless of their current state.\n *\n * **Operation Behavior Impact:**\n * - bypasses hash-based change detection for dependency chains;\n * - includes **ALL** dependencies (up-to-date, out-of-date, and error states);\n * - traverses the entire dependency graph from requested instances.\n *\n * **Usage with other options:**\n * - combined with `forceUpdateChildren`: updates entire dependency tree **AND** all composite children;\n * - independent of `allowPartialCompositeInstanceCreation`: affects dependency traversal, not composite logic.\n */\n forceUpdateDependencies: z.boolean().default(false),\n\n /**\n * Force update all children of composite instances regardless of their state.\n *\n * **Operation Behavior Impact:**\n * - overrides selective child inclusion logic for composites;\n * - includes **ALL** children of affected composites (up-to-date, out-of-date, and error states);\n * - applied after dependency traversal and parent inclusion.\n *\n * **Usage with other options:**\n * - combined with `forceUpdateDependencies`: creates comprehensive force-update behavior;\n * - overrides `allowPartialCompositeInstanceCreation`: when enabled, **ALL** children are included regardless of existence.\n */\n forceUpdateChildren: z.boolean().default(false),\n\n /**\n * Include dependent instances when destroying instances.\n *\n * **Operation Behavior Impact:**\n * - extends destroy operations to include instances that depend on the target;\n * - traverses the dependency graph in reverse (dependents, not dependencies);\n * - prevents orphaned instances that would fail without their dependencies.\n *\n * **Usage with other options:**\n * - works with `invokeDestroyTriggers`: ensures triggers run for all dependents;\n * - independent of update-related options.\n */\n destroyDependentInstances: z.boolean().default(true),\n\n /**\n * Execute destroy triggers when destroying instances.\n *\n * **Operation Behavior Impact:**\n * - affects how individual units are destroyed (triggers vs direct deletion);\n * - does not change which instances are selected for destruction;\n * - controls trigger execution during the destruction phase.\n *\n * **Usage with other options:**\n * - used with `destroyDependentInstances`: ensures triggers run for cascade deletions;\n * - independent of update-related options.\n */\n invokeDestroyTriggers: z.boolean().default(true),\n\n /**\n * Delete Pulumi resources that are no longer referenced in the state.\n *\n * **Operation Behavior Impact:**\n * - does not affect which instances are selected for operations;\n * - deletes orphaned Pulumi resources within individual instances.\n *\n * **Usage with other options:**\n * - independent of instance selection options;\n * - complements destroy-related options for thorough cleanup.\n */\n deleteUnreachableResources: z.boolean().default(false),\n\n /**\n * Force deletion of instance state even if the destroy operation fails.\n *\n * **Operation Behavior Impact:**\n * - forces state deletion even when destroy operations fail;\n * - does not affect which instances are selected for operations;\n * - bypasses normal destroy procedures as emergency fallback.\n *\n * **Usage with other options:**\n * - used with destroy-related options when normal cleanup fails;\n * - should be used cautiously as it can create state inconsistencies.\n */\n forceDeleteState: z.boolean().default(false),\n\n /**\n * Allow partial update of composite instances without requiring all outdated children.\n *\n * **Operation Behavior Impact:**\n * - controls whether composite operations must include all outdated children or only necessary ones;\n * - when `false` (default): all outdated children of substantive composites are included in operations;\n * - when `true`: only necessary children are included, allowing partial composite operations;\n * - applied during composite child traversal phase for substantive composites only.\n *\n * **Usage with other options:**\n * - overridden by `forceUpdateChildren`: when force is enabled, **ALL** children are included regardless;\n * - independent of `forceUpdateDependencies`: affects composite logic, not dependency traversal.\n */\n allowPartialCompositeInstanceUpdate: z.boolean().default(false),\n\n /**\n * Allow partial destruction of composite instances during cascade operations.\n *\n * **Operation Behavior Impact:**\n * - controls whether cascade destruction must include all children or only necessary ones;\n * - when `false` (default): cascade destruction includes **ALL** children of affected composites;\n * - when `true`: cascade destruction includes only directly dependent children;\n * - does not affect explicit composite destruction (always destroys all children);\n * - does not affect parent propagation when destroying sibling composites.\n *\n * **Usage with other options:**\n * - works with `destroyDependentInstances`: controls completeness of cascade destruction;\n * - independent of update-related options.\n */\n allowPartialCompositeInstanceDestruction: z.boolean().default(false),\n\n /**\n * Also refresh the state of instances during the operation.\n *\n * **Operation Behavior Impact:**\n * - does not change which instances are selected for operations;\n * - synchronizes state with actual infrastructure during the operation.\n *\n * **Usage with other options:**\n * - additive with dependency resolution options: refreshes all selected instances;\n * - works with both all operation types.\n */\n refresh: z.boolean().default(false),\n\n /**\n * Enable debug logging for Pulumi engine and resource providers.\n *\n * **Security Note:**\n * Debug mode may expose sensitive information including credentials in the logs.\n * Use only when absolutely necessary for troubleshooting.\n *\n * **Implementation:**\n * - sets Pulumi's debug option to true;\n * - sets TF_LOG=DEBUG environment variable for Terraform providers.\n */\n debug: z.boolean().default(false),\n })\n .partial()\n\nexport const operationTypeSchema = z.enum([\n \"update\",\n \"preview\",\n \"destroy\",\n \"recreate\",\n \"refresh\",\n]) satisfies z.ZodType<OperationType>\n\nexport const operationStatusSchema = z.enum([\n \"pending\",\n \"running\",\n \"failing\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n]) satisfies z.ZodType<OperationStatus>\n\nexport const operationMetaSchema = objectMetaSchema.pick({\n title: true,\n description: true,\n})\n\nexport const operationInputSchema = z.object({\n projectId: z.string(),\n type: operationTypeSchema,\n instanceIds: z.array(instanceIdSchema).min(1),\n options: operationOptionsSchema.partial().optional(),\n meta: operationMetaSchema.optional(),\n plan: operationPhaseSchema.array().optional(),\n})\n\nexport type OperationMeta = z.infer<typeof operationMetaSchema>\nexport type OperationInput = z.infer<typeof operationInputSchema>\nexport type OperationOptions = z.infer<typeof operationOptionsSchema>\n\nexport const operationEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"updated\"),\n operation: z.custom<Operation>(),\n }),\n z.object({\n type: z.literal(\"deleted\"),\n operationId: z.string(),\n }),\n])\n\nexport const operationOutputSchema = z.object({\n id: z.cuid2(),\n type: operationTypeSchema,\n status: operationStatusSchema,\n meta: operationMetaSchema,\n startedAt: z.date(),\n updatedAt: z.date(),\n finishedAt: z.date().nullable(),\n})\n\nexport type OperationOutput = z.infer<typeof operationOutputSchema>\n\nexport type { Operation, OperationLog, OperationStatus, OperationType } from \"../../../database\"\n\nexport const finalOperationStatuses: OperationStatus[] = [\"completed\", \"failed\", \"cancelled\"]\n\n/**\n * Checks if an operation status is final (stable).\n *\n * Final statuses are: completed, failed, cancelled\n * Transient statuses are: pending, running, failing\n *\n * @param status The operation status to check\n * @returns True if the status is final\n */\nexport function isFinalOperationStatus(status: OperationStatus): boolean {\n return finalOperationStatuses.includes(status)\n}\n\n/**\n * Checks if an operation status exists and is transient (not stable).\n *\n * @param status The operation status to check\n * @returns True if the status is transient\n */\nexport function isTransientOperationStatus(status?: OperationStatus): boolean {\n return !!status && !finalOperationStatuses.includes(status)\n}\n","import type { ServiceAccount } from \"../../../database\"\nimport {\n commonObjectMetaSchema,\n pageBlockSchema,\n serviceAccountMetaSchema,\n} from \"@highstate/contract\"\nimport { z } from \"zod\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const pageOutputSchema = z.object({\n id: z.cuid2(),\n meta: commonObjectMetaSchema,\n name: z.string().nullable(),\n stateId: z.cuid2().nullable(),\n serviceAccountId: z.cuid2().nullable(),\n serviceAccountMeta: serviceAccountMetaSchema.nullable(),\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type PageOutput = z.infer<typeof pageOutputSchema>\n\nexport const pageQuerySchema = collectionQuerySchema.extend({\n serviceAccountId: z.string().optional(),\n stateId: z.string().optional(),\n artifactId: z.string().optional(),\n})\n\nexport type PageQuery = z.infer<typeof pageQuerySchema>\n\nexport const pageDetailsOutputSchema = z.object({\n ...pageOutputSchema.shape,\n content: z.array(pageBlockSchema),\n})\n\nexport type PageDetailsOutput = z.infer<typeof pageDetailsOutputSchema>\n\nexport function toPageOutput(\n page: Omit<PageOutput, \"serviceAccountMeta\">,\n serviceAccount?: Pick<ServiceAccount, \"meta\"> | null,\n): PageOutput {\n return {\n ...page,\n serviceAccountMeta: serviceAccount?.meta ?? null,\n }\n}\n","import type { ServiceAccount } from \"../../../database\"\nimport { globalCommonObjectMetaSchema, serviceAccountMetaSchema, z } from \"@highstate/contract\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const secretOutputSchema = z.object({\n id: z.cuid2(),\n meta: globalCommonObjectMetaSchema,\n name: z.string().nullable(),\n systemName: z.string().nullable(),\n stateId: z.cuid2().nullable(),\n serviceAccountId: z.cuid2().nullable(),\n serviceAccountMeta: serviceAccountMetaSchema.nullable(),\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type SecretOutput = z.infer<typeof secretOutputSchema>\n\nexport const secretQuerySchema = collectionQuerySchema.extend({\n serviceAccountId: z.string().optional(),\n stateId: z.string().optional(),\n})\n\nexport type SecretQuery = z.infer<typeof secretQuerySchema>\n\nexport function toSecretOutput(\n secret: Omit<SecretOutput, \"serviceAccountMeta\">,\n serviceAccount?: Pick<ServiceAccount, \"meta\"> | null,\n): SecretOutput {\n return {\n ...secret,\n serviceAccountMeta: serviceAccount?.meta ?? null,\n }\n}\n\nexport enum SystemSecretNames {\n PulumiPassword = \"pulumi-password\",\n}\n","import { serviceAccountMetaSchema, z } from \"@highstate/contract\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const serviceAccountOutputSchema = z.object({\n id: z.cuid2(),\n meta: serviceAccountMetaSchema,\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type ServiceAccountOutput = z.infer<typeof serviceAccountOutputSchema>\n\nexport const serviceAccountQuerySchema = collectionQuerySchema.extend({\n artifactId: z.string().optional(),\n})\n\nexport type ServiceAccountQuery = z.infer<typeof serviceAccountQuerySchema>\n","import type { InstanceId } from \"@highstate/contract\"\nimport type {\n InstanceState as DatabaseInstanceState,\n InstanceCustomStatus,\n InstanceEvaluationState,\n InstanceOperationState,\n InstanceOperationStatus,\n} from \"../../../database\"\nimport { z } from \"zod\"\n\n/**\n * The instance state aggregate including all related states.\n */\nexport type InstanceState = DatabaseInstanceState & {\n /**\n * The ID of the parent instance, if any.\n *\n * Not to be confused with `parentId` which is the surrogate ID of the parent state.\n */\n parentInstanceId?: InstanceId | null\n\n /**\n * The names of the instance secrets which have values set.\n */\n secretNames?: string[]\n\n /**\n * The last operation state of the instance.\n */\n lastOperationState?: InstanceOperationState | null\n\n /**\n * The evaluation state of the instance.\n */\n evaluationState?: InstanceEvaluationState | null\n\n /**\n * The IDs of the terminals produced by this unit instance.\n */\n terminalIds?: string[]\n\n /**\n * The IDs of the pages produced by this unit instance.\n */\n pageIds?: string[]\n\n /**\n * The IDs of the triggers produced by this unit instance.\n */\n triggerIds?: string[]\n\n /**\n * The custom statuses attached to this instance.\n */\n customStatuses?: InstanceCustomStatus[]\n}\n\nexport const instanceStateEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"updated\"),\n state: z.custom<InstanceState>(),\n }),\n z.object({\n type: z.literal(\"patched\"),\n stateId: z.string(),\n patch: z.custom<Partial<InstanceState>>(),\n }),\n z.object({\n type: z.literal(\"deleted\"),\n stateId: z.string(),\n }),\n])\n\n/**\n * Checks if the given instance state represents a \"virtual ghost\" instance.\n *\n * Note: The evaluation state must be loaded, otherwise this function will always return true.\n *\n * @param state The instance state to check.\n * @returns True if the instance is a virtual ghost, false otherwise.\n */\nexport function isVirtualGhostInstance(\n state: Pick<InstanceState, \"status\" | \"source\" | \"evaluationState\">,\n): boolean {\n if (state.source !== \"virtual\") return false\n if (state.status === \"undeployed\") return false\n\n return !state.evaluationState\n}\n\n/**\n * Checks if the given instance state represents a deployed instance.\n *\n * An instance is considered deployed if the state exists and its status is not \"undeployed\".\n *\n * @param state The instance state to check (can be undefined).\n * @returns True if the instance is deployed, false otherwise.\n */\nexport function isInstanceDeployed(state: InstanceState | undefined): boolean {\n return !!state && state.status !== \"undeployed\"\n}\n\nexport type {\n InstanceEvaluationState,\n InstanceEvaluationStatus,\n InstanceOperationState,\n InstanceOperationStatus,\n InstanceStatus,\n} from \"../../../database\"\n\nexport const finalInstanceOperationStatuses: InstanceOperationStatus[] = [\n \"destroyed\",\n \"updated\",\n \"cancelled\",\n \"destroyed\",\n \"failed\",\n \"skipped\",\n]\n\n/**\n * Checks if an instance operation status exists and is final transient (not stable).\n *\n * @param status The instance operation status to check\n * @returns True if the status is transient\n */\nexport function isTransientInstanceOperationStatus(status?: InstanceOperationStatus): boolean {\n return !!status && !finalInstanceOperationStatuses.includes(status)\n}\n\nexport const workerUnitRegistrationEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"registered\"),\n instanceId: z.string(),\n params: z.record(z.string(), z.unknown()),\n }),\n z.object({\n type: z.literal(\"deregistered\"),\n instanceId: z.string(),\n }),\n])\n\nexport type WorkerUnitRegistrationEvent = z.infer<typeof workerUnitRegistrationEventSchema>\n","import type { ServiceAccount, Terminal, TerminalSession, TerminalStatus } from \"../../../database\"\nimport {\n commonObjectMetaSchema,\n serviceAccountMetaSchema,\n terminalSpecSchema,\n} from \"@highstate/contract\"\nimport { z } from \"zod\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const terminalStatusSchema = z.enum([\n \"active\",\n \"unavailable\",\n]) satisfies z.ZodType<TerminalStatus>\n\nexport const terminalSessionOutputSchema = z.object({\n id: z.cuid2(),\n terminalId: z.cuid2(),\n meta: commonObjectMetaSchema,\n startedAt: z.date(),\n finishedAt: z.date().nullable(),\n})\n\nexport type TerminalSessionOutput = z.infer<typeof terminalSessionOutputSchema>\n\nexport const terminalOutputSchema = z.object({\n id: z.cuid2(),\n name: z.string().nullable(),\n meta: commonObjectMetaSchema,\n status: terminalStatusSchema,\n stateId: z.string().nullable(),\n serviceAccountId: z.string().nullable(),\n serviceAccountMeta: serviceAccountMetaSchema.nullable(),\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type TerminalOutput = z.infer<typeof terminalOutputSchema>\n\nexport const terminalQuerySchema = collectionQuerySchema.extend({\n serviceAccountId: z.string().optional(),\n stateId: z.string().optional(),\n artifactId: z.string().optional(),\n})\n\nexport type TerminalQuery = z.infer<typeof terminalQuerySchema>\n\nexport function toTerminalOutput(\n terminal: Omit<TerminalOutput, \"serviceAccountMeta\">,\n serviceAccount?: Pick<ServiceAccount, \"meta\"> | null,\n): TerminalOutput {\n return {\n ...terminal,\n serviceAccountMeta: serviceAccount?.meta ?? null,\n }\n}\n\nexport function toTerminalDetailsOutput(\n terminal: Omit<TerminalDetailsOutput, \"serviceAccountMeta\">,\n serviceAccount?: Pick<ServiceAccount, \"meta\"> | null,\n): TerminalDetailsOutput {\n return {\n ...terminal,\n serviceAccountMeta: serviceAccount?.meta ?? null,\n }\n}\n\nexport const terminalDetailsOutputSchema = z.object({\n ...terminalOutputSchema.shape,\n spec: terminalSpecSchema,\n})\n\nexport type TerminalDetailsOutput = z.infer<typeof terminalDetailsOutputSchema>\n\nexport function toTerminalSessionOutput(\n terminal: Terminal,\n session: TerminalSession,\n): TerminalSessionOutput {\n return {\n id: session.id,\n terminalId: terminal.id,\n meta: terminal.meta,\n startedAt: session.startedAt,\n finishedAt: session.finishedAt,\n }\n}\n","import { commonObjectMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\nimport { collectionQuerySchema } from \"../base\"\n\nexport const triggerOutputSchema = z.object({\n id: z.cuid2(),\n meta: commonObjectMetaSchema,\n name: z.string(),\n stateId: z.cuid2(),\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type TriggerOutput = z.infer<typeof triggerOutputSchema>\n\nexport const triggerQuerySchema = collectionQuerySchema.extend({\n stateId: z.string().optional(),\n})\n\nexport type TriggerQuery = z.infer<typeof triggerQuerySchema>\n","import { objectMetaSchema, z } from \"@highstate/contract\"\n\nexport const unlockMethodType = z.enum([\"password\", \"passkey\"])\n\nexport const unlockMethodMetaSchema = objectMetaSchema\n .pick({\n title: true,\n description: true,\n })\n .required({ title: true })\n\nexport const unlockMethodInputSchema = z.object({\n meta: unlockMethodMetaSchema,\n type: unlockMethodType,\n encryptedIdentity: z.string(),\n recipient: z.string(),\n})\n\nexport const unlockMethodOutputSchema = z.object({\n id: z.cuid2(),\n type: unlockMethodType,\n meta: unlockMethodMetaSchema,\n recipient: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type UnlockMethodOutput = z.infer<typeof unlockMethodOutputSchema>\n\nexport type UnlockMethodMeta = z.infer<typeof unlockMethodMetaSchema>\nexport type UnlockMethodInput = z.infer<typeof unlockMethodInputSchema>\nexport type UnlockMethodType = z.infer<typeof unlockMethodType>\n","import type { ApiKey, ServiceAccount } from \"../../../database\"\nimport { commonObjectMetaSchema, serviceAccountMetaSchema } from \"@highstate/contract\"\nimport { z } from \"zod\"\nimport { collectionQuerySchema } from \"../base\"\nimport { apiKeyMetaSchema } from \"./api-key\"\n\nexport const MAX_WORKER_START_ATTEMPTS = 3\n\nconst SHA256_PREFIX = \"sha256:\"\nconst SHA256_REGEX = /^[a-f0-9]{64}$/\n\nexport function extractDigestFromImage(image: string): string {\n const atIndex = image.indexOf(\"@\")\n if (atIndex === -1) {\n throw new Error(`Invalid worker image \"${image}\": missing digest.`)\n }\n\n const digestPart = image.slice(atIndex + 1)\n if (!digestPart.startsWith(SHA256_PREFIX)) {\n throw new Error(`Invalid worker image \"${image}\": digest must start with \"sha256:\".`)\n }\n\n const digest = digestPart.slice(SHA256_PREFIX.length).toLowerCase()\n if (!SHA256_REGEX.test(digest)) {\n throw new Error(`Invalid worker image \"${image}\": digest must be 64 hex chars.`)\n }\n\n return digest\n}\n\nexport function getWorkerIdentity(image: string): string {\n const atIndex = image.indexOf(\"@\")\n const withoutDigest = atIndex === -1 ? image : image.slice(0, atIndex)\n const lastColon = withoutDigest.lastIndexOf(\":\")\n const lastSlash = withoutDigest.lastIndexOf(\"/\")\n\n if (lastColon > -1 && lastColon > lastSlash) {\n return withoutDigest.slice(0, lastColon)\n }\n\n return withoutDigest\n}\n\nexport const workerVersionStatusSchema = z.enum([\n \"unknown\",\n \"starting\",\n \"running\",\n \"stopping\",\n \"stopped\",\n \"error\",\n])\n\nexport type WorkerVersionStatus = z.infer<typeof workerVersionStatusSchema>\n\nexport const workerVersionOutputSchema = z.object({\n id: z.cuid2(),\n digest: z.string(),\n meta: commonObjectMetaSchema,\n status: workerVersionStatusSchema,\n enabled: z.boolean(),\n apiKeyId: z.string(),\n apiKeyMeta: apiKeyMetaSchema,\n createdAt: z.date(),\n updatedAt: z.date(),\n})\n\nexport type WorkerVersionOutput = z.infer<typeof workerVersionOutputSchema>\n\nexport const workerOutputSchema = z.object({\n id: z.cuid2(),\n identity: z.string(),\n meta: commonObjectMetaSchema,\n serviceAccountId: z.string(),\n serviceAccountMeta: serviceAccountMetaSchema,\n createdAt: z.date(),\n})\n\nexport type WorkerOutput = z.infer<typeof workerOutputSchema>\n\nexport const workerQuerySchema = collectionQuerySchema.extend({\n serviceAccountId: z.string().optional(),\n})\n\nexport type WorkerQuery = z.infer<typeof workerQuerySchema>\n\nexport function toWorkerOutput(\n worker: Omit<WorkerOutput, \"meta\" | \"serviceAccountMeta\">,\n lastVersion: Pick<WorkerVersionOutput, \"meta\"> | null,\n serviceAccount: Pick<ServiceAccount, \"meta\">,\n): WorkerOutput {\n return {\n ...worker,\n meta: lastVersion?.meta ?? { title: \"Unknown\" },\n serviceAccountMeta: serviceAccount.meta,\n }\n}\n\nexport function toWorkerVersionOutput(\n version: Omit<WorkerVersionOutput, \"apiKeyMeta\">,\n apiKey: Pick<ApiKey, \"meta\">,\n): WorkerVersionOutput {\n return {\n ...version,\n apiKeyMeta: apiKey.meta,\n }\n}\n","import type { Logger } from \"pino\"\nimport { unique } from \"remeda\"\n\nexport type ResolverOutputHandler<TOutput> = (id: string, value: TOutput) => void\nexport type DependentSetHandler = (id: string, dependentSet: Set<string> | undefined) => void\n\nexport abstract class GraphResolver<TNode, TOutput> {\n private readonly workset: Set<string> = new Set()\n private readonly dependencyMap: Map<string, string[]> = new Map()\n private readonly dependentMap: Map<string, Set<string>> = new Map()\n private readonly outputMap: Map<string, TOutput> = new Map()\n\n constructor(\n private readonly nodes: ReadonlyMap<string, TNode>,\n protected readonly logger: Logger,\n private readonly outputHandler?: ResolverOutputHandler<TOutput>,\n private readonly dependentSetHandler?: DependentSetHandler,\n ) {}\n\n addToWorkset(nodeId: string): void {\n this.workset.add(nodeId)\n }\n\n addAllNodesToWorkset(): void {\n for (const nodeId of this.nodes.keys()) {\n this.workset.add(nodeId)\n }\n }\n\n /**\n * The map of calculated outputs.\n */\n get outputs(): ReadonlyMap<string, TOutput> {\n return this.outputMap\n }\n\n /**\n * The map of dependencies for each node.\n *\n * The key is the node identifier, and the value is an array of identifiers of the nodes which depend on it.\n */\n get dependents(): ReadonlyMap<string, Set<string>> {\n return this.dependentMap\n }\n\n requireOutput(nodeId: string): TOutput {\n const output = this.outputMap.get(nodeId)\n if (!output) {\n throw new Error(`Output for node ${nodeId} is not available`)\n }\n\n return output\n }\n\n /**\n * Gets the list of the identifiers of the dependencies for the node.\n *\n * Used to produce the dependency graph.\n */\n protected abstract getNodeDependencies(node: TNode): string[]\n\n /**\n * Processes the node and returns the output.\n */\n protected abstract processNode(node: TNode, logger: Logger): TOutput | Promise<TOutput>\n\n /**\n * Gets the identifiers of the nodes that depend on the given node directly.\n *\n * Returns an empty array if there are no dependents.\n */\n getDependents(nodeId: string): string[] {\n const dependents = this.dependentMap.get(nodeId)\n if (!dependents) {\n return []\n }\n\n return Array.from(dependents)\n }\n\n /**\n * Invalidates the node and all nodes that depend on it.\n *\n * Also adds the node to the work set for processing.\n */\n invalidate(nodeId: string): void {\n const stack = [nodeId]\n\n while (stack.length > 0) {\n const nodeId = stack.pop()!\n if (!this.nodes.has(nodeId)) {\n // it is ok to invalidate deleted nodes\n continue\n }\n\n // remove the node from the output map\n this.outputMap.delete(nodeId)\n this.workset.add(nodeId)\n\n const dependents = this.dependentMap.get(nodeId)\n if (!dependents) {\n continue\n }\n\n for (const dependentId of dependents) {\n if (this.outputMap.has(dependentId)) {\n // add the dependent to the stack for further processing\n stack.push(dependentId)\n }\n }\n }\n }\n\n /**\n * Invalidates a single node without invalidating its dependents.\n *\n * Also adds the node to the work set for processing.\n *\n * Should be used with caution, as it may lead to inconsistent state if the dependents are not re-processed separately.\n */\n invalidateSingle(nodeId: string): void {\n if (!this.nodes.has(nodeId)) {\n // it is ok to invalidate deleted nodes\n return\n }\n\n // remove the node from the output map\n this.outputMap.delete(nodeId)\n this.workset.add(nodeId)\n }\n\n /**\n * Resolves all not-resolved or invalidated nodes in the graph.\n *\n * The abort signal of the previous operation must be called before calling this method again.\n */\n async process(signal?: AbortSignal): Promise<void> {\n type StackItem = {\n nodeId: string\n resolved: boolean\n dependencies: string[]\n }\n\n while (this.workset.size > 0) {\n const rootNodeId = this.workset.values().next().value!\n const stack: StackItem[] = [{ nodeId: rootNodeId, resolved: false, dependencies: [] }]\n\n while (stack.length > 0) {\n const stackItem = stack[stack.length - 1]\n const { nodeId, resolved } = stackItem\n\n const node = this.nodes.get(nodeId)\n if (!node) {\n this.logger.warn({ nodeId }, \"node not found in the graph, skipping\")\n stack.pop()\n continue\n }\n\n if (this.outputMap.has(nodeId)) {\n // already processed\n stack.pop()\n continue\n }\n\n if (!resolved) {\n stackItem.dependencies = unique(this.getNodeDependencies(node))\n\n let hasUnresolvedDependencies = false\n\n for (const depId of stackItem.dependencies) {\n if (!this.nodes.has(depId)) {\n this.logger.warn({ depId, nodeId }, \"dependency not found in the graph, skipping\")\n continue\n }\n\n if (!this.outputMap.has(depId)) {\n stack.push({ nodeId: depId, resolved: false, dependencies: [] })\n hasUnresolvedDependencies = true\n }\n }\n\n if (hasUnresolvedDependencies) {\n // wait for dependencies to be resolved\n stackItem.resolved = true\n continue\n }\n }\n\n // all dependencies are resolved, process the node\n const output = await this.processNode(node, this.logger)\n\n if (signal?.aborted) {\n this.logger.warn({ nodeId }, \"processing aborted, skipping output\")\n return\n }\n\n const changedDependentMaps = new Set<string>()\n\n // remove all dependent nodes\n const oldDependencies = this.dependencyMap.get(nodeId) ?? []\n for (const depId of oldDependencies) {\n const dependantSet = this.dependentMap.get(depId)\n if (dependantSet) {\n dependantSet.delete(nodeId)\n changedDependentMaps.add(depId)\n if (dependantSet.size === 0) {\n this.dependentMap.delete(depId)\n }\n }\n }\n\n // add the new dependencies\n for (const depId of stackItem.dependencies) {\n let dependantSet = this.dependentMap.get(depId)\n if (!dependantSet) {\n dependantSet = new Set()\n this.dependentMap.set(depId, dependantSet)\n }\n\n dependantSet.add(nodeId)\n changedDependentMaps.add(depId)\n }\n\n // if the dependent map has changed, notify the handler\n if (this.dependentSetHandler) {\n for (const depId of changedDependentMaps) {\n const dependents = this.dependentMap.get(depId)\n this.dependentSetHandler(depId, dependents)\n }\n }\n\n this.outputMap.set(nodeId, output)\n this.outputHandler?.(nodeId, output)\n this.dependencyMap.set(nodeId, stackItem.dependencies)\n\n stack.pop()\n }\n\n this.workset.delete(rootNodeId)\n }\n }\n}\n\n/**\n * Gets all identifiers of the nodes that depend on the given node directly or indirectly.\n *\n * @param dependentMap The map of dependents, received from the graph resolver.\n * @param nodeId The identifier of the node to get dependents for.\n */\nexport function getAllDependents(\n dependentMap: ReadonlyMap<string, Iterable<string>>,\n nodeId: string,\n): string[] {\n const result = new Set<string>()\n const stack: string[] = [nodeId]\n\n while (stack.length > 0) {\n const dependents = dependentMap.get(stack.pop()!)\n if (!dependents) {\n continue\n }\n\n for (const dependentId of dependents) {\n if (!result.has(dependentId)) {\n result.add(dependentId)\n stack.push(dependentId)\n }\n }\n }\n\n return Array.from(result)\n}\n","import {\n type ComponentModel,\n type HubInput,\n type HubModel,\n type InstanceInput,\n type InstanceModel,\n isUnitModel,\n} from \"@highstate/contract\"\nimport { fromEntries, mapValues } from \"remeda\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type InputResolverNode =\n | {\n kind: \"instance\"\n instance: InstanceModel\n component: ComponentModel\n }\n | {\n kind: \"hub\"\n hub: HubModel\n }\n\nexport type ResolvedInstanceInput = {\n input: InstanceInput\n type: string\n}\n\nexport type InputResolverOutput =\n | {\n kind: \"instance\"\n instance: InstanceModel\n component: ComponentModel\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n resolvedOutputs: Record<string, InstanceInput[]> | undefined\n resolvedInjectionInputs: ResolvedInstanceInput[]\n matchedInjectionInputs: ResolvedInstanceInput[]\n }\n | {\n kind: \"hub\"\n resolvedInputs: ResolvedInstanceInput[]\n }\n\n/**\n * Resolves the all recursive instance and hub inputs based on its direct inputs and injected inputs.\n */\nexport class InputResolver extends GraphResolver<InputResolverNode, InputResolverOutput> {\n getNodeDependencies(node: InputResolverNode): string[] {\n const dependencies: string[] = []\n\n if (node.kind === \"hub\") {\n for (const input of node.hub.inputs ?? []) {\n dependencies.push(`instance:${input.instanceId}`)\n }\n\n for (const input of node.hub.injectionInputs ?? []) {\n dependencies.push(`hub:${input.hubId}`)\n }\n\n return dependencies\n }\n\n for (const inputs of Object.values(node.instance.inputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(`instance:${input.instanceId}`)\n }\n }\n\n for (const inputs of Object.values(node.instance.hubInputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(`hub:${input.hubId}`)\n }\n }\n\n for (const input of node.instance.injectionInputs ?? []) {\n dependencies.push(`hub:${input.hubId}`)\n }\n\n return dependencies\n }\n\n processNode(node: InputResolverNode): InputResolverOutput {\n const getHubOutput = (input: HubInput) => {\n const output = this.outputs.get(`hub:${input.hubId}`)\n if (!output) {\n return { resolvedInputs: [] }\n }\n\n if (output.kind !== \"hub\") {\n throw new Error(\"Expected hub node\")\n }\n\n return output\n }\n\n const getInstanceOutput = (input: InstanceInput) => {\n const output = this.outputs.get(`instance:${input.instanceId}`)\n if (!output) {\n return {\n component: null,\n resolvedInputs: [] as ResolvedInstanceInput[],\n resolvedOutputs: [] as InstanceInput[],\n }\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return {\n component: output.component,\n resolvedInputs: output.resolvedInputs[input.output] ?? [],\n resolvedOutputs: output.resolvedOutputs?.[input.output],\n }\n }\n\n // resolve inputs for hub\n if (node.kind === \"hub\") {\n const hubResult: Map<string, ResolvedInstanceInput> = new Map()\n\n const addHubResult = (input: ResolvedInstanceInput) => {\n hubResult.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n\n for (const input of node.hub.inputs ?? []) {\n const { component } = getInstanceOutput(input)\n const componentInput = component?.outputs[input.output]\n\n if (!componentInput) {\n this.logger.warn({ msg: \"output not found in the component\", input, component })\n continue\n }\n\n addHubResult({ input, type: componentInput.type })\n }\n\n for (const injectionInput of node.hub.injectionInputs ?? []) {\n const { resolvedInputs } = getHubOutput(injectionInput)\n\n for (const input of resolvedInputs) {\n addHubResult(input)\n }\n }\n\n return {\n kind: \"hub\",\n resolvedInputs: Array.from(hubResult.values()),\n }\n }\n\n // use evaluation results for virtual instances (composite children)\n // this is NOT an optimization - it's the ONLY way to resolve inputs for composite children\n // because they don't exist in the project model\n // the project model only contains top-level instances,\n // while composite children are produced by evaluation\n // without this, we cannot resolve connections to/from instances inside composites\n // this doesn't create a circular dependency because evaluation only needs resolution for\n // top-level instances (from project model), not for the virtual instances it produces\n if (node.instance.resolvedInputs) {\n return {\n kind: \"instance\",\n instance: node.instance,\n component: node.component,\n resolvedInputs: mapValues(node.instance.resolvedInputs, (inputs, inputName) => {\n const componentInput = node.component.inputs[inputName]\n if (!componentInput) {\n this.logger.warn({\n msg: \"input not found in the component\",\n inputName,\n component: node.component,\n })\n return []\n }\n\n return inputs.map(input => ({ input, type: componentInput.type }))\n }),\n resolvedOutputs: node.instance.resolvedOutputs ?? {},\n resolvedInjectionInputs: [],\n matchedInjectionInputs: [],\n }\n }\n\n // resolve inputs for instance\n const resolvedInputsMap: Map<string, Map<string, ResolvedInstanceInput>> = new Map()\n\n const addInstanceResult = (inputName: string, input: ResolvedInstanceInput) => {\n let inputs = resolvedInputsMap.get(inputName)\n if (!inputs) {\n inputs = new Map()\n resolvedInputsMap.set(inputName, inputs)\n }\n\n inputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n\n const addInstanceInput = (inputName: string, input: InstanceInput) => {\n const componentInput = node.component.inputs[inputName]\n if (!componentInput) {\n this.logger.warn({\n msg: \"input not found in the component\",\n input,\n component: node.component,\n })\n return\n }\n\n const { component, resolvedOutputs } = getInstanceOutput(input)\n\n if (!component) {\n this.logger.warn({ instanceId: node.instance.id, input }, \"no output found for the input\")\n return\n }\n\n if (isUnitModel(component)) {\n addInstanceResult(inputName, { input, type: componentInput.type })\n return\n }\n\n if (resolvedOutputs) {\n for (const output of resolvedOutputs) {\n addInstanceResult(inputName, { input: output, type: componentInput.type })\n }\n } else {\n // if the instance is not evaluated, we a forced to use the input as is\n addInstanceResult(inputName, { input, type: componentInput.type })\n }\n }\n\n for (const [inputName, inputs] of Object.entries(node.instance.inputs ?? {})) {\n for (const input of inputs) {\n addInstanceInput(inputName, input)\n }\n }\n\n const injectionInputs: Map<string, ResolvedInstanceInput> = new Map()\n const matchedInjectionInputs: Map<string, ResolvedInstanceInput> = new Map()\n\n for (const injectionInput of node.instance.injectionInputs ?? []) {\n const { resolvedInputs } = getHubOutput(injectionInput)\n for (const input of resolvedInputs) {\n injectionInputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n }\n\n for (const [inputName, componentInput] of Object.entries(node.component.inputs ?? {})) {\n const allInputs = new Map<string, ResolvedInstanceInput>(injectionInputs)\n const hubInputs = node.instance.hubInputs?.[inputName] ?? []\n\n for (const hubInput of hubInputs) {\n const { resolvedInputs } = getHubOutput(hubInput)\n for (const input of resolvedInputs) {\n allInputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n }\n\n for (const input of allInputs.values()) {\n if (input.type === componentInput.type) {\n addInstanceInput(inputName, input.input)\n\n const key = `${input.input.instanceId}:${input.input.output}`\n if (injectionInputs.has(key)) {\n matchedInjectionInputs.set(key, input)\n }\n }\n }\n }\n\n const resolvedInputs = fromEntries(\n Array.from(resolvedInputsMap.entries()).map(([inputName, inputs]) => [\n inputName,\n Array.from(inputs.values()),\n ]),\n )\n\n return {\n kind: \"instance\",\n instance: node.instance,\n component: node.component,\n resolvedInputs,\n resolvedOutputs: node.instance.resolvedOutputs,\n resolvedInjectionInputs: Array.from(injectionInputs.values()),\n matchedInjectionInputs: Array.from(matchedInjectionInputs.values()),\n }\n }\n}\n\nexport function getResolvedHubInputs(\n outputMap: ReadonlyMap<string, InputResolverOutput>,\n hubId: string,\n): ResolvedInstanceInput[] {\n const output = outputMap.get(`hub:${hubId}`)\n if (!output) {\n return []\n }\n\n if (output.kind !== \"hub\") {\n throw new Error(\"Expected hub node\")\n }\n\n return output.resolvedInputs\n}\n\nexport function getResolvedInstanceInputs(\n outputMap: ReadonlyMap<string, InputResolverOutput>,\n instanceId: string,\n): Record<string, ResolvedInstanceInput[]> {\n const output = outputMap.get(`instance:${instanceId}`)\n if (!output) {\n return {}\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.resolvedInputs\n}\n\nexport function getResolvedInjectionInstanceInputs(\n outputMap: ReadonlyMap<string, InputResolverOutput>,\n instanceId: string,\n): ResolvedInstanceInput[] {\n const output = outputMap.get(`instance:${instanceId}`)\n if (!output) {\n return []\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.resolvedInjectionInputs\n}\n\nexport function getMatchedInjectionInstanceInputs(\n outputMap: ReadonlyMap<string, InputResolverOutput>,\n instanceId: string,\n): ResolvedInstanceInput[] {\n const output = outputMap.get(`instance:${instanceId}`)\n if (!output) {\n return []\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.matchedInjectionInputs\n}\n\nexport function getResolvedInstanceOutputs(\n outputMap: ReadonlyMap<string, InputResolverOutput>,\n instanceId: string,\n): Record<string, InstanceInput[]> | undefined {\n const output = outputMap.get(`instance:${instanceId}`)\n if (!output) {\n return undefined\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.resolvedOutputs\n}\n","export type AsyncBatcherOptions = {\n waitMs?: number\n maxWaitTimeMs?: number\n}\n\nexport type AsyncBatcher<T> = {\n /**\n * Add an item to the batch.\n */\n call(item: T): void\n\n /**\n * Immediately flush the pending batch (if any).\n */\n flush(): Promise<void>\n}\n\nexport function createAsyncBatcher<T>(\n fn: (items: T[]) => Promise<void> | void,\n { waitMs = 100, maxWaitTimeMs = 1000 }: AsyncBatcherOptions = {},\n): AsyncBatcher<T> {\n let batch: T[] = []\n let activeTimeout: NodeJS.Timeout | null = null\n let maxWaitTimeout: NodeJS.Timeout | null = null\n let firstCallTimestamp: number | null = null\n\n async function processBatch() {\n if (batch.length === 0) return\n\n const currentBatch = batch\n batch = [] // Reset batch before async call\n\n await fn(currentBatch)\n\n // Clear max wait timer since batch has been processed\n if (maxWaitTimeout) {\n clearTimeout(maxWaitTimeout)\n maxWaitTimeout = null\n }\n firstCallTimestamp = null\n }\n\n function schedule() {\n if (activeTimeout) clearTimeout(activeTimeout)\n activeTimeout = setTimeout(() => {\n activeTimeout = null\n void processBatch()\n }, waitMs)\n\n // Ensure batch is executed within maxWaitTimeMs\n if (!firstCallTimestamp) {\n firstCallTimestamp = Date.now()\n maxWaitTimeout = setTimeout(() => {\n if (activeTimeout) clearTimeout(activeTimeout)\n activeTimeout = null\n void processBatch()\n }, maxWaitTimeMs)\n }\n }\n\n return {\n /**\n * Add an item to the batch.\n */\n call(item: T): void {\n batch.push(item)\n schedule()\n },\n\n /**\n * Immediately flush the pending batch (if any).\n */\n async flush(): Promise<void> {\n if (activeTimeout) {\n clearTimeout(activeTimeout)\n activeTimeout = null\n }\n if (maxWaitTimeout) {\n clearTimeout(maxWaitTimeout)\n maxWaitTimeout = null\n }\n await processBatch()\n },\n }\n}\n","export function int32ToBytes(value: number): Uint8Array {\n const buffer = new ArrayBuffer(4)\n const view = new DataView(buffer)\n view.setInt32(0, value, true) // true for little-endian\n return new Uint8Array(buffer)\n}\n","export class PromiseTracker {\n private readonly trackedPromises = new Set<Promise<unknown>>()\n\n /**\n * Tracks a promise to ensure its rejection is handled inside the tracker's scope.\n */\n track<T>(promise: Promise<T>): void {\n const wrapped = promise.finally(() => this.trackedPromises.delete(promise))\n\n this.trackedPromises.add(wrapped)\n }\n\n /**\n * Waits for all tracked promises to resolve or reject.\n */\n async waitForAll(): Promise<void> {\n if (this.trackedPromises.size === 0) {\n return\n }\n\n const toTrack = Array.from(this.trackedPromises)\n this.trackedPromises.clear()\n\n await waitAll(toTrack)\n }\n}\n\n/**\n * Waits for all promises to resolve or reject.\n *\n * Will throw a `AggregateError` if any of the promises are rejected.\n *\n * Unlike `Promise.all`, this function does not short-circuit on the first rejection,\n * allowing all promises to be awaited before handling errors.\n *\n * @param promises The iterable of promises to wait for.\n */\nexport async function waitAll(promises: Iterable<Promise<unknown>>): Promise<void> {\n const results = await Promise.allSettled(promises)\n const rejected = results.filter(p => p.status === \"rejected\")\n\n if (!rejected.length) {\n return\n }\n\n throw new AggregateError(\n rejected.map(p => p.reason as Error),\n \"Some promises were rejected\",\n )\n}\n","import type { InstanceState } from \"../models/project\"\nimport type { ResolvedInstanceInput } from \"./input\"\nimport { crc32 } from \"@aws-crypto/crc32\"\nimport { type ComponentModel, type InstanceModel, isUnitModel } from \"@highstate/contract\"\nimport { encode } from \"@msgpack/msgpack\"\nimport { int32ToBytes } from \"../utils\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type InputHashNode = {\n instance: InstanceModel\n component: ComponentModel\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n state: InstanceState | undefined\n sourceHash: number | undefined\n}\n\nexport type InputHashOutput = {\n inputHash: number\n dependencyOutputHash: number\n outputHash: number\n}\n\n/**\n * Resolves the hash of the instance based on its args, resolved input hashes, source hash, and the output hash.\n */\nexport class InputHashResolver extends GraphResolver<InputHashNode, InputHashOutput> {\n getNodeDependencies({ resolvedInputs }: InputHashNode): string[] {\n const dependencies: string[] = []\n\n for (const inputs of Object.values(resolvedInputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(input.input.instanceId)\n }\n }\n\n return dependencies\n }\n\n processNode({\n instance,\n component,\n resolvedInputs,\n sourceHash,\n state,\n }: InputHashNode): InputHashOutput {\n const inputHashSink: Uint8Array[] = []\n\n // 1. include the component definition hash\n inputHashSink.push(int32ToBytes(component.definitionHash))\n\n // 2. include the input hash nonce if available\n if (state?.inputHashNonce) {\n inputHashSink.push(int32ToBytes(state.inputHashNonce))\n }\n\n // 3. include instance args encoded as msgpack\n if (instance.args) {\n inputHashSink.push(encode(instance.args))\n }\n\n // 4. include the source hash if available\n if (sourceHash) {\n inputHashSink.push(int32ToBytes(sourceHash))\n } else if (isUnitModel(component)) {\n this.logger.warn(\n { instanceId: instance.id },\n \"missing source hash for unit model, this may lead to incorrect input hash\",\n )\n }\n\n const sortedInputs = Object.entries(resolvedInputs)\n //\n .sort(([a], [b]) => a.localeCompare(b))\n\n const dependencyInstanceIds = new Set<string>()\n\n // 5. include the sorted resolved inputs\n for (const [inputKey, inputs] of sortedInputs) {\n if (Object.keys(inputs).length === 0) {\n continue\n }\n\n // 5.1. include the input key to distinguish different inputs with possibly the same instanceId\n inputHashSink.push(Buffer.from(inputKey))\n\n // the instances inside the input should also have stable order\n const instanceIds = inputs.map(input => input.input.instanceId).sort()\n\n for (const instanceId of instanceIds) {\n const dependency = this.outputs.get(instanceId)\n if (!dependency) {\n this.logger.warn(\n { instanceId, dependentInstanceId: instance.id },\n \"missing dependency when calculating input hash, this may lead to incorrect input hash\",\n )\n continue\n }\n\n // 5.2 include both input and output hashes of the dependency\n inputHashSink.push(int32ToBytes(dependency.inputHash))\n inputHashSink.push(int32ToBytes(dependency.outputHash))\n\n dependencyInstanceIds.add(instanceId)\n }\n }\n\n // also calculate the dependency output hash as the combined output hashes of all unique dependencies\n const dependencyOutputHashSink: Uint8Array[] = []\n const sortedDependencyInstanceIds = Array.from(dependencyInstanceIds).sort()\n\n for (const dependencyInstanceId of sortedDependencyInstanceIds) {\n const dependency = this.outputs.get(dependencyInstanceId)\n if (!dependency) {\n this.logger.warn(\n { instanceId: dependencyInstanceId, dependentInstanceId: instance.id },\n \"missing dependency when calculating dependency output hash, this may lead to incorrect input hash\",\n )\n continue\n }\n\n dependencyOutputHashSink.push(int32ToBytes(dependency.outputHash))\n }\n\n return {\n inputHash: crc32(Buffer.concat(inputHashSink)),\n dependencyOutputHash: crc32(Buffer.concat(dependencyOutputHashSink)),\n outputHash: state?.outputHash ?? 0,\n }\n }\n}\n","import type { InstanceState } from \"../models/project\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport class StateResolver extends GraphResolver<InstanceState, void> {\n protected getNodeDependencies(node: InstanceState): string[] {\n if (!node.lastOperationState) {\n return []\n }\n\n const dependencies = new Set<string>()\n for (const inputs of Object.values(node.lastOperationState.resolvedInputs)) {\n for (const input of inputs) {\n dependencies.add(input.instanceId)\n }\n }\n\n return Array.from(dependencies)\n }\n\n protected processNode(): void {\n return\n }\n}\n","import type { InstanceState } from \"../models\"\nimport type { ResolvedInstanceInput } from \"./input\"\nimport {\n type ComponentModel,\n type InstanceModel,\n isUnitModel,\n parseArgumentValue,\n} from \"@highstate/contract\"\nimport { Ajv } from \"ajv\"\nimport styles from \"ansi-styles\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type ValidationNode = {\n instance: InstanceModel\n component: ComponentModel\n state: InstanceState | undefined\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n}\n\nexport type ValidationOutput =\n | {\n status: \"ok\"\n }\n | {\n status: \"error\"\n errorText: string\n }\n\n/**\n * Validates the instance based on its arguments and inputs.\n */\nexport class ValidationResolver extends GraphResolver<ValidationNode, ValidationOutput> {\n getNodeDependencies({ resolvedInputs }: ValidationNode): string[] {\n const dependencies: string[] = []\n\n for (const inputs of Object.values(resolvedInputs)) {\n for (const input of inputs) {\n dependencies.push(input.input.instanceId)\n }\n }\n\n return dependencies\n }\n\n processNode({ instance, component, state, resolvedInputs }: ValidationNode): ValidationOutput {\n const ajv = new Ajv({ strict: false })\n\n this.logger.debug({ instanceId: instance.id }, \"validating instance\")\n\n const validationErrors: string[] = []\n\n for (const [name, argument] of Object.entries(component.args)) {\n try {\n const value = parseArgumentValue(instance.args?.[name])\n\n if (!argument.required && value === undefined) {\n continue\n }\n\n if (!ajv.validate(argument.schema, value)) {\n this.logger.debug({ instanceId: instance.id, argumentName: name }, \"invalid argument\")\n\n validationErrors.push(\n `Invalid argument ` +\n `\"${styles.blueBright.open}${name}${styles.reset.close}\": ` +\n ajv.errorsText(),\n )\n }\n } catch (error) {\n this.logger.debug(\n { instanceId: instance.id, argumentName: name, error },\n \"failed to validate argument\",\n )\n\n validationErrors.push(\n `Failed to validate argument ` +\n `\"${styles.blueBright.open}${name}${styles.reset.close}\": ` +\n (error instanceof Error ? error.message : String(error)),\n )\n }\n }\n\n if (isUnitModel(component)) {\n for (const [secret, secretSchema] of Object.entries(component.secrets)) {\n if (secretSchema.required && !state?.secretNames?.includes(secret)) {\n validationErrors.push(\n `Missing required secret ` +\n `\"${styles.blueBright.open}${secret}${styles.reset.close}\"`,\n )\n }\n }\n }\n\n for (const [key, inputs] of Object.entries(resolvedInputs)) {\n for (const input of inputs) {\n const inputInstance = this.outputs.get(input.input.instanceId)\n if (inputInstance?.status !== \"ok\") {\n validationErrors.push(\n `Invalid input ` +\n `\"${styles.blueBright.open}${key}${styles.reset.close}\":\\n` +\n `\"${styles.blueBright.open}${input.input.instanceId}${styles.reset.close}\" ` +\n `has validation errors`,\n )\n }\n }\n }\n\n for (const [name, input] of Object.entries(component.inputs)) {\n if (!input.required) {\n continue\n }\n\n if (!resolvedInputs[name] || !resolvedInputs[name].length) {\n validationErrors.push(\n `Missing required input ` +\n `\"${styles.blueBright.open}${name}${styles.reset.close}\" ` +\n `of type ` +\n `\"${styles.greenBright.open}${input.type}${styles.reset.close}\"`,\n )\n }\n }\n\n if (validationErrors.length === 0) {\n return { status: \"ok\" }\n }\n\n const numberPrefixLength = (validationErrors.length + 1).toString().length + 2 // +2 for the \". \" prefix\n\n const formattedError = validationErrors\n .map((error, index) => {\n const lines = error.split(\"\\n\")\n const prefix = `${index + 1}. `\n\n return lines\n .map((line, lineIndex) => {\n const linePrefix = lineIndex === 0 ? prefix : \" \".repeat(numberPrefixLength)\n\n return `${linePrefix}${line}`\n })\n .join(\"\\r\\n\")\n })\n .join(\"\\r\\n\")\n\n return {\n status: \"error\",\n errorText: formattedError,\n }\n }\n}\n","import type { Logger } from \"pino\"\nimport type { InstanceState } from \"../models/project\"\nimport type { DependentSetHandler, GraphResolver, ResolverOutputHandler } from \"./graph-resolver\"\nimport { InputResolver, type InputResolverNode, type InputResolverOutput } from \"./input\"\nimport { type InputHashNode, type InputHashOutput, InputHashResolver } from \"./input-hash\"\nimport { StateResolver } from \"./state\"\nimport { type ValidationNode, type ValidationOutput, ValidationResolver } from \"./validation\"\n\nexport type GraphResolverType = keyof GraphResolverMap\n\nexport type GraphResolverMap = {\n InputResolver: [InputResolverNode, InputResolverOutput]\n InputHashResolver: [InputHashNode, InputHashOutput]\n ValidationResolver: [ValidationNode, ValidationOutput]\n // biome-ignore lint/suspicious/noConfusingVoidType: it is return type\n StateResolver: [InstanceState, void]\n}\n\nexport const resolverFactories = {\n InputResolver,\n InputHashResolver,\n ValidationResolver,\n StateResolver,\n} as Record<\n GraphResolverType,\n new (\n nodes: ReadonlyMap<string, unknown>,\n logger: Logger,\n outputHandler?: ResolverOutputHandler<unknown>,\n dependentSetHandler?: DependentSetHandler,\n ) => GraphResolver<unknown, unknown>\n>\n"]}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AccessError, InstanceLockLostError, globalProjectSpace, codebaseLibrary, hostPulumiBackend, codebaseProjectModelStorage, databaseProjectModelStorage, ProjectLockedError, ProjectNotFoundError, BackendError, forSchema, projectOutputSchema, InstanceStateNotFoundError, InstanceLockedError, waitAll, OperationNotFoundError, InputResolver, CannotDeleteLastUnlockMethodError, InvalidInstanceKindError, operationOutputSchema, terminalOutputSchema, toTerminalOutput, terminalDetailsOutputSchema, toTerminalDetailsOutput, serviceAccountOutputSchema, apiKeyOutputSchema, toApiKeyOutput, workerOutputSchema, toWorkerOutput, workerVersionOutputSchema, toWorkerVersionOutput, pageDetailsOutputSchema, toPageOutput, secretOutputSchema, toSecretOutput, artifactOutputSchema, triggerOutputSchema, unlockMethodOutputSchema, pageOutputSchema, toTerminalSessionOutput, extractDigestFromImage, getWorkerIdentity, WorkerVersionNotFoundError, createAsyncBatcher, operationOptionsSchema, finalOperationStatuses, finalInstanceOperationStatuses, diffLibraries, isTransientInstanceOperationStatus, InputHashResolver, PromiseTracker, workerUnitRegistrationEventSchema, terminalSessionOutputSchema, operationEventSchema, projectModelEventSchema, instanceLockEventSchema, instanceStateEventSchema, projectUnlockStateSchema, isVirtualGhostInstance } from './chunk-5WVU2AK4.js';
1
+ import { AccessError, InstanceLockLostError, globalProjectSpace, codebaseLibrary, hostPulumiBackend, codebaseProjectModelStorage, databaseProjectModelStorage, ProjectLockedError, ProjectNotFoundError, BackendError, forSchema, projectOutputSchema, InstanceStateNotFoundError, InstanceLockedError, waitAll, OperationNotFoundError, InputResolver, CannotDeleteLastUnlockMethodError, InvalidInstanceKindError, operationOutputSchema, terminalOutputSchema, toTerminalOutput, terminalDetailsOutputSchema, toTerminalDetailsOutput, serviceAccountOutputSchema, apiKeyOutputSchema, toApiKeyOutput, workerOutputSchema, toWorkerOutput, workerVersionOutputSchema, toWorkerVersionOutput, pageDetailsOutputSchema, toPageOutput, secretOutputSchema, toSecretOutput, artifactOutputSchema, triggerOutputSchema, unlockMethodOutputSchema, pageOutputSchema, toTerminalSessionOutput, extractDigestFromImage, getWorkerIdentity, WorkerVersionNotFoundError, createAsyncBatcher, operationOptionsSchema, finalOperationStatuses, finalInstanceOperationStatuses, diffLibraries, isTransientInstanceOperationStatus, InputHashResolver, PromiseTracker, workerUnitRegistrationEventSchema, terminalSessionOutputSchema, operationEventSchema, projectModelEventSchema, instanceLockEventSchema, instanceStateEventSchema, projectUnlockStateSchema, isVirtualGhostInstance } from './chunk-JNUJ4LTX.js';
2
2
  import { codebaseConfig, stringArrayType, createProjectLogger, isAbortErrorLike, getCodebaseHighstatePath, resolveMainLocalProject, errorToString, waitForAbort, AbortError, renderTree, runWithRetryOnError } from './chunk-VB4YL327.js';
3
3
  import { __using, __callDispose } from './chunk-I7BWSAN6.js';
4
4
  import { randomBytes, createHash } from 'node:crypto';
@@ -2413,7 +2413,7 @@ var SecretService = class {
2413
2413
  * @param tx The database transaction to use.
2414
2414
  * @param libraryId The ID of the library containing the component.
2415
2415
  * @param stateId The ID of the instance state.
2416
- * @param secretValues The secrets to create or update. Missing secrets will be deleted.
2416
+ * @param secretValues The secrets to create or update. Existing secrets not in this update are preserved.
2417
2417
  * @returns The list of secret names that were updated or created.
2418
2418
  */
2419
2419
  async updateInstanceSecretsCore(tx, libraryId, stateId, secretValues) {
@@ -2466,22 +2466,15 @@ var SecretService = class {
2466
2466
  }
2467
2467
  });
2468
2468
  }
2469
- const providedSecretNames = Object.keys(secretValues);
2470
- await tx.secret.deleteMany({
2471
- where: {
2472
- stateId,
2473
- name: { notIn: providedSecretNames }
2474
- }
2475
- });
2476
2469
  return Object.keys(secretValues);
2477
2470
  }
2478
2471
  /**
2479
- * Updates secrets for a specific instance, handling both creation/updates and deletions.
2472
+ * Updates secrets for a specific instance, handling creation and updates.
2480
2473
  * Only works with unit instances.
2481
2474
  *
2482
2475
  * @param projectId The project ID containing the instance.
2483
2476
  * @param stateId The ID of the instance state.
2484
- * @param secretValues The secrets to create or update. Missing secrets will be deleted.
2477
+ * @param secretValues The secrets to create or update. Existing secrets not in this update are preserved.
2485
2478
  */
2486
2479
  async updateInstanceSecrets(projectId, stateId, secretValues) {
2487
2480
  const database = await this.database.forProject(projectId);
@@ -4666,6 +4659,9 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4666
4659
  HIGHSTATE_TEMP_PATH: unitTempPath,
4667
4660
  ...options.envVars
4668
4661
  };
4662
+ if (options.debug) {
4663
+ envVars.TF_LOG = "DEBUG";
4664
+ }
4669
4665
  if (artifactEnv.readPath) {
4670
4666
  envVars.HIGHSTATE_ARTIFACT_READ_PATH = artifactEnv.readPath;
4671
4667
  }
@@ -4696,6 +4692,7 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4696
4692
  refresh: options.refresh,
4697
4693
  signal,
4698
4694
  diff: preview,
4695
+ debug: options.debug,
4699
4696
  onEvent: (event) => {
4700
4697
  if (event.resourcePreEvent) {
4701
4698
  totalResourceCount = updateResourceCount(
@@ -4731,7 +4728,6 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4731
4728
  if (outputs["$artifacts"]) {
4732
4729
  const artifacts = z.record(z.string(), unitArtifactSchema.array()).parse(outputs["$artifacts"].value);
4733
4730
  await collectAndStoreArtifacts(
4734
- // biome-ignore lint/style/noNonNullAssertion: writePath is guaranteed to be non-null here
4735
4731
  artifactEnv.writePath,
4736
4732
  options.projectId,
4737
4733
  options.stateId,
@@ -4804,7 +4800,8 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4804
4800
  projectPath: resolvedSource.projectPath,
4805
4801
  envVars: {
4806
4802
  HIGHSTATE_CACHE_DIR: this.cacheDir,
4807
- PULUMI_K8S_DELETE_UNREACHABLE: options.deleteUnreachable ? "true" : ""
4803
+ PULUMI_K8S_DELETE_UNREACHABLE: options.deleteUnreachable ? "true" : "",
4804
+ ...options.debug && { TF_LOG: "DEBUG" }
4808
4805
  }
4809
4806
  },
4810
4807
  async (stack) => {
@@ -4829,6 +4826,7 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4829
4826
  refresh: options.refresh,
4830
4827
  remove: true,
4831
4828
  signal,
4829
+ debug: options.debug,
4832
4830
  onEvent: (event) => {
4833
4831
  if (event.resOutputsEvent) {
4834
4832
  currentResourceCount = updateResourceCount(
@@ -4907,6 +4905,7 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
4907
4905
  async () => {
4908
4906
  const { stdout } = await stack.refresh({
4909
4907
  color: "always",
4908
+ debug: options.debug,
4910
4909
  onEvent: (event) => {
4911
4910
  if (event.resourcePreEvent) {
4912
4911
  totalResourceCount = updateResourceCount(
@@ -5626,7 +5625,7 @@ var WorkerManager = class {
5626
5625
  }
5627
5626
  });
5628
5627
  stdout.on("end", () => {
5629
- if (info.lineBuffer && info.lineBuffer.trim()) {
5628
+ if (info.lineBuffer?.trim()) {
5630
5629
  logBatcher.call({ content: info.lineBuffer, isSystem: false });
5631
5630
  info.lineBuffer = "";
5632
5631
  }
@@ -5649,7 +5648,7 @@ var WorkerManager = class {
5649
5648
  }).finally(async () => {
5650
5649
  const info2 = this.runningWorkers.get(workerVersion.id);
5651
5650
  if (info2) {
5652
- if (info2.lineBuffer && info2.lineBuffer.trim()) {
5651
+ if (info2.lineBuffer?.trim()) {
5653
5652
  info2.logBatcher.call({ content: info2.lineBuffer, isSystem: false });
5654
5653
  info2.lineBuffer = "";
5655
5654
  }
@@ -5986,7 +5985,6 @@ var OperationContext = class _OperationContext {
5986
5985
  this.inputHashNodes.set(instance.id, {
5987
5986
  instance,
5988
5987
  component,
5989
- // biome-ignore lint/style/noNonNullAssertion: я разрешаю
5990
5988
  resolvedInputs: this.resolvedInstanceInputs.get(instance.id),
5991
5989
  state: this.stateMap.get(instance.id),
5992
5990
  sourceHash: this.getSourceHashIfApplicable(instance, component)
@@ -7049,7 +7047,8 @@ ${errors.join("\n")}`
7049
7047
  secrets,
7050
7048
  artifacts,
7051
7049
  signal,
7052
- forceSignal
7050
+ forceSignal,
7051
+ debug: this.operation.options.debug
7053
7052
  });
7054
7053
  await this.watchStateStream(state, instance.type, instance.name, logger);
7055
7054
  logger.info("unit updated");
@@ -7105,7 +7104,8 @@ ${errors.join("\n")}`
7105
7104
  refresh: this.operation.options.refresh,
7106
7105
  secrets,
7107
7106
  signal,
7108
- forceSignal
7107
+ forceSignal,
7108
+ debug: this.operation.options.debug
7109
7109
  });
7110
7110
  logger.debug("unit update requested");
7111
7111
  await this.watchStateStream(state, instance.type, instance.name, logger);
@@ -7144,7 +7144,8 @@ ${errors.join("\n")}`
7144
7144
  signal,
7145
7145
  forceSignal,
7146
7146
  deleteUnreachable: this.operation.options.deleteUnreachableResources,
7147
- forceDeleteState: this.operation.options.forceDeleteState
7147
+ forceDeleteState: this.operation.options.forceDeleteState,
7148
+ debug: this.operation.options.debug
7148
7149
  });
7149
7150
  logger.debug("destroy request sent");
7150
7151
  await this.watchStateStream(state, type, name, logger);
@@ -7169,7 +7170,8 @@ ${errors.join("\n")}`
7169
7170
  instanceType: type,
7170
7171
  instanceName: name,
7171
7172
  signal,
7172
- forceSignal
7173
+ forceSignal,
7174
+ debug: this.operation.options.debug
7173
7175
  });
7174
7176
  logger.debug("unit refresh requested");
7175
7177
  await this.watchStateStream(state, type, name, logger);
@@ -7182,7 +7184,8 @@ ${errors.join("\n")}`
7182
7184
  stateId: state.id,
7183
7185
  libraryId: this.project.libraryId,
7184
7186
  instanceType,
7185
- instanceName
7187
+ instanceName,
7188
+ debug: this.operation.options.debug
7186
7189
  });
7187
7190
  let update;
7188
7191
  for await (update of stream) {
@@ -7757,7 +7760,6 @@ var ProjectEvaluationSubsystem = class _ProjectEvaluationSubsystem {
7757
7760
  }
7758
7761
  const states = evaluatedInstances.map((ei) => {
7759
7762
  return {
7760
- // biome-ignore lint/style/noNonNullAssertion: we ensure this is always set
7761
7763
  stateId: instanceIdToStateMap.get(ei.instanceId).id,
7762
7764
  status: ei.status,
7763
7765
  message: ei.message,