@highstate/backend 0.18.0 → 0.20.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/dist/{chunk-JT4KWE3B.js → chunk-52MY2TCE.js} +348 -19
- package/dist/chunk-52MY2TCE.js.map +1 -0
- package/dist/{chunk-I7BWSAN6.js → chunk-UAWBPTDW.js} +3 -3
- package/dist/{chunk-I7BWSAN6.js.map → chunk-UAWBPTDW.js.map} +1 -1
- package/dist/highstate.manifest.json +4 -4
- package/dist/index.js +4159 -785
- package/dist/index.js.map +1 -1
- package/dist/library/worker/main.js +5 -2
- package/dist/library/worker/main.js.map +1 -1
- package/dist/shared/index.js +2 -2
- package/package.json +7 -7
- package/prisma/backend/_schema/object.prisma +12 -0
- package/prisma/backend/sqlite/migrations/20260222113554_add_object_tracking/migration.sql +7 -0
- package/prisma/project/artifact.prisma +3 -0
- package/prisma/project/entity.prisma +125 -0
- package/prisma/project/instance.prisma +6 -0
- package/prisma/project/migrations/20260301210131_add_entity_tracking/migration.sql +70 -0
- package/prisma/project/migrations/20260302212734_add_resource_hooks_flag/migration.sql +1 -0
- package/prisma/project/operation.prisma +3 -0
- package/src/business/artifact.test.ts +22 -2
- package/src/business/artifact.ts +7 -1
- package/src/business/entity-snapshot.test.ts +684 -0
- package/src/business/entity-snapshot.ts +904 -0
- package/src/business/evaluation.test.ts +56 -0
- package/src/business/evaluation.ts +102 -22
- package/src/business/global-search.test.ts +344 -0
- package/src/business/global-search.ts +902 -0
- package/src/business/index.ts +4 -0
- package/src/business/instance-lock.ts +58 -74
- package/src/business/instance-state.test.ts +15 -1
- package/src/business/instance-state.ts +37 -14
- package/src/business/object-ref-index.test.ts +140 -0
- package/src/business/object-ref-index.ts +193 -0
- package/src/business/operation.test.ts +15 -1
- package/src/business/operation.ts +4 -0
- package/src/business/project-model.ts +154 -13
- package/src/business/project-unlock.ts +25 -2
- package/src/business/project.ts +9 -0
- package/src/business/secret.test.ts +35 -2
- package/src/business/secret.ts +32 -9
- package/src/business/settings.ts +761 -0
- package/src/business/unit-output.test.ts +477 -0
- package/src/business/unit-output.ts +461 -0
- package/src/business/worker.ts +55 -4
- package/src/database/_generated/backend/postgresql/browser.ts +6 -0
- package/src/database/_generated/backend/postgresql/client.ts +6 -0
- package/src/database/_generated/backend/postgresql/internal/class.ts +23 -5
- package/src/database/_generated/backend/postgresql/internal/prismaNamespace.ts +89 -5
- package/src/database/_generated/backend/postgresql/internal/prismaNamespaceBrowser.ts +9 -0
- package/src/database/_generated/backend/postgresql/models/Object.ts +1076 -0
- package/src/database/_generated/backend/postgresql/models.ts +1 -0
- package/src/database/_generated/backend/sqlite/browser.ts +6 -0
- package/src/database/_generated/backend/sqlite/client.ts +6 -0
- package/src/database/_generated/backend/sqlite/internal/class.ts +23 -5
- package/src/database/_generated/backend/sqlite/internal/prismaNamespace.ts +89 -5
- package/src/database/_generated/backend/sqlite/internal/prismaNamespaceBrowser.ts +9 -0
- package/src/database/_generated/backend/sqlite/models/Object.ts +1074 -0
- package/src/database/_generated/backend/sqlite/models.ts +1 -0
- package/src/database/_generated/project/browser.ts +23 -0
- package/src/database/_generated/project/client.ts +23 -0
- package/src/database/_generated/project/commonInputTypes.ts +87 -53
- package/src/database/_generated/project/enums.ts +8 -0
- package/src/database/_generated/project/internal/class.ts +53 -5
- package/src/database/_generated/project/internal/prismaNamespace.ts +367 -13
- package/src/database/_generated/project/internal/prismaNamespaceBrowser.ts +48 -1
- package/src/database/_generated/project/models/Artifact.ts +199 -11
- package/src/database/_generated/project/models/Entity.ts +1274 -0
- package/src/database/_generated/project/models/EntitySnapshot.ts +2389 -0
- package/src/database/_generated/project/models/EntitySnapshotContent.ts +1260 -0
- package/src/database/_generated/project/models/EntitySnapshotReference.ts +1449 -0
- package/src/database/_generated/project/models/InstanceState.ts +361 -1
- package/src/database/_generated/project/models/Operation.ts +148 -3
- package/src/database/_generated/project/models/OperationLog.ts +0 -4
- package/src/database/_generated/project/models.ts +4 -0
- package/src/database/migration.ts +3 -0
- package/src/library/worker/evaluator.ts +7 -1
- package/src/orchestrator/manager.ts +7 -0
- package/src/orchestrator/operation-context.captured-outputs.test.ts +118 -0
- package/src/orchestrator/operation-context.ts +154 -16
- package/src/orchestrator/operation-plan.destroy.test.md +33 -12
- package/src/orchestrator/operation-plan.destroy.test.ts +140 -2
- package/src/orchestrator/operation-plan.fixtures.ts +2 -0
- package/src/orchestrator/operation-plan.md +4 -1
- package/src/orchestrator/operation-plan.ts +286 -92
- package/src/orchestrator/operation-plan.update.test.md +286 -11
- package/src/orchestrator/operation-plan.update.test.ts +656 -5
- package/src/orchestrator/operation-workset.ts +72 -22
- package/src/orchestrator/operation.cancel.test.ts +4 -0
- package/src/orchestrator/operation.composite.test.ts +341 -0
- package/src/orchestrator/operation.destroy.test.ts +4 -0
- package/src/orchestrator/operation.output-validation.failure.test.ts +124 -0
- package/src/orchestrator/operation.preview.test.ts +4 -0
- package/src/orchestrator/operation.refresh.test.ts +4 -0
- package/src/orchestrator/operation.test-utils.ts +52 -13
- package/src/orchestrator/operation.ts +228 -68
- package/src/orchestrator/operation.update.failure.test.ts +4 -0
- package/src/orchestrator/operation.update.skip.test.ts +110 -0
- package/src/orchestrator/operation.update.test.ts +4 -0
- package/src/orchestrator/plan-test-builder.ts +1 -0
- package/src/orchestrator/unit-input-values.test.ts +450 -0
- package/src/orchestrator/unit-input-values.ts +281 -0
- package/src/pubsub/manager.ts +3 -0
- package/src/runner/abstractions.ts +23 -54
- package/src/runner/local.ts +109 -85
- package/src/services.ts +52 -1
- package/src/shared/models/prisma.ts +1 -0
- package/src/shared/models/project/entity.ts +121 -0
- package/src/shared/models/project/index.ts +1 -0
- package/src/shared/models/project/operation.ts +61 -3
- package/src/shared/models/project/state.ts +10 -0
- package/src/shared/models/project/worker.ts +7 -0
- package/src/shared/resolvers/effective-output-type.test.ts +494 -0
- package/src/shared/resolvers/effective-output-type.ts +162 -0
- package/src/shared/resolvers/index.ts +1 -0
- package/src/shared/resolvers/input.ts +61 -9
- package/src/shared/utils/index.ts +1 -0
- package/src/shared/utils/stable-json.ts +41 -0
- package/src/terminal/manager.ts +6 -0
- package/src/worker/manager.ts +97 -1
- package/dist/chunk-JT4KWE3B.js.map +0 -1
package/src/business/secret.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Logger } from "pino"
|
|
|
2
2
|
import type { DatabaseManager, ProjectTransaction } from "../database"
|
|
3
3
|
import type { LibraryBackend } from "../library"
|
|
4
4
|
import type { PubSubManager } from "../pubsub"
|
|
5
|
+
import type { ObjectRefIndexService } from "./object-ref-index"
|
|
5
6
|
import { randomBytes } from "node:crypto"
|
|
6
7
|
import { type CommonObjectMeta, isUnitModel, parseInstanceId } from "@highstate/contract"
|
|
7
8
|
import {
|
|
@@ -16,6 +17,7 @@ export class SecretService {
|
|
|
16
17
|
private readonly database: DatabaseManager,
|
|
17
18
|
private readonly pubsubManager: PubSubManager,
|
|
18
19
|
private readonly libraryBackend: LibraryBackend,
|
|
20
|
+
private readonly objectRefIndexService: ObjectRefIndexService,
|
|
19
21
|
private readonly logger: Logger,
|
|
20
22
|
) {}
|
|
21
23
|
|
|
@@ -34,7 +36,7 @@ export class SecretService {
|
|
|
34
36
|
libraryId: string,
|
|
35
37
|
stateId: string,
|
|
36
38
|
secretValues: Record<string, unknown>,
|
|
37
|
-
): Promise<string[]> {
|
|
39
|
+
): Promise<{ secretNames: string[]; secretIds: string[] }> {
|
|
38
40
|
// verify instance exists and is a unit
|
|
39
41
|
const state = await tx.instanceState.findUnique({
|
|
40
42
|
where: { id: stateId },
|
|
@@ -62,6 +64,8 @@ export class SecretService {
|
|
|
62
64
|
throw new Error(`Component type "${componentType}" is not a unit model`)
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
const secretIds: string[] = []
|
|
68
|
+
|
|
65
69
|
// upsert provided secrets
|
|
66
70
|
for (const [secretName, value] of Object.entries(secretValues)) {
|
|
67
71
|
const componentSecret = component.secrets[secretName]
|
|
@@ -77,7 +81,7 @@ export class SecretService {
|
|
|
77
81
|
iconColor: componentSecret.meta.iconColor || component.meta.iconColor,
|
|
78
82
|
}
|
|
79
83
|
|
|
80
|
-
await tx.secret.upsert({
|
|
84
|
+
const secret = await tx.secret.upsert({
|
|
81
85
|
where: {
|
|
82
86
|
stateId_name: {
|
|
83
87
|
stateId,
|
|
@@ -94,10 +98,15 @@ export class SecretService {
|
|
|
94
98
|
meta,
|
|
95
99
|
content: value,
|
|
96
100
|
},
|
|
101
|
+
select: {
|
|
102
|
+
id: true,
|
|
103
|
+
},
|
|
97
104
|
})
|
|
105
|
+
|
|
106
|
+
secretIds.push(secret.id)
|
|
98
107
|
}
|
|
99
108
|
|
|
100
|
-
return Object.keys(secretValues)
|
|
109
|
+
return { secretNames: Object.keys(secretValues), secretIds }
|
|
101
110
|
}
|
|
102
111
|
|
|
103
112
|
/**
|
|
@@ -125,7 +134,12 @@ export class SecretService {
|
|
|
125
134
|
}
|
|
126
135
|
|
|
127
136
|
const statePatch = await database.$transaction(async tx => {
|
|
128
|
-
await this.updateInstanceSecretsCore(
|
|
137
|
+
const { secretNames } = await this.updateInstanceSecretsCore(
|
|
138
|
+
tx,
|
|
139
|
+
project.libraryId,
|
|
140
|
+
stateId,
|
|
141
|
+
secretValues,
|
|
142
|
+
)
|
|
129
143
|
|
|
130
144
|
// invalidate instance state
|
|
131
145
|
const state = await tx.instanceState.update({
|
|
@@ -134,7 +148,7 @@ export class SecretService {
|
|
|
134
148
|
select: { inputHashNonce: true },
|
|
135
149
|
})
|
|
136
150
|
|
|
137
|
-
return { ...state, secretNames
|
|
151
|
+
return { ...state, secretNames }
|
|
138
152
|
})
|
|
139
153
|
|
|
140
154
|
this.pubsubManager.publish(["instance-state", projectId], {
|
|
@@ -209,7 +223,7 @@ export class SecretService {
|
|
|
209
223
|
async getPulumiPassword(projectId: string): Promise<string> {
|
|
210
224
|
const database = await this.database.forProject(projectId)
|
|
211
225
|
|
|
212
|
-
|
|
226
|
+
const result = await database.$transaction(async tx => {
|
|
213
227
|
const existingSecret = await tx.secret.findUnique({
|
|
214
228
|
where: {
|
|
215
229
|
systemName: SystemSecretNames.PulumiPassword,
|
|
@@ -217,12 +231,12 @@ export class SecretService {
|
|
|
217
231
|
})
|
|
218
232
|
|
|
219
233
|
if (existingSecret) {
|
|
220
|
-
return existingSecret.content as string
|
|
234
|
+
return { password: existingSecret.content as string, secretId: null as string | null }
|
|
221
235
|
}
|
|
222
236
|
|
|
223
237
|
const newPassword = randomBytes(32).toString("hex")
|
|
224
238
|
|
|
225
|
-
await tx.secret.create({
|
|
239
|
+
const createdSecret = await tx.secret.create({
|
|
226
240
|
data: {
|
|
227
241
|
systemName: SystemSecretNames.PulumiPassword,
|
|
228
242
|
meta: {
|
|
@@ -232,10 +246,19 @@ export class SecretService {
|
|
|
232
246
|
},
|
|
233
247
|
content: newPassword,
|
|
234
248
|
},
|
|
249
|
+
select: {
|
|
250
|
+
id: true,
|
|
251
|
+
},
|
|
235
252
|
})
|
|
236
253
|
|
|
237
254
|
this.logger.info({ projectId }, "created new Pulumi password")
|
|
238
|
-
return newPassword
|
|
255
|
+
return { password: newPassword, secretId: createdSecret.id }
|
|
239
256
|
})
|
|
257
|
+
|
|
258
|
+
if (result.secretId) {
|
|
259
|
+
await this.objectRefIndexService.track(projectId, [result.secretId])
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return result.password
|
|
240
263
|
}
|
|
241
264
|
}
|