@dsh-enhanced/plugin-control-plane 0.1.47 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +183 -15
- package/bin/dsh-live-qualification-authority.js +15 -0
- package/bin/dsh-local-release-adapter.js +328 -8
- package/bin/dsh-systemd-host-attestor.js +359 -9
- package/bin/dsh-systemd-host-authority.js +12 -0
- package/lib/adoption-coordinator.d.ts +3 -1
- package/lib/adoption-coordinator.d.ts.map +1 -1
- package/lib/adoption-coordinator.js +24 -9
- package/lib/adoption-coordinator.js.map +1 -1
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +33 -14
- package/lib/cli.js.map +1 -1
- package/lib/creation-capability-feedback.d.ts +23 -0
- package/lib/creation-capability-feedback.d.ts.map +1 -0
- package/lib/creation-capability-feedback.js +132 -0
- package/lib/creation-capability-feedback.js.map +1 -0
- package/lib/creation-capability-journal.d.ts +66 -0
- package/lib/creation-capability-journal.d.ts.map +1 -0
- package/lib/creation-capability-journal.js +751 -0
- package/lib/creation-capability-journal.js.map +1 -0
- package/lib/creation-capability-runtime.d.ts +63 -0
- package/lib/creation-capability-runtime.d.ts.map +1 -0
- package/lib/creation-capability-runtime.js +564 -0
- package/lib/creation-capability-runtime.js.map +1 -0
- package/lib/creation-capability-source.d.ts +37 -0
- package/lib/creation-capability-source.d.ts.map +1 -0
- package/lib/creation-capability-source.js +328 -0
- package/lib/creation-capability-source.js.map +1 -0
- package/lib/creation-capability-types.d.ts +252 -0
- package/lib/creation-capability-types.d.ts.map +1 -0
- package/lib/creation-capability-types.js +2 -0
- package/lib/creation-capability-types.js.map +1 -0
- package/lib/deployment-readiness.d.ts +16 -0
- package/lib/deployment-readiness.d.ts.map +1 -1
- package/lib/deployment-readiness.js +48 -1
- package/lib/deployment-readiness.js.map +1 -1
- package/lib/effect-blocked-replay.js +2 -2
- package/lib/effect-blocked-replay.js.map +1 -1
- package/lib/foreground-deployment-runtime.d.ts +3 -0
- package/lib/foreground-deployment-runtime.d.ts.map +1 -1
- package/lib/foreground-deployment-runtime.js +55 -13
- package/lib/foreground-deployment-runtime.js.map +1 -1
- package/lib/foreground-deployment.d.ts.map +1 -1
- package/lib/foreground-deployment.js +5 -0
- package/lib/foreground-deployment.js.map +1 -1
- package/lib/host-attestor.d.ts +2 -0
- package/lib/host-attestor.d.ts.map +1 -1
- package/lib/host-attestor.js +8 -1
- package/lib/host-attestor.js.map +1 -1
- package/lib/host-inputs.d.ts +13 -0
- package/lib/host-inputs.d.ts.map +1 -0
- package/lib/host-inputs.js +162 -0
- package/lib/host-inputs.js.map +1 -0
- package/lib/host-maintenance.d.ts +61 -0
- package/lib/host-maintenance.d.ts.map +1 -0
- package/lib/host-maintenance.js +158 -0
- package/lib/host-maintenance.js.map +1 -0
- package/lib/host-readiness.d.ts +5 -0
- package/lib/host-readiness.d.ts.map +1 -0
- package/lib/host-readiness.js +22 -0
- package/lib/host-readiness.js.map +1 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/live-qualification-authority.d.ts +32 -0
- package/lib/live-qualification-authority.d.ts.map +1 -0
- package/lib/live-qualification-authority.js +280 -0
- package/lib/live-qualification-authority.js.map +1 -0
- package/lib/live-qualification-client.d.ts +4 -0
- package/lib/live-qualification-client.d.ts.map +1 -0
- package/lib/live-qualification-client.js +22 -0
- package/lib/live-qualification-client.js.map +1 -0
- package/lib/live-qualification-runtime.d.ts +78 -0
- package/lib/live-qualification-runtime.d.ts.map +1 -0
- package/lib/live-qualification-runtime.js +367 -0
- package/lib/live-qualification-runtime.js.map +1 -0
- package/lib/live-qualification.d.ts +73 -0
- package/lib/live-qualification.d.ts.map +1 -0
- package/lib/live-qualification.js +164 -0
- package/lib/live-qualification.js.map +1 -0
- package/lib/owner-task-gaps.d.ts +2 -0
- package/lib/owner-task-gaps.d.ts.map +1 -1
- package/lib/owner-task-gaps.js +9 -1
- package/lib/owner-task-gaps.js.map +1 -1
- package/lib/runtime-epoch.d.ts +69 -0
- package/lib/runtime-epoch.d.ts.map +1 -0
- package/lib/runtime-epoch.js +139 -0
- package/lib/runtime-epoch.js.map +1 -0
- package/lib/runtime-observer.d.ts.map +1 -1
- package/lib/runtime-observer.js +42 -6
- package/lib/runtime-observer.js.map +1 -1
- package/lib/service.d.ts +247 -4
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +1332 -27
- package/lib/service.js.map +1 -1
- package/lib/source-adoption-authority.d.ts +3 -0
- package/lib/source-adoption-authority.d.ts.map +1 -1
- package/lib/source-adoption-authority.js +13 -3
- package/lib/source-adoption-authority.js.map +1 -1
- package/lib/source-adoption-runner.d.ts +3 -0
- package/lib/source-adoption-runner.d.ts.map +1 -1
- package/lib/source-adoption-runner.js +16 -4
- package/lib/source-adoption-runner.js.map +1 -1
- package/lib/source-baseline.d.ts +37 -0
- package/lib/source-baseline.d.ts.map +1 -0
- package/lib/source-baseline.js +250 -0
- package/lib/source-baseline.js.map +1 -0
- package/lib/source-build.d.ts +17 -1
- package/lib/source-build.d.ts.map +1 -1
- package/lib/source-build.js +501 -7
- package/lib/source-build.js.map +1 -1
- package/lib/source-context.d.ts +18 -0
- package/lib/source-context.d.ts.map +1 -1
- package/lib/source-context.js +85 -11
- package/lib/source-context.js.map +1 -1
- package/lib/source-creation.d.ts +106 -0
- package/lib/source-creation.d.ts.map +1 -0
- package/lib/source-creation.js +664 -0
- package/lib/source-creation.js.map +1 -0
- package/lib/source-job-types.d.ts +19 -0
- package/lib/source-job-types.d.ts.map +1 -1
- package/lib/source-jobs.d.ts +30 -3
- package/lib/source-jobs.d.ts.map +1 -1
- package/lib/source-jobs.js +382 -40
- package/lib/source-jobs.js.map +1 -1
- package/lib/source-maintenance.d.ts +66 -0
- package/lib/source-maintenance.d.ts.map +1 -0
- package/lib/source-maintenance.js +177 -0
- package/lib/source-maintenance.js.map +1 -0
- package/lib/source-revision.d.ts +57 -0
- package/lib/source-revision.d.ts.map +1 -0
- package/lib/source-revision.js +175 -0
- package/lib/source-revision.js.map +1 -0
- package/lib/source-workspace.d.ts +19 -14
- package/lib/source-workspace.d.ts.map +1 -1
- package/lib/source-workspace.js +90 -17
- package/lib/source-workspace.js.map +1 -1
- package/lib/sqlite.d.ts +13 -3
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +362 -1
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +258 -3
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +2211 -95
- package/lib/store.js.map +1 -1
- package/lib/systemd-host-authority.d.ts +68 -0
- package/lib/systemd-host-authority.d.ts.map +1 -0
- package/lib/systemd-host-authority.js +424 -0
- package/lib/systemd-host-authority.js.map +1 -0
- package/lib/task-observation-evidence.d.ts +32 -0
- package/lib/task-observation-evidence.d.ts.map +1 -0
- package/lib/task-observation-evidence.js +62 -0
- package/lib/task-observation-evidence.js.map +1 -0
- package/lib/task-observation-runtime.d.ts +2 -3
- package/lib/task-observation-runtime.d.ts.map +1 -1
- package/lib/task-observation-runtime.js +7 -39
- package/lib/task-observation-runtime.js.map +1 -1
- package/lib/task-observation-store.js +1 -1
- package/lib/trust.d.ts.map +1 -1
- package/lib/trust.js +0 -0
- package/lib/trust.js.map +1 -1
- package/lib/types.d.ts +43 -6
- package/lib/types.d.ts.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +21 -14
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createPublicKey, verify } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
import { controlPlaneDigest, ControlPlaneStoreError } from './store.js';
|
|
4
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u;
|
|
5
|
+
const DIGEST = /^[a-f0-9]{64}$/u;
|
|
6
|
+
const SIGNATURE = /^[A-Za-z0-9+/]+={0,2}$/u;
|
|
7
|
+
const FIELDS = ['schemaVersion', 'kind', 'id', 'digest', 'lane', 'configDigest', 'trustDigest', 'planId', 'planDigest',
|
|
8
|
+
'installationId', 'profilePath', 'owner', 'terms', 'activationId', 'fence', 'startedAt', 'deadlineAt',
|
|
9
|
+
'readinessDigest', 'hostGeneration', 'votes', 'createdAt', 'expiresAt'];
|
|
10
|
+
const RECEIPT_FIELDS = ['schemaVersion', 'kind', 'receiptId', 'authority', 'keyId', 'batchId', 'batchDigest',
|
|
11
|
+
'planId', 'planDigest', 'activationId', 'fence', 'hostGeneration', 'disposition', 'observedAt', 'expiresAt', 'signature'];
|
|
12
|
+
function fail(message) { throw new ControlPlaneStoreError('invalid-input', message); }
|
|
13
|
+
function object(value) {
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
15
|
+
fail('live qualification object is invalid');
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function exact(value, fields) {
|
|
19
|
+
if (Object.keys(value).sort().join('\0') !== [...fields].sort().join('\0'))
|
|
20
|
+
fail('live qualification fields differ');
|
|
21
|
+
}
|
|
22
|
+
function integer(value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
|
|
23
|
+
return Number.isSafeInteger(value) && Number(value) >= minimum && Number(value) <= maximum;
|
|
24
|
+
}
|
|
25
|
+
function text(value) {
|
|
26
|
+
return typeof value === 'string' && value.length > 0 && Buffer.byteLength(value) <= 4096
|
|
27
|
+
&& value.normalize('NFC').trim() === value && !/[\p{Cc}]/u.test(value);
|
|
28
|
+
}
|
|
29
|
+
function path(value) { return text(value) && isAbsolute(value) && resolve(value) === value; }
|
|
30
|
+
function owner(value) {
|
|
31
|
+
const item = object(value);
|
|
32
|
+
exact(item, ['authorityId', 'authorityHash', 'principalId', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset']);
|
|
33
|
+
return [item.authorityId, item.principalId, item.principalRecordId, item.agentPreset].every(text)
|
|
34
|
+
&& typeof item.authorityHash === 'string' && DIGEST.test(item.authorityHash)
|
|
35
|
+
&& path(item.workspace) && integer(item.principalVersion, 1);
|
|
36
|
+
}
|
|
37
|
+
export function validateLiveQualificationTerms(value) {
|
|
38
|
+
const item = object(value);
|
|
39
|
+
exact(item, ['protocol', 'maximumWindowMs', 'minimumTasks', 'authority', 'keyId']);
|
|
40
|
+
if (item.protocol !== 'dsh-bounded-live/v1' || !integer(item.maximumWindowMs, 60_000, 86_400_000)
|
|
41
|
+
|| !integer(item.minimumTasks, 1, 32) || typeof item.authority !== 'string' || !ID.test(item.authority)
|
|
42
|
+
|| typeof item.keyId !== 'string' || !ID.test(item.keyId))
|
|
43
|
+
fail('live qualification terms are invalid');
|
|
44
|
+
}
|
|
45
|
+
/** Content identity excludes the creation clock, as with task observation. */
|
|
46
|
+
export function liveQualificationId(batch) {
|
|
47
|
+
return `live-qualification-${controlPlaneDigest({ lane: batch.lane, configDigest: batch.configDigest,
|
|
48
|
+
trustDigest: batch.trustDigest, planId: batch.planId, planDigest: batch.planDigest,
|
|
49
|
+
installationId: batch.installationId, profilePath: batch.profilePath, owner: batch.owner, terms: batch.terms,
|
|
50
|
+
activationId: batch.activationId, fence: batch.fence, startedAt: batch.startedAt,
|
|
51
|
+
deadlineAt: batch.deadlineAt, readinessDigest: batch.readinessDigest,
|
|
52
|
+
hostGeneration: batch.hostGeneration, votes: batch.votes })}`;
|
|
53
|
+
}
|
|
54
|
+
export function liveQualificationDigest(batch) {
|
|
55
|
+
const { digest: _digest, ...unsigned } = batch;
|
|
56
|
+
return controlPlaneDigest(unsigned);
|
|
57
|
+
}
|
|
58
|
+
export function assertLiveQualificationBatch(value) {
|
|
59
|
+
const item = object(value);
|
|
60
|
+
exact(item, FIELDS);
|
|
61
|
+
validateLiveQualificationTerms(item.terms);
|
|
62
|
+
const batch = item;
|
|
63
|
+
if (batch.schemaVersion !== 1 || batch.kind !== 'dsh-live-qualification'
|
|
64
|
+
|| !/^live-qualification-[a-f0-9]{64}$/u.test(batch.id) || !DIGEST.test(batch.digest)
|
|
65
|
+
|| !DIGEST.test(batch.lane) || !DIGEST.test(batch.configDigest) || !DIGEST.test(batch.trustDigest)
|
|
66
|
+
|| !ID.test(batch.planId) || !DIGEST.test(batch.planDigest) || !text(batch.installationId)
|
|
67
|
+
|| !path(batch.profilePath) || !owner(batch.owner) || !ID.test(batch.activationId)
|
|
68
|
+
|| !integer(batch.fence, 1) || !integer(batch.startedAt, 1) || !integer(batch.deadlineAt, batch.startedAt + 1)
|
|
69
|
+
|| batch.deadlineAt - batch.startedAt > batch.terms.maximumWindowMs || !DIGEST.test(batch.readinessDigest)
|
|
70
|
+
|| !integer(batch.hostGeneration, 1) || !Array.isArray(batch.votes)
|
|
71
|
+
|| !integer(batch.createdAt, batch.startedAt, batch.deadlineAt - 1)
|
|
72
|
+
|| !integer(batch.expiresAt, batch.createdAt + 1)
|
|
73
|
+
|| Buffer.byteLength(JSON.stringify(batch)) > 262_144)
|
|
74
|
+
fail('live qualification batch is invalid');
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
for (const vote of batch.votes) {
|
|
77
|
+
if (!vote || !text(vote.inboxId) || !text(vote.outcomeId) || !DIGEST.test(vote.sourceDigest)
|
|
78
|
+
|| !DIGEST.test(vote.deploymentDigest) || !['achieved', 'not-achieved'].includes(vote.status)
|
|
79
|
+
|| !integer(vote.completedAt, batch.startedAt, Math.min(batch.createdAt, batch.deadlineAt - 1))
|
|
80
|
+
|| !vote.projection || vote.projection.subjectKind !== 'foreground-turn'
|
|
81
|
+
|| vote.projection.subjectRef !== vote.inboxId || vote.projection.disposition !== 'upsert'
|
|
82
|
+
|| !integer(vote.projection.version, 1) || !DIGEST.test(vote.projection.digest)
|
|
83
|
+
|| seen.has(vote.inboxId))
|
|
84
|
+
fail('live qualification vote is invalid');
|
|
85
|
+
seen.add(vote.inboxId);
|
|
86
|
+
}
|
|
87
|
+
const failed = batch.votes.some(vote => vote.status === 'not-achieved');
|
|
88
|
+
if (failed ? batch.votes.length < 1 : batch.votes.length < batch.terms.minimumTasks) {
|
|
89
|
+
fail('live qualification lacks the required task or failure evidence');
|
|
90
|
+
}
|
|
91
|
+
if (batch.id !== liveQualificationId(batch) || batch.digest !== liveQualificationDigest(batch))
|
|
92
|
+
fail('live qualification digest differs');
|
|
93
|
+
}
|
|
94
|
+
function receiptIdentity(receipt) {
|
|
95
|
+
return `live-qualification-receipt-${controlPlaneDigest(receipt)}`;
|
|
96
|
+
}
|
|
97
|
+
export function parseLiveQualificationReceipt(value) {
|
|
98
|
+
const item = object(value);
|
|
99
|
+
exact(item, RECEIPT_FIELDS);
|
|
100
|
+
const receipt = item;
|
|
101
|
+
if (receipt.schemaVersion !== 1 || receipt.kind !== 'dsh-live-qualification-receipt'
|
|
102
|
+
|| !/^live-qualification-receipt-[a-f0-9]{64}$/u.test(receipt.receiptId)
|
|
103
|
+
|| !ID.test(receipt.authority) || !ID.test(receipt.keyId)
|
|
104
|
+
|| !/^live-qualification-[a-f0-9]{64}$/u.test(receipt.batchId) || !DIGEST.test(receipt.batchDigest)
|
|
105
|
+
|| !ID.test(receipt.planId) || !DIGEST.test(receipt.planDigest) || !ID.test(receipt.activationId)
|
|
106
|
+
|| !integer(receipt.fence, 1) || !integer(receipt.hostGeneration, 1)
|
|
107
|
+
|| !['qualified', 'failed'].includes(receipt.disposition)
|
|
108
|
+
|| !integer(receipt.observedAt, 1) || !integer(receipt.expiresAt, receipt.observedAt + 1)
|
|
109
|
+
|| typeof receipt.signature !== 'string' || receipt.signature.length > 512
|
|
110
|
+
|| !SIGNATURE.test(receipt.signature)
|
|
111
|
+
|| Buffer.byteLength(JSON.stringify(receipt)) > 16_384)
|
|
112
|
+
fail('live qualification receipt is invalid');
|
|
113
|
+
const { receiptId: _receiptId, signature: _signature, ...identity } = receipt;
|
|
114
|
+
if (receipt.receiptId !== receiptIdentity(identity))
|
|
115
|
+
fail('live qualification receipt identity differs');
|
|
116
|
+
return receipt;
|
|
117
|
+
}
|
|
118
|
+
/** Domain-separated canonical signing payload; never valid as a Host phase receipt. */
|
|
119
|
+
export function liveQualificationSigningPayload(receipt) {
|
|
120
|
+
const { receiptId: _receiptId, ...identity } = receipt;
|
|
121
|
+
if (receipt.receiptId !== receiptIdentity(identity))
|
|
122
|
+
fail('live qualification receipt identity differs');
|
|
123
|
+
return `dsh-bounded-live/v1\n${controlPlaneCanonical(receipt)}`;
|
|
124
|
+
}
|
|
125
|
+
function controlPlaneCanonical(value) {
|
|
126
|
+
if (Array.isArray(value))
|
|
127
|
+
return `[${value.map(controlPlaneCanonical).join(',')}]`;
|
|
128
|
+
if (value !== null && typeof value === 'object')
|
|
129
|
+
return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b))
|
|
130
|
+
.map(([key, part]) => `${JSON.stringify(key)}:${controlPlaneCanonical(part)}`).join(',')}}`;
|
|
131
|
+
return JSON.stringify(value);
|
|
132
|
+
}
|
|
133
|
+
export function verifyLiveQualificationReceipt(receiptInput, batchInput, publicKeyPem, now = Date.now()) {
|
|
134
|
+
assertLiveQualificationBatch(batchInput);
|
|
135
|
+
const batch = batchInput;
|
|
136
|
+
const receipt = parseLiveQualificationReceipt(receiptInput);
|
|
137
|
+
const failed = batch.votes.some(vote => vote.status === 'not-achieved');
|
|
138
|
+
if (receipt.authority !== batch.terms.authority || receipt.keyId !== batch.terms.keyId
|
|
139
|
+
|| receipt.batchId !== batch.id || receipt.batchDigest !== batch.digest || receipt.planId !== batch.planId
|
|
140
|
+
|| receipt.planDigest !== batch.planDigest || receipt.activationId !== batch.activationId
|
|
141
|
+
|| receipt.fence !== batch.fence || receipt.hostGeneration !== batch.hostGeneration
|
|
142
|
+
|| receipt.disposition !== (failed ? 'failed' : 'qualified')
|
|
143
|
+
|| receipt.observedAt < batch.createdAt || receipt.observedAt >= batch.deadlineAt
|
|
144
|
+
|| receipt.observedAt > now || now >= receipt.expiresAt
|
|
145
|
+
|| receipt.expiresAt > batch.expiresAt || !integer(now, 1))
|
|
146
|
+
fail('live qualification receipt context differs');
|
|
147
|
+
const { signature, ...unsigned } = receipt;
|
|
148
|
+
let key;
|
|
149
|
+
try {
|
|
150
|
+
key = createPublicKey(publicKeyPem);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return fail('live qualification public key is invalid');
|
|
154
|
+
}
|
|
155
|
+
if (key.asymmetricKeyType !== 'ed25519' || !verify(null, Buffer.from(liveQualificationSigningPayload(unsigned)), key, Buffer.from(signature, 'base64'))) {
|
|
156
|
+
fail('live qualification signature is invalid');
|
|
157
|
+
}
|
|
158
|
+
return receipt;
|
|
159
|
+
}
|
|
160
|
+
/** Shared exact identity constructor for the independent authority. */
|
|
161
|
+
export function liveQualificationReceiptId(receipt) {
|
|
162
|
+
return receiptIdentity(receipt);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=live-qualification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-qualification.js","sourceRoot":"","sources":["../src/live-qualification.ts"],"names":[],"mappings":"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"}
|
package/lib/owner-task-gaps.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export declare class OwnerTaskFailureGaps {
|
|
|
18
18
|
record(source: OwnerForegroundLearningTask): import("./types.js").StoredCapabilityGap;
|
|
19
19
|
/** Private Host snapshot; objective and actual model never enter the public gap. */
|
|
20
20
|
snapshot(gapId: string, owner: SourceJobOwnerReceipt): OwnerForegroundLearningTask;
|
|
21
|
+
/** Read-only part of a combined Host acceptance fence; caller owns the Evaluation writer lock. */
|
|
22
|
+
inspectCurrent(gapId: string, owner: SourceJobOwnerReceipt): OwnerForegroundLearningTask;
|
|
21
23
|
withCurrent<T>(gapId: string, owner: SourceJobCaller | SourceJobOwnerReceipt | undefined, callback: () => T): T;
|
|
22
24
|
}
|
|
23
25
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-task-gaps.d.ts","sourceRoot":"","sources":["../src/owner-task-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC7G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"owner-task-gaps.d.ts","sourceRoot":"","sources":["../src/owner-task-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC7G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAEpF,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,IAAI,CAAC,wBAAwB,EAAE,oCAAoC,CAAC,CAAA;IAC9E,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,oBAAoB,GAAG,qCAAqC,CAAC,CAAA;CAC3G,CAAA;AAED,6EAA6E;AAC7E,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAqB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAhD,KAAK,EAAE,iBAAiB,EAAmB,KAAK,EAAE,MAAM,KAAK;IAE1F,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,KAAK;IAeb,MAAM,CAAC,MAAM,EAAE,2BAA2B;IAK1C,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,2BAA2B;IAMlF,kGAAkG;IAClG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,2BAA2B;IAMxF,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;CAahH"}
|
package/lib/owner-task-gaps.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSourceOwnerContinuation } from '@dsh-enhanced/assistant-growth-contract';
|
|
1
2
|
import { controlPlaneDigest } from './store.js';
|
|
2
3
|
/** Host-only bridge. A caller's source is an expectation, never evidence. */
|
|
3
4
|
export class OwnerTaskFailureGaps {
|
|
@@ -56,13 +57,20 @@ export class OwnerTaskFailureGaps {
|
|
|
56
57
|
throw new Error('task repair source unavailable');
|
|
57
58
|
return this.withCurrent(gapId, owner, () => structuredClone(this.read(reference, this.ports())));
|
|
58
59
|
}
|
|
60
|
+
/** Read-only part of a combined Host acceptance fence; caller owns the Evaluation writer lock. */
|
|
61
|
+
inspectCurrent(gapId, owner) {
|
|
62
|
+
const reference = this.store.getOwnerTaskFailureReference(gapId);
|
|
63
|
+
if (!reference || controlPlaneDigest(reference.owner) !== controlPlaneDigest(owner))
|
|
64
|
+
throw new Error('task repair source owner changed');
|
|
65
|
+
return this.read(reference, this.ports());
|
|
66
|
+
}
|
|
59
67
|
withCurrent(gapId, owner, callback) {
|
|
60
68
|
const reference = this.store.getOwnerTaskFailureReference(gapId);
|
|
61
69
|
if (!reference)
|
|
62
70
|
return callback();
|
|
63
71
|
const expected = reference.owner;
|
|
64
72
|
if (!owner || ('receiptVersion' in owner
|
|
65
|
-
?
|
|
73
|
+
? !isSourceOwnerContinuation(owner, expected)
|
|
66
74
|
: owner.ownerRouteId !== expected.authorityId || owner.principalId !== expected.principalId
|
|
67
75
|
|| owner.principalRecordId !== expected.principalRecordId || owner.principalVersion !== expected.principalVersion
|
|
68
76
|
|| owner.workspace !== expected.workspace || owner.preset !== expected.agentPreset)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-task-gaps.js","sourceRoot":"","sources":["../src/owner-task-gaps.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"owner-task-gaps.js","sourceRoot":"","sources":["../src/owner-task-gaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { PluginControlTrustConfig } from './trust.js';
|
|
2
|
+
import type { HostAttestationRequest } from './types.js';
|
|
3
|
+
export interface RuntimeEpochRequest {
|
|
4
|
+
schemaVersion: 1;
|
|
5
|
+
kind: 'dsh-runtime-epoch-request';
|
|
6
|
+
operationId: string;
|
|
7
|
+
requestedAt: number;
|
|
8
|
+
receiptTtlMs: number;
|
|
9
|
+
installationId: string;
|
|
10
|
+
ledger: {
|
|
11
|
+
id: string;
|
|
12
|
+
path: string;
|
|
13
|
+
};
|
|
14
|
+
plan: {
|
|
15
|
+
id: string;
|
|
16
|
+
digest: string;
|
|
17
|
+
};
|
|
18
|
+
activation: {
|
|
19
|
+
id: string;
|
|
20
|
+
fence: number;
|
|
21
|
+
};
|
|
22
|
+
profile: {
|
|
23
|
+
name: string;
|
|
24
|
+
path: string;
|
|
25
|
+
};
|
|
26
|
+
issuer: Extract<HostAttestationRequest['issuer'], {
|
|
27
|
+
mode: 'configured-executable';
|
|
28
|
+
}>;
|
|
29
|
+
predecessor: {
|
|
30
|
+
operationId: string;
|
|
31
|
+
receiptDigest: string;
|
|
32
|
+
hostGeneration: number;
|
|
33
|
+
};
|
|
34
|
+
sequence: number;
|
|
35
|
+
runtimeIdentityDigest: string;
|
|
36
|
+
}
|
|
37
|
+
export interface RuntimeEpochReceipt {
|
|
38
|
+
schemaVersion: 1;
|
|
39
|
+
kind: 'dsh-runtime-epoch-receipt';
|
|
40
|
+
receiptId: string;
|
|
41
|
+
operationId: string;
|
|
42
|
+
requestDigest: string;
|
|
43
|
+
installationId: string;
|
|
44
|
+
planId: string;
|
|
45
|
+
planDigest: string;
|
|
46
|
+
activationId: string;
|
|
47
|
+
fence: number;
|
|
48
|
+
hostGeneration: number;
|
|
49
|
+
sequence: number;
|
|
50
|
+
runtimeIdentityDigest: string;
|
|
51
|
+
authority: string;
|
|
52
|
+
keyId: string;
|
|
53
|
+
outcome: 'passed' | 'failed';
|
|
54
|
+
observedAt: number;
|
|
55
|
+
expiresAt: number;
|
|
56
|
+
evidence: {
|
|
57
|
+
checks: number;
|
|
58
|
+
failures: number;
|
|
59
|
+
probeDigest: string;
|
|
60
|
+
};
|
|
61
|
+
signature: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function parseRuntimeEpochRequest(value: unknown): RuntimeEpochRequest;
|
|
64
|
+
export declare function parseRuntimeEpochReceipt(value: unknown): RuntimeEpochReceipt;
|
|
65
|
+
export declare function runtimeEpochRequestDigest(request: RuntimeEpochRequest): string;
|
|
66
|
+
export declare function runtimeEpochIdentityDigest(observation: Record<string, unknown>): string;
|
|
67
|
+
export declare function runtimeEpochSigningPayload(receipt: Omit<RuntimeEpochReceipt, 'signature'>): string;
|
|
68
|
+
export declare function verifyRuntimeEpochReceipt(receiptInput: unknown, requestInput: unknown, trust: Pick<PluginControlTrustConfig, 'installationId' | 'hostAttestationKeys'>, now?: number): RuntimeEpochReceipt;
|
|
69
|
+
//# sourceMappingURL=runtime-epoch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-epoch.d.ts","sourceRoot":"","sources":["../src/runtime-epoch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAMxD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,2BAA2B,CAAA;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,uBAAuB,CAAA;KAAE,CAAC,CAAA;IACpF,WAAW,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;IACnF,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,2BAA2B,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE,SAAS,EAAE,MAAM,CAAA;CAClB;AAkCD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAkC5E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAyB5E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAqD;AACpI,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGvF;AACD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAAG,MAAM,CAA8B;AAEjI,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EACpF,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,EAAE,GAAG,SAAa,GAAG,mBAAmB,CAmBxH"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createHash, createPublicKey, verify } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
import { ControlPlaneStoreError } from './store.js';
|
|
4
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u;
|
|
5
|
+
const DIGEST = /^[a-f0-9]{64}$/u;
|
|
6
|
+
const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/u;
|
|
7
|
+
function invalid(message) { throw new ControlPlaneStoreError('invalid-input', `runtime epoch: ${message}`); }
|
|
8
|
+
function conflict(message) { throw new ControlPlaneStoreError('conflict', `runtime epoch: ${message}`); }
|
|
9
|
+
function canonical(value) {
|
|
10
|
+
if (Array.isArray(value))
|
|
11
|
+
return `[${value.map(canonical).join(',')}]`;
|
|
12
|
+
if (value !== null && typeof value === 'object')
|
|
13
|
+
return `{${Object.entries(value)
|
|
14
|
+
.filter(([, item]) => item !== undefined).sort(([a], [b]) => a.localeCompare(b))
|
|
15
|
+
.map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`).join(',')}}`;
|
|
16
|
+
return JSON.stringify(value);
|
|
17
|
+
}
|
|
18
|
+
function digest(value) { return createHash('sha256').update(canonical(value)).digest('hex'); }
|
|
19
|
+
function record(value, fields, label) {
|
|
20
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)
|
|
21
|
+
|| Object.keys(value).sort().join('\0') !== [...fields].sort().join('\0'))
|
|
22
|
+
invalid(`${label} fields are invalid`);
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function text(value, label, pattern = ID) {
|
|
26
|
+
if (typeof value !== 'string' || !pattern.test(value))
|
|
27
|
+
invalid(`${label} is invalid`);
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function integer(value, label, min = 0, max = Number.MAX_SAFE_INTEGER) {
|
|
31
|
+
if (!Number.isSafeInteger(value) || Number(value) < min || Number(value) > max)
|
|
32
|
+
invalid(`${label} is invalid`);
|
|
33
|
+
return Number(value);
|
|
34
|
+
}
|
|
35
|
+
function path(value, label) {
|
|
36
|
+
if (typeof value !== 'string' || !isAbsolute(value) || resolve(value) !== value || value === '/')
|
|
37
|
+
invalid(`${label} is invalid`);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function pin(value, label) {
|
|
41
|
+
const item = record(value, ['path', 'sha256'], label);
|
|
42
|
+
return { path: path(item.path, `${label} path`), sha256: text(item.sha256, `${label} digest`, DIGEST) };
|
|
43
|
+
}
|
|
44
|
+
export function parseRuntimeEpochRequest(value) {
|
|
45
|
+
const item = record(value, ['schemaVersion', 'kind', 'operationId', 'requestedAt', 'receiptTtlMs', 'installationId',
|
|
46
|
+
'ledger', 'plan', 'activation', 'profile', 'issuer', 'predecessor', 'sequence', 'runtimeIdentityDigest'], 'request');
|
|
47
|
+
if (item.schemaVersion !== 1 || item.kind !== 'dsh-runtime-epoch-request')
|
|
48
|
+
invalid('request version or kind is invalid');
|
|
49
|
+
const ledger = record(item.ledger, ['id', 'path'], 'ledger');
|
|
50
|
+
const plan = record(item.plan, ['id', 'digest'], 'plan');
|
|
51
|
+
const activation = record(item.activation, ['id', 'fence'], 'activation');
|
|
52
|
+
const profile = record(item.profile, ['name', 'path'], 'profile');
|
|
53
|
+
const issuer = record(item.issuer, ['mode', 'id', 'version', 'path', 'sha256', 'interpreter', 'authority', 'keyId'], 'issuer');
|
|
54
|
+
if (issuer.mode !== 'configured-executable')
|
|
55
|
+
invalid('configured issuer is required');
|
|
56
|
+
const predecessor = record(item.predecessor, ['operationId', 'receiptDigest', 'hostGeneration'], 'predecessor');
|
|
57
|
+
const operationId = text(item.operationId, 'operationId');
|
|
58
|
+
if (operationId.length > 152 || predecessor.operationId === operationId)
|
|
59
|
+
invalid('operation lineage is invalid');
|
|
60
|
+
const profileName = text(profile.name, 'profile name', /^[a-z0-9][a-z0-9-]{0,63}$/u);
|
|
61
|
+
const profilePath = path(profile.path, 'profile path');
|
|
62
|
+
if (profilePath.split('/').at(-1) !== profileName || profilePath.split('/').at(-2) !== 'profiles')
|
|
63
|
+
invalid('profile path differs from name');
|
|
64
|
+
return {
|
|
65
|
+
schemaVersion: 1, kind: 'dsh-runtime-epoch-request', operationId,
|
|
66
|
+
requestedAt: integer(item.requestedAt, 'requestedAt'), receiptTtlMs: integer(item.receiptTtlMs, 'receiptTtlMs', 1, 3_600_000),
|
|
67
|
+
installationId: text(item.installationId, 'installationId', UUID),
|
|
68
|
+
ledger: { id: text(ledger.id, 'ledger id'), path: path(ledger.path, 'ledger path') },
|
|
69
|
+
plan: { id: text(plan.id, 'plan id'), digest: text(plan.digest, 'plan digest', DIGEST) },
|
|
70
|
+
activation: { id: text(activation.id, 'activation id'), fence: integer(activation.fence, 'activation fence', 1) },
|
|
71
|
+
profile: { name: profileName, path: profilePath },
|
|
72
|
+
issuer: { mode: 'configured-executable', id: text(issuer.id, 'issuer id'), version: text(issuer.version, 'issuer version', /^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$/u),
|
|
73
|
+
...pin({ path: issuer.path, sha256: issuer.sha256 }, 'issuer'),
|
|
74
|
+
interpreter: issuer.interpreter === null ? null : pin(issuer.interpreter, 'issuer interpreter'),
|
|
75
|
+
authority: text(issuer.authority, 'issuer authority'), keyId: text(issuer.keyId, 'issuer keyId') },
|
|
76
|
+
predecessor: { operationId: text(predecessor.operationId, 'predecessor operation'),
|
|
77
|
+
receiptDigest: text(predecessor.receiptDigest, 'predecessor digest', DIGEST),
|
|
78
|
+
hostGeneration: integer(predecessor.hostGeneration, 'predecessor generation', 1) },
|
|
79
|
+
sequence: integer(item.sequence, 'sequence', 1),
|
|
80
|
+
runtimeIdentityDigest: text(item.runtimeIdentityDigest, 'runtime identity digest', DIGEST),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export function parseRuntimeEpochReceipt(value) {
|
|
84
|
+
const item = record(value, ['schemaVersion', 'kind', 'receiptId', 'operationId', 'requestDigest', 'installationId',
|
|
85
|
+
'planId', 'planDigest', 'activationId', 'fence', 'hostGeneration', 'sequence', 'runtimeIdentityDigest',
|
|
86
|
+
'authority', 'keyId', 'outcome', 'observedAt', 'expiresAt', 'evidence', 'signature'], 'receipt');
|
|
87
|
+
if (item.schemaVersion !== 1 || item.kind !== 'dsh-runtime-epoch-receipt'
|
|
88
|
+
|| (item.outcome !== 'passed' && item.outcome !== 'failed'))
|
|
89
|
+
invalid('receipt version, kind or outcome is invalid');
|
|
90
|
+
const evidence = record(item.evidence, ['checks', 'failures', 'probeDigest'], 'evidence');
|
|
91
|
+
const checks = integer(evidence.checks, 'checks', 2, 256);
|
|
92
|
+
const failures = integer(evidence.failures, 'failures', 0, checks);
|
|
93
|
+
const signature = text(item.signature, 'signature', /^[A-Za-z0-9+/]+={0,2}$/u);
|
|
94
|
+
if (Buffer.from(signature, 'base64').length !== 64 || Buffer.from(signature, 'base64').toString('base64') !== signature)
|
|
95
|
+
invalid('signature encoding is invalid');
|
|
96
|
+
const receipt = {
|
|
97
|
+
schemaVersion: 1, kind: 'dsh-runtime-epoch-receipt', receiptId: text(item.receiptId, 'receiptId'),
|
|
98
|
+
operationId: text(item.operationId, 'operationId'), requestDigest: text(item.requestDigest, 'requestDigest', DIGEST),
|
|
99
|
+
installationId: text(item.installationId, 'installationId', UUID), planId: text(item.planId, 'planId'),
|
|
100
|
+
planDigest: text(item.planDigest, 'planDigest', DIGEST), activationId: text(item.activationId, 'activationId'),
|
|
101
|
+
fence: integer(item.fence, 'fence', 1), hostGeneration: integer(item.hostGeneration, 'hostGeneration', 1),
|
|
102
|
+
sequence: integer(item.sequence, 'sequence', 1), runtimeIdentityDigest: text(item.runtimeIdentityDigest, 'runtime identity digest', DIGEST),
|
|
103
|
+
authority: text(item.authority, 'authority'), keyId: text(item.keyId, 'keyId'), outcome: item.outcome,
|
|
104
|
+
observedAt: integer(item.observedAt, 'observedAt'), expiresAt: integer(item.expiresAt, 'expiresAt'),
|
|
105
|
+
evidence: { checks, failures, probeDigest: text(evidence.probeDigest, 'probe digest', DIGEST) }, signature,
|
|
106
|
+
};
|
|
107
|
+
if (receipt.expiresAt <= receipt.observedAt || (receipt.outcome === 'passed' && failures !== 0)
|
|
108
|
+
|| (receipt.outcome === 'failed' && failures === 0))
|
|
109
|
+
invalid('receipt interval or evidence is invalid');
|
|
110
|
+
return receipt;
|
|
111
|
+
}
|
|
112
|
+
export function runtimeEpochRequestDigest(request) { return digest(parseRuntimeEpochRequest(request)); }
|
|
113
|
+
export function runtimeEpochIdentityDigest(observation) {
|
|
114
|
+
const { challenge: _challenge, observedAt: _observedAt, ...identity } = observation;
|
|
115
|
+
return digest(identity);
|
|
116
|
+
}
|
|
117
|
+
export function runtimeEpochSigningPayload(receipt) { return canonical(receipt); }
|
|
118
|
+
export function verifyRuntimeEpochReceipt(receiptInput, requestInput, trust, now = Date.now()) {
|
|
119
|
+
const request = parseRuntimeEpochRequest(requestInput);
|
|
120
|
+
const receipt = parseRuntimeEpochReceipt(receiptInput);
|
|
121
|
+
if (receipt.receiptId !== `receipt:${request.operationId}` || receipt.operationId !== request.operationId
|
|
122
|
+
|| receipt.requestDigest !== runtimeEpochRequestDigest(request) || receipt.installationId !== request.installationId
|
|
123
|
+
|| receipt.installationId !== trust.installationId || receipt.planId !== request.plan.id || receipt.planDigest !== request.plan.digest
|
|
124
|
+
|| receipt.activationId !== request.activation.id || receipt.fence !== request.activation.fence
|
|
125
|
+
|| receipt.hostGeneration !== request.predecessor.hostGeneration || receipt.sequence !== request.sequence
|
|
126
|
+
|| receipt.runtimeIdentityDigest !== request.runtimeIdentityDigest
|
|
127
|
+
|| receipt.authority !== request.issuer.authority || receipt.keyId !== request.issuer.keyId)
|
|
128
|
+
conflict('receipt differs from the exact request');
|
|
129
|
+
if (receipt.observedAt < request.requestedAt || receipt.observedAt > now || now > receipt.expiresAt
|
|
130
|
+
|| receipt.expiresAt - receipt.observedAt > request.receiptTtlMs) {
|
|
131
|
+
throw new ControlPlaneStoreError('expired', 'runtime epoch receipt is outside its validity interval');
|
|
132
|
+
}
|
|
133
|
+
const key = trust.hostAttestationKeys.find(candidate => candidate.authority === receipt.authority && candidate.keyId === receipt.keyId);
|
|
134
|
+
const { signature: _signature, ...unsigned } = receipt;
|
|
135
|
+
if (!key || !verify(null, Buffer.from(runtimeEpochSigningPayload(unsigned)), createPublicKey(key.publicKeyPem), Buffer.from(receipt.signature, 'base64')))
|
|
136
|
+
invalid('receipt signature or authority is invalid');
|
|
137
|
+
return Object.freeze(receipt);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=runtime-epoch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-epoch.js","sourceRoot":"","sources":["../src/runtime-epoch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAInD,MAAM,EAAE,GAAG,sCAAsC,CAAA;AACjD,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,IAAI,GAAG,4EAA4E,CAAA;AA0CzF,SAAS,OAAO,CAAC,OAAe,IAAW,MAAM,IAAI,sBAAsB,CAAC,eAAe,EAAE,kBAAkB,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;AAC3H,SAAS,QAAQ,CAAC,OAAe,IAAW,MAAM,IAAI,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;AACvH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aACzG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACjF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AACD,SAAS,MAAM,CAAC,KAAc,IAAY,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;AAC9G,SAAS,MAAM,CAAC,KAAc,EAAE,MAAyB,EAAE,KAAa;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAA;IACnH,OAAO,KAAgC,CAAA;AACzC,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa,EAAE,OAAO,GAAG,EAAE;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,aAAa,CAAC,CAAA;IACrF,OAAO,KAAK,CAAA;AACd,CAAC;AACD,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,gBAAgB;IACpF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;QAAE,OAAO,CAAC,GAAG,KAAK,aAAa,CAAC,CAAA;IAC9G,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,CAAC,GAAG,KAAK,aAAa,CAAC,CAAA;IAChI,OAAO,KAAK,CAAA;AACd,CAAC;AACD,SAAS,GAAG,CAAC,KAAc,EAAE,KAAa;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;IACrD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,MAAM,CAAC,EAAE,CAAA;AACzG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB;QACjH,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,uBAAuB,CAAC,EAAE,SAAS,CAAC,CAAA;IACtH,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,2BAA2B;QAAE,OAAO,CAAC,oCAAoC,CAAC,CAAA;IACxH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC9H,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB;QAAE,OAAO,CAAC,+BAA+B,CAAC,CAAA;IACrF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,aAAa,CAAC,CAAA;IAC/G,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IACzD,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO,CAAC,8BAA8B,CAAC,CAAA;IAChH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,4BAA4B,CAAC,CAAA;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACtD,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU;QAAE,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAC5I,OAAO;QACL,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW;QAChE,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,CAAC;QAC7H,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,IAAI,CAAC;QACjE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;QACpF,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;QACxF,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE;QACjH,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;QACjD,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,qCAAqC,CAAC;YAC/J,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC;YAC9D,WAAW,EAAE,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;YAC/F,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;QACpG,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,uBAAuB,CAAC;YAChF,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,oBAAoB,EAAE,MAAM,CAAC;YAC5E,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,wBAAwB,EAAE,CAAC,CAAC,EAAE;QACpF,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/C,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC3F,CAAA;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB;QAChH,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,uBAAuB;QACtG,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;IAClG,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,2BAA2B;WACpE,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC;QAAE,OAAO,CAAC,6CAA6C,CAAC,CAAA;IACrH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAA;IACzF,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,yBAAyB,CAAC,CAAA;IAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,+BAA+B,CAAC,CAAA;IACjK,MAAM,OAAO,GAAwB;QACnC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACjG,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC;QACpH,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QACtG,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;QAC9G,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzG,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,CAAC;QAC3I,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;QACrG,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACnG,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS;KAC3G,CAAA;IACD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC;WAC1F,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,yCAAyC,CAAC,CAAA;IACzG,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA4B,IAAY,OAAO,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAA,CAAC,CAAC;AACpI,MAAM,UAAU,0BAA0B,CAAC,WAAoC;IAC7E,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAA;IACnF,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,OAA+C,IAAY,OAAO,SAAS,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;AAEjI,MAAM,UAAU,yBAAyB,CAAC,YAAqB,EAAE,YAAqB,EACpF,KAA+E,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAA;IACtD,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,OAAO,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;WACpG,OAAO,CAAC,aAAa,KAAK,yBAAyB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc;WACjH,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM;WACnI,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK;WAC5F,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,WAAW,CAAC,cAAc,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;WACtG,OAAO,CAAC,qBAAqB,KAAK,OAAO,CAAC,qBAAqB;WAC/D,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,QAAQ,CAAC,wCAAwC,CAAC,CAAA;IACjJ,IAAI,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS;WAC9F,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACnE,MAAM,IAAI,sBAAsB,CAAC,SAAS,EAAE,wDAAwD,CAAC,CAAA;IACvG,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IACvI,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACtD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,EACzE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,CAAC,2CAA2C,CAAC,CAAA;IACpI,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-observer.d.ts","sourceRoot":"","sources":["../src/runtime-observer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-observer.d.ts","sourceRoot":"","sources":["../src/runtime-observer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAc,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAaL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE3B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EACnB,6BAA6B,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,gCAAgC,CAAA;AAKvC,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,kBAAkB,CA2E3H;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAC/E,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,kBAAkB,KAAK,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CA6ElH"}
|
package/lib/runtime-observer.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { chmod, lstat, unlink } from 'node:fs/promises';
|
|
3
3
|
import { createServer } from 'node:net';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
4
6
|
import { Context } from '@deepseek-ai/cordis';
|
|
5
7
|
import { RUNTIME_OBSERVER_MAX_BYTES, RUNTIME_OBSERVER_TIMEOUT, assertRuntimeObservation, assertRuntimeObserverPlatform, assertRuntimeObserverExact, assertRuntimeObserverText, equalRuntimeObserverMac, readPrivateRuntimeObserverKey, runtimeConfigDigest, runtimeObserverFail, runtimeObserverMac, validateRuntimeObserverConfig, } from './runtime-observer-protocol.js';
|
|
6
8
|
export { assertRuntimeObserverPlatform, queryRuntimeObserver, runtimeConfigDigest, validateRuntimeObserverConfig, } from './runtime-observer-protocol.js';
|
|
@@ -32,6 +34,43 @@ export function createRuntimeSampler(ctx, config) {
|
|
|
32
34
|
}
|
|
33
35
|
return false;
|
|
34
36
|
};
|
|
37
|
+
const resolveTarget = (loader, entryId) => {
|
|
38
|
+
let root;
|
|
39
|
+
try {
|
|
40
|
+
root = loader.resolve('include');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
root = undefined;
|
|
44
|
+
}
|
|
45
|
+
if (root || loader.builtins.include !== undefined) {
|
|
46
|
+
const rootOptions = root && Object.getOwnPropertyDescriptors(root.options);
|
|
47
|
+
const includeConfig = rootOptions?.config && 'value' in rootOptions.config ? rootOptions.config.value : undefined;
|
|
48
|
+
const path = includeConfig && typeof includeConfig === 'object' && !Array.isArray(includeConfig)
|
|
49
|
+
? Object.getOwnPropertyDescriptors(includeConfig).path : undefined;
|
|
50
|
+
const localId = entryId.startsWith('include:') ? entryId.slice('include:'.length) : entryId;
|
|
51
|
+
if (!root || !rootOptions?.id || !('value' in rootOptions.id) || rootOptions.id.value !== 'include'
|
|
52
|
+
|| root.parent !== loader.root || rootOptions.name?.value !== 'cordis:include'
|
|
53
|
+
|| !path || !('value' in path) || path.value !== pathToFileURL(join(config.profilePath, 'cordis.yml')).href
|
|
54
|
+
|| !root.subtree || root.subtree.ctx.fiber.entry !== root || !instance(root.fiber)
|
|
55
|
+
|| !localId || localId.includes(':'))
|
|
56
|
+
return undefined;
|
|
57
|
+
try {
|
|
58
|
+
const entry = loader.resolve(`include:${localId}`);
|
|
59
|
+
const childId = Object.getOwnPropertyDescriptor(entry.options, 'id');
|
|
60
|
+
return childId && 'value' in childId && childId.value === localId
|
|
61
|
+
&& entry.parent === root.subtree.root ? entry : undefined;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
return loader.resolve(entryId);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
35
74
|
return challenge => {
|
|
36
75
|
assertRuntimeObserverText(challenge, /^[a-f0-9]{64}$/u);
|
|
37
76
|
if (ctx.fiber.uid === null || ctx.fiber.state !== ACTIVE)
|
|
@@ -39,11 +78,8 @@ export function createRuntimeSampler(ctx, config) {
|
|
|
39
78
|
// Resolve the current injected provider on every sample, never cache a proxy.
|
|
40
79
|
const loader = ctx.loader;
|
|
41
80
|
const entries = config.targets.map(target => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
entry = loader.resolve(target.entryId);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
81
|
+
const entry = resolveTarget(loader, target.entryId);
|
|
82
|
+
if (!entry) {
|
|
47
83
|
return { entryId: target.entryId, module: null, configDigest: null, active: false, instance: null, dependencies: [], services: [] };
|
|
48
84
|
}
|
|
49
85
|
const fiber = entry.fiber;
|
|
@@ -60,7 +96,7 @@ export function createRuntimeSampler(ctx, config) {
|
|
|
60
96
|
const impl = realm ? fiber?.ctx.reflect.store[realm] : undefined;
|
|
61
97
|
return { name, instance: impl && fiber && ownedBy(impl.fiber, fiber) && fiber.ctx.get(name) !== undefined ? instance(impl.fiber) : null };
|
|
62
98
|
});
|
|
63
|
-
return { entryId:
|
|
99
|
+
return { entryId: target.entryId, module, configDigest,
|
|
64
100
|
active: !entry.disabled && module === target.module && configDigest === target.configDigest
|
|
65
101
|
&& current !== null && current.uid > 0 && dependencies.every(item => item.instance !== null) && services.every(item => item.instance !== null),
|
|
66
102
|
instance: current, dependencies, services };
|