@dsh-enhanced/plugin-control-plane 0.1.48 → 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.
Files changed (167) hide show
  1. package/README.md +183 -15
  2. package/bin/dsh-live-qualification-authority.js +15 -0
  3. package/bin/dsh-local-release-adapter.js +328 -8
  4. package/bin/dsh-systemd-host-attestor.js +359 -9
  5. package/bin/dsh-systemd-host-authority.js +12 -0
  6. package/lib/adoption-coordinator.d.ts +3 -1
  7. package/lib/adoption-coordinator.d.ts.map +1 -1
  8. package/lib/adoption-coordinator.js +24 -9
  9. package/lib/adoption-coordinator.js.map +1 -1
  10. package/lib/cli.d.ts.map +1 -1
  11. package/lib/cli.js +33 -14
  12. package/lib/cli.js.map +1 -1
  13. package/lib/creation-capability-feedback.d.ts +23 -0
  14. package/lib/creation-capability-feedback.d.ts.map +1 -0
  15. package/lib/creation-capability-feedback.js +132 -0
  16. package/lib/creation-capability-feedback.js.map +1 -0
  17. package/lib/creation-capability-journal.d.ts +66 -0
  18. package/lib/creation-capability-journal.d.ts.map +1 -0
  19. package/lib/creation-capability-journal.js +751 -0
  20. package/lib/creation-capability-journal.js.map +1 -0
  21. package/lib/creation-capability-runtime.d.ts +63 -0
  22. package/lib/creation-capability-runtime.d.ts.map +1 -0
  23. package/lib/creation-capability-runtime.js +564 -0
  24. package/lib/creation-capability-runtime.js.map +1 -0
  25. package/lib/creation-capability-source.d.ts +37 -0
  26. package/lib/creation-capability-source.d.ts.map +1 -0
  27. package/lib/creation-capability-source.js +328 -0
  28. package/lib/creation-capability-source.js.map +1 -0
  29. package/lib/creation-capability-types.d.ts +252 -0
  30. package/lib/creation-capability-types.d.ts.map +1 -0
  31. package/lib/creation-capability-types.js +2 -0
  32. package/lib/creation-capability-types.js.map +1 -0
  33. package/lib/deployment-readiness.d.ts +16 -0
  34. package/lib/deployment-readiness.d.ts.map +1 -1
  35. package/lib/deployment-readiness.js +48 -1
  36. package/lib/deployment-readiness.js.map +1 -1
  37. package/lib/effect-blocked-replay.js +2 -2
  38. package/lib/effect-blocked-replay.js.map +1 -1
  39. package/lib/foreground-deployment-runtime.d.ts +3 -0
  40. package/lib/foreground-deployment-runtime.d.ts.map +1 -1
  41. package/lib/foreground-deployment-runtime.js +55 -13
  42. package/lib/foreground-deployment-runtime.js.map +1 -1
  43. package/lib/foreground-deployment.d.ts.map +1 -1
  44. package/lib/foreground-deployment.js +5 -0
  45. package/lib/foreground-deployment.js.map +1 -1
  46. package/lib/host-attestor.d.ts +2 -0
  47. package/lib/host-attestor.d.ts.map +1 -1
  48. package/lib/host-attestor.js +8 -1
  49. package/lib/host-attestor.js.map +1 -1
  50. package/lib/host-inputs.d.ts +13 -0
  51. package/lib/host-inputs.d.ts.map +1 -0
  52. package/lib/host-inputs.js +162 -0
  53. package/lib/host-inputs.js.map +1 -0
  54. package/lib/host-maintenance.d.ts +61 -0
  55. package/lib/host-maintenance.d.ts.map +1 -0
  56. package/lib/host-maintenance.js +158 -0
  57. package/lib/host-maintenance.js.map +1 -0
  58. package/lib/host-readiness.d.ts +5 -0
  59. package/lib/host-readiness.d.ts.map +1 -0
  60. package/lib/host-readiness.js +22 -0
  61. package/lib/host-readiness.js.map +1 -0
  62. package/lib/index.d.ts +16 -0
  63. package/lib/index.d.ts.map +1 -1
  64. package/lib/index.js +7 -0
  65. package/lib/index.js.map +1 -1
  66. package/lib/live-qualification-authority.d.ts +32 -0
  67. package/lib/live-qualification-authority.d.ts.map +1 -0
  68. package/lib/live-qualification-authority.js +280 -0
  69. package/lib/live-qualification-authority.js.map +1 -0
  70. package/lib/live-qualification-client.d.ts +4 -0
  71. package/lib/live-qualification-client.d.ts.map +1 -0
  72. package/lib/live-qualification-client.js +22 -0
  73. package/lib/live-qualification-client.js.map +1 -0
  74. package/lib/live-qualification-runtime.d.ts +78 -0
  75. package/lib/live-qualification-runtime.d.ts.map +1 -0
  76. package/lib/live-qualification-runtime.js +367 -0
  77. package/lib/live-qualification-runtime.js.map +1 -0
  78. package/lib/live-qualification.d.ts +73 -0
  79. package/lib/live-qualification.d.ts.map +1 -0
  80. package/lib/live-qualification.js +164 -0
  81. package/lib/live-qualification.js.map +1 -0
  82. package/lib/owner-task-gaps.d.ts +2 -0
  83. package/lib/owner-task-gaps.d.ts.map +1 -1
  84. package/lib/owner-task-gaps.js +9 -1
  85. package/lib/owner-task-gaps.js.map +1 -1
  86. package/lib/runtime-epoch.d.ts +69 -0
  87. package/lib/runtime-epoch.d.ts.map +1 -0
  88. package/lib/runtime-epoch.js +139 -0
  89. package/lib/runtime-epoch.js.map +1 -0
  90. package/lib/runtime-observer.d.ts.map +1 -1
  91. package/lib/runtime-observer.js +42 -6
  92. package/lib/runtime-observer.js.map +1 -1
  93. package/lib/service.d.ts +247 -4
  94. package/lib/service.d.ts.map +1 -1
  95. package/lib/service.js +1332 -27
  96. package/lib/service.js.map +1 -1
  97. package/lib/source-adoption-authority.d.ts +3 -0
  98. package/lib/source-adoption-authority.d.ts.map +1 -1
  99. package/lib/source-adoption-authority.js +13 -3
  100. package/lib/source-adoption-authority.js.map +1 -1
  101. package/lib/source-adoption-runner.d.ts +3 -0
  102. package/lib/source-adoption-runner.d.ts.map +1 -1
  103. package/lib/source-adoption-runner.js +16 -4
  104. package/lib/source-adoption-runner.js.map +1 -1
  105. package/lib/source-baseline.d.ts +37 -0
  106. package/lib/source-baseline.d.ts.map +1 -0
  107. package/lib/source-baseline.js +250 -0
  108. package/lib/source-baseline.js.map +1 -0
  109. package/lib/source-build.d.ts +17 -1
  110. package/lib/source-build.d.ts.map +1 -1
  111. package/lib/source-build.js +501 -7
  112. package/lib/source-build.js.map +1 -1
  113. package/lib/source-context.d.ts +18 -0
  114. package/lib/source-context.d.ts.map +1 -1
  115. package/lib/source-context.js +85 -11
  116. package/lib/source-context.js.map +1 -1
  117. package/lib/source-creation.d.ts +106 -0
  118. package/lib/source-creation.d.ts.map +1 -0
  119. package/lib/source-creation.js +664 -0
  120. package/lib/source-creation.js.map +1 -0
  121. package/lib/source-job-types.d.ts +19 -0
  122. package/lib/source-job-types.d.ts.map +1 -1
  123. package/lib/source-jobs.d.ts +30 -3
  124. package/lib/source-jobs.d.ts.map +1 -1
  125. package/lib/source-jobs.js +382 -40
  126. package/lib/source-jobs.js.map +1 -1
  127. package/lib/source-maintenance.d.ts +66 -0
  128. package/lib/source-maintenance.d.ts.map +1 -0
  129. package/lib/source-maintenance.js +177 -0
  130. package/lib/source-maintenance.js.map +1 -0
  131. package/lib/source-revision.d.ts +57 -0
  132. package/lib/source-revision.d.ts.map +1 -0
  133. package/lib/source-revision.js +175 -0
  134. package/lib/source-revision.js.map +1 -0
  135. package/lib/source-workspace.d.ts +19 -14
  136. package/lib/source-workspace.d.ts.map +1 -1
  137. package/lib/source-workspace.js +90 -17
  138. package/lib/source-workspace.js.map +1 -1
  139. package/lib/sqlite.d.ts +13 -3
  140. package/lib/sqlite.d.ts.map +1 -1
  141. package/lib/sqlite.js +362 -1
  142. package/lib/sqlite.js.map +1 -1
  143. package/lib/store.d.ts +258 -3
  144. package/lib/store.d.ts.map +1 -1
  145. package/lib/store.js +2211 -95
  146. package/lib/store.js.map +1 -1
  147. package/lib/systemd-host-authority.d.ts +68 -0
  148. package/lib/systemd-host-authority.d.ts.map +1 -0
  149. package/lib/systemd-host-authority.js +424 -0
  150. package/lib/systemd-host-authority.js.map +1 -0
  151. package/lib/task-observation-evidence.d.ts +32 -0
  152. package/lib/task-observation-evidence.d.ts.map +1 -0
  153. package/lib/task-observation-evidence.js +62 -0
  154. package/lib/task-observation-evidence.js.map +1 -0
  155. package/lib/task-observation-runtime.d.ts +2 -3
  156. package/lib/task-observation-runtime.d.ts.map +1 -1
  157. package/lib/task-observation-runtime.js +7 -39
  158. package/lib/task-observation-runtime.js.map +1 -1
  159. package/lib/task-observation-store.js +1 -1
  160. package/lib/trust.d.ts.map +1 -1
  161. package/lib/trust.js +0 -0
  162. package/lib/trust.js.map +1 -1
  163. package/lib/types.d.ts +43 -6
  164. package/lib/types.d.ts.map +1 -1
  165. package/lib/version.d.ts +1 -1
  166. package/lib/version.js +1 -1
  167. package/package.json +21 -14
@@ -0,0 +1,280 @@
1
+ import { createHash, createPrivateKey, createPublicKey, sign, verify } from 'node:crypto';
2
+ import { resolve } from 'node:path';
3
+ import { DatabaseSync } from 'node:sqlite';
4
+ import { sourceAuthorityCanonicalSafePath, sourceAuthorityReadSafeFile } from './source-approval-authority.js';
5
+ import { controlPlaneDigest, readLiveQualificationContext } from './store.js';
6
+ import { PROTECTED_PLUGIN_DENYLIST } from './source-workspace.js';
7
+ import { assertLiveQualificationBatch, liveQualificationReceiptId, liveQualificationSigningPayload, parseLiveQualificationReceipt, validateLiveQualificationTerms } from './live-qualification.js';
8
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u;
9
+ const DIGEST = /^[a-f0-9]{64}$/u;
10
+ const PACKAGE = /^@dsh-enhanced\/[a-z][a-z0-9-]*$/u;
11
+ const MAX_CONFIG = 65_536;
12
+ const MAX_REQUEST = 8_192;
13
+ const MAX_KEY = 32_768;
14
+ export class LiveQualificationAuthorityError extends Error {
15
+ constructor() {
16
+ super('live qualification authority refused the request');
17
+ this.name = 'LiveQualificationAuthorityError';
18
+ }
19
+ }
20
+ function fail() { throw new LiveQualificationAuthorityError(); }
21
+ function object(value) {
22
+ if (!value || typeof value !== 'object' || Array.isArray(value))
23
+ fail();
24
+ return value;
25
+ }
26
+ function exact(value, fields) {
27
+ if (Object.keys(value).sort().join('\0') !== [...fields].sort().join('\0'))
28
+ fail();
29
+ }
30
+ function string(value, pattern = ID, maximum = 4096) {
31
+ if (typeof value !== 'string' || !pattern.test(value) || value.normalize('NFC').trim() !== value
32
+ || Buffer.byteLength(value) > maximum || /[\p{Cc}]/u.test(value))
33
+ fail();
34
+ return value;
35
+ }
36
+ function integer(value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
37
+ if (!Number.isSafeInteger(value) || Number(value) < minimum || Number(value) > maximum)
38
+ fail();
39
+ return Number(value);
40
+ }
41
+ function path(value) {
42
+ const result = string(value, /^[\s\S]+$/u);
43
+ if (!result.startsWith('/') || result === '/' || resolve(result) !== result)
44
+ fail();
45
+ return result;
46
+ }
47
+ function equal(left, right) { return controlPlaneDigest(left) === controlPlaneDigest(right); }
48
+ function owner(value) {
49
+ const item = object(value);
50
+ exact(item, ['authorityId', 'authorityHash', 'principalId', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset']);
51
+ return Object.freeze({ authorityId: string(item.authorityId), authorityHash: string(item.authorityHash, DIGEST, 64),
52
+ principalId: string(item.principalId, /^[\s\S]+$/u, 512),
53
+ principalRecordId: string(item.principalRecordId, /^[\s\S]+$/u, 512),
54
+ principalVersion: integer(item.principalVersion, 1), workspace: path(item.workspace), agentPreset: string(item.agentPreset) });
55
+ }
56
+ export function validateLiveQualificationAuthorityConfig(value) {
57
+ const item = object(value);
58
+ exact(item, ['schemaVersion', 'authority', 'keyId', 'keyPath', 'statePath', 'controlDatabasePath', 'grant']);
59
+ if (item.schemaVersion !== 1)
60
+ fail();
61
+ const authority = string(item.authority), keyId = string(item.keyId);
62
+ const keyPath = sourceAuthorityCanonicalSafePath(path(item.keyPath), 'file');
63
+ const statePath = path(item.statePath);
64
+ const controlPath = sourceAuthorityCanonicalSafePath(path(item.controlDatabasePath), 'file');
65
+ if (new Set([keyPath, statePath, controlPath]).size !== 3)
66
+ fail();
67
+ const grant = object(item.grant);
68
+ exact(grant, ['id', 'expiresAt', 'maxQualifications', 'owner', 'installationId', 'ledger', 'profilePath', 'packages', 'terms', 'receiptTtlMs']);
69
+ string(grant.id);
70
+ integer(grant.expiresAt, 1);
71
+ integer(grant.maxQualifications, 1, 1000);
72
+ owner(grant.owner);
73
+ string(grant.installationId);
74
+ const ledger = object(grant.ledger);
75
+ exact(ledger, ['id', 'path']);
76
+ string(ledger.id);
77
+ if (path(ledger.path) !== controlPath)
78
+ fail();
79
+ path(grant.profilePath);
80
+ validateLiveQualificationTerms(grant.terms);
81
+ if (grant.terms.authority !== authority || grant.terms.keyId !== keyId)
82
+ fail();
83
+ integer(grant.receiptTtlMs, 1_000, 300_000);
84
+ if (!Array.isArray(grant.packages) || grant.packages.length < 1 || grant.packages.length > 64)
85
+ fail();
86
+ const packages = grant.packages.map((value) => string(value, PACKAGE, 128));
87
+ if (new Set(packages).size !== packages.length)
88
+ fail();
89
+ }
90
+ function parseRequest(value) {
91
+ const item = object(value);
92
+ exact(item, ['protocol', 'batchId', 'batchDigest']);
93
+ if (item.protocol !== 'dsh-live-qualification/v1')
94
+ fail();
95
+ return Object.freeze({ protocol: 'dsh-live-qualification/v1',
96
+ batchId: string(item.batchId, /^live-qualification-[a-f0-9]{64}$/u),
97
+ batchDigest: string(item.batchDigest, DIGEST, 64) });
98
+ }
99
+ function openState(statePath) {
100
+ sourceAuthorityCanonicalSafePath(statePath, 'file', true);
101
+ const database = new DatabaseSync(statePath);
102
+ try {
103
+ database.exec(`PRAGMA busy_timeout = 5000;
104
+ PRAGMA journal_mode = WAL;
105
+ PRAGMA synchronous = FULL;
106
+ CREATE TABLE IF NOT EXISTS live_qualification_grants (
107
+ grant_id TEXT PRIMARY KEY, config_digest TEXT NOT NULL, key_fingerprint TEXT NOT NULL
108
+ ) STRICT;
109
+ CREATE TABLE IF NOT EXISTS live_qualification_receipts (
110
+ request_digest TEXT PRIMARY KEY, grant_id TEXT NOT NULL, config_digest TEXT NOT NULL,
111
+ batch_id TEXT NOT NULL UNIQUE, batch_digest TEXT NOT NULL,
112
+ receipt_json TEXT NOT NULL, receipt_digest TEXT NOT NULL
113
+ ) STRICT;`);
114
+ return database;
115
+ }
116
+ catch (error) {
117
+ database.close();
118
+ throw error;
119
+ }
120
+ }
121
+ function storedReceipt(receiptJson, digest, key) {
122
+ if (controlPlaneDigest(receiptJson) !== digest)
123
+ fail();
124
+ try {
125
+ const receipt = parseLiveQualificationReceipt(JSON.parse(receiptJson));
126
+ const { signature, ...unsigned } = receipt;
127
+ if (!verify(null, Buffer.from(liveQualificationSigningPayload(unsigned)), createPublicKey(key), Buffer.from(signature, 'base64')))
128
+ fail();
129
+ return receipt;
130
+ }
131
+ catch {
132
+ return fail();
133
+ }
134
+ }
135
+ function validateContext(config, request, now) {
136
+ const db = new DatabaseSync(sourceAuthorityCanonicalSafePath(config.controlDatabasePath, 'file'), { readOnly: true });
137
+ try {
138
+ db.exec('PRAGMA query_only = ON');
139
+ const context = readLiveQualificationContext(db, request.batchId);
140
+ const { record, plan, source, deployments } = context;
141
+ const batch = record.batch;
142
+ assertLiveQualificationBatch(batch);
143
+ if (!['pending', 'signed'].includes(record.state) || batch.id !== request.batchId || batch.digest !== request.batchDigest
144
+ || batch.expiresAt <= now || now >= batch.deadlineAt || config.grant.expiresAt <= now
145
+ || !equal(batch.terms, config.grant.terms) || !equal(batch.owner, config.grant.owner)
146
+ || batch.installationId !== config.grant.installationId || !equal(plan.ledger, config.grant.ledger)
147
+ || batch.profilePath !== config.grant.profilePath || plan.id !== batch.planId || plan.digest !== batch.planDigest
148
+ || plan.status !== 'awaiting-live-tasks' || !plan.activation || plan.activation.id !== batch.activationId
149
+ || plan.activation.fence !== batch.fence || PROTECTED_PLUGIN_DENYLIST.has(plan.candidate.id)
150
+ || !config.grant.packages.includes(plan.candidate.package)
151
+ || !equal(plan.dossier.liveQualification, batch.terms)
152
+ || source.owner.authorityId !== batch.owner.authorityId || source.owner.authorityHash !== batch.owner.authorityHash
153
+ || source.owner.principalId !== batch.owner.principalId || source.owner.principalRecordId !== batch.owner.principalRecordId
154
+ || source.owner.principalVersion !== batch.owner.principalVersion || source.owner.workspace !== batch.owner.workspace
155
+ || source.owner.agentPreset !== batch.owner.agentPreset || deployments.length !== batch.votes.length)
156
+ fail();
157
+ for (const vote of batch.votes) {
158
+ const deployment = deployments.find((item) => item.task.inboxId === vote.inboxId);
159
+ if (!deployment || controlPlaneDigest(deployment) !== vote.deploymentDigest
160
+ || deployment.readiness.planId !== plan.id || deployment.readiness.planDigest !== plan.digest
161
+ || deployment.readiness.activationId !== batch.activationId || deployment.readiness.fence !== batch.fence
162
+ || deployment.readiness.hostGeneration !== batch.hostGeneration
163
+ || deployment.task.owner.principalRecordId !== batch.owner.principalRecordId
164
+ || deployment.task.owner.principalVersion !== batch.owner.principalVersion
165
+ || deployment.task.scope.workspace !== batch.owner.workspace || deployment.task.scope.preset !== batch.owner.agentPreset
166
+ || !deployment.execution || deployment.execution.completedAt !== vote.completedAt)
167
+ fail();
168
+ }
169
+ return context;
170
+ }
171
+ finally {
172
+ db.close();
173
+ }
174
+ }
175
+ function makeReceipt(config, batch, key, now) {
176
+ const identity = {
177
+ schemaVersion: 1, kind: 'dsh-live-qualification-receipt',
178
+ authority: config.authority, keyId: config.keyId, batchId: batch.id, batchDigest: batch.digest,
179
+ planId: batch.planId, planDigest: batch.planDigest, activationId: batch.activationId, fence: batch.fence,
180
+ hostGeneration: batch.hostGeneration,
181
+ disposition: batch.votes.some(vote => vote.status === 'not-achieved') ? 'failed' : 'qualified',
182
+ observedAt: now,
183
+ expiresAt: Math.min(now + config.grant.receiptTtlMs, batch.expiresAt, config.grant.expiresAt),
184
+ };
185
+ if (identity.expiresAt <= now)
186
+ fail();
187
+ const unsigned = { ...identity, receiptId: liveQualificationReceiptId(identity) };
188
+ return parseLiveQualificationReceipt({ ...unsigned,
189
+ signature: sign(null, Buffer.from(liveQualificationSigningPayload(unsigned)), key).toString('base64') });
190
+ }
191
+ export async function authorizeLiveQualification(configInput, requestInput) {
192
+ try {
193
+ validateLiveQualificationAuthorityConfig(configInput);
194
+ const config = configInput, request = parseRequest(requestInput);
195
+ const keyBytes = sourceAuthorityReadSafeFile(config.keyPath, MAX_KEY);
196
+ const key = createPrivateKey(keyBytes);
197
+ if (key.asymmetricKeyType !== 'ed25519')
198
+ fail();
199
+ const configDigest = controlPlaneDigest(config);
200
+ const keyFingerprint = createHash('sha256').update(keyBytes).digest('hex');
201
+ const requestDigest = controlPlaneDigest(request);
202
+ const state = openState(config.statePath);
203
+ try {
204
+ state.exec('BEGIN IMMEDIATE');
205
+ const frozen = state.prepare('SELECT config_digest,key_fingerprint FROM live_qualification_grants WHERE grant_id=?')
206
+ .get(config.grant.id);
207
+ if (frozen && (frozen.config_digest !== configDigest || frozen.key_fingerprint !== keyFingerprint))
208
+ fail();
209
+ const prior = state.prepare(`SELECT receipt_json,receipt_digest,grant_id,config_digest,batch_id,batch_digest
210
+ FROM live_qualification_receipts WHERE request_digest=?`).get(requestDigest);
211
+ if (prior) {
212
+ if (prior.grant_id !== config.grant.id || prior.config_digest !== configDigest
213
+ || prior.batch_id !== request.batchId || prior.batch_digest !== request.batchDigest)
214
+ fail();
215
+ const receipt = storedReceipt(prior.receipt_json, prior.receipt_digest, key);
216
+ if (receipt.batchId !== request.batchId || receipt.batchDigest !== request.batchDigest
217
+ || receipt.authority !== config.authority || receipt.keyId !== config.keyId)
218
+ fail();
219
+ state.exec('COMMIT');
220
+ return receipt;
221
+ }
222
+ const now = Date.now();
223
+ const first = validateContext(config, request, now);
224
+ const final = validateContext(config, request, now);
225
+ if (!equal(first.record.batch, final.record.batch) || !equal(first.plan, final.plan))
226
+ fail();
227
+ const count = state.prepare('SELECT COUNT(*) AS count FROM live_qualification_receipts WHERE grant_id=?')
228
+ .get(config.grant.id);
229
+ if (count.count >= config.grant.maxQualifications)
230
+ fail();
231
+ if (!frozen)
232
+ state.prepare('INSERT INTO live_qualification_grants VALUES (?,?,?)')
233
+ .run(config.grant.id, configDigest, keyFingerprint);
234
+ const receipt = makeReceipt(config, final.record.batch, key, now);
235
+ const receiptJson = JSON.stringify(receipt);
236
+ state.prepare('INSERT INTO live_qualification_receipts VALUES (?,?,?,?,?,?,?)').run(requestDigest, config.grant.id, configDigest, request.batchId, request.batchDigest, receiptJson, controlPlaneDigest(receiptJson));
237
+ state.exec('COMMIT');
238
+ return receipt;
239
+ }
240
+ catch (error) {
241
+ try {
242
+ state.exec('ROLLBACK');
243
+ }
244
+ catch { }
245
+ ;
246
+ throw error;
247
+ }
248
+ finally {
249
+ state.close();
250
+ }
251
+ }
252
+ catch (error) {
253
+ if (error instanceof LiveQualificationAuthorityError)
254
+ throw error;
255
+ throw new LiveQualificationAuthorityError();
256
+ }
257
+ }
258
+ export async function runLiveQualificationAuthority(argv = process.argv.slice(2)) {
259
+ try {
260
+ if (argv.length !== 2 || argv[0] !== '--config')
261
+ fail();
262
+ const configBytes = sourceAuthorityReadSafeFile(path(argv[1]), MAX_CONFIG);
263
+ const config = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(configBytes));
264
+ const chunks = [];
265
+ let size = 0;
266
+ for await (const chunk of process.stdin) {
267
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
268
+ size += bytes.length;
269
+ if (size > MAX_REQUEST)
270
+ fail();
271
+ chunks.push(bytes);
272
+ }
273
+ const request = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks)));
274
+ process.stdout.write(`${JSON.stringify(await authorizeLiveQualification(config, request))}\n`);
275
+ }
276
+ catch {
277
+ throw new LiveQualificationAuthorityError();
278
+ }
279
+ }
280
+ //# sourceMappingURL=live-qualification-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-qualification-authority.js","sourceRoot":"","sources":["../src/live-qualification-authority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,gCAAgC,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AAC9G,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,+BAA+B,EAChG,6BAA6B,EAAE,8BAA8B,EAEhC,MAAM,yBAAyB,CAAA;AAG9D,MAAM,EAAE,GAAG,sCAAsC,CAAA;AACjD,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,OAAO,GAAG,mCAAmC,CAAA;AACnD,MAAM,UAAU,GAAG,MAAM,CAAA;AACzB,MAAM,WAAW,GAAG,KAAK,CAAA;AACzB,MAAM,OAAO,GAAG,MAAM,CAAA;AAuBtB,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACxD;QACE,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAA;IAC/C,CAAC;CACF;AACD,SAAS,IAAI,KAAY,MAAM,IAAI,+BAA+B,EAAE,CAAA,CAAC,CAAC;AACtE,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,CAAA;IACvE,OAAO,KAAgC,CAAA;AACzC,CAAC;AACD,SAAS,KAAK,CAAC,KAA8B,EAAE,MAAyB;IACtE,IAAI,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,IAAI,EAAE,CAAA;AACpF,CAAC;AACD,SAAS,MAAM,CAAC,KAAc,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;WAC3F,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,CAAA;IAC1E,OAAO,KAAe,CAAA;AACxB,CAAC;AACD,SAAS,OAAO,CAAC,KAAc,EAAE,OAAe,EAAE,OAAO,GAAG,MAAM,CAAC,gBAAgB;IACjF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO;QAAE,IAAI,EAAE,CAAA;IAC9F,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AACD,SAAS,IAAI,CAAC,KAAc;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC1C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM;QAAE,IAAI,EAAE,CAAA;IACnF,OAAO,MAAM,CAAA;AACf,CAAC;AACD,SAAS,KAAK,CAAC,IAAa,EAAE,KAAc,IAAa,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;AACxH,SAAS,KAAK,CAAC,KAAc;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;IACjI,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;QACjH,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC;QACxD,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,GAAG,CAAC;QACpE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AAClI,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,KAAc;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5G,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC;QAAE,IAAI,EAAE,CAAA;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,WAAW,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5F,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,CAAA;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;IAC/I,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC3B,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IACzC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,WAAW;QAAE,IAAI,EAAE,CAAA;IAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACvB,8BAA8B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK;QAAE,IAAI,EAAE,CAAA;IAC9E,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;QAAE,IAAI,EAAE,CAAA;IACrG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IACpF,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;QAAE,IAAI,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;IACnD,IAAI,IAAI,CAAC,QAAQ,KAAK,2BAA2B;QAAE,IAAI,EAAE,CAAA;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,2BAA2B;QAC1D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC;QACnE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB;IAClC,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;gBAUF,CAAC,CAAA;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,KAAK,CAAA;IAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,MAAc,EAAE,GAAwC;IAClG,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,MAAM;QAAE,IAAI,EAAE,CAAA;IACtD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QACtE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAAE,IAAI,EAAE,CAAA;QACzI,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,EAAE,CAAA;IAAC,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,MAAwC,EAAE,OAAiC,EAAE,GAAW;IAC/G,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,gCAAgC,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACrH,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACjE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAC1B,4BAA4B,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW;eACpH,KAAK,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,GAAG;eAClF,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;eAClF,KAAK,CAAC,cAAc,KAAK,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;eAChG,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU;eAC9G,IAAI,CAAC,MAAM,KAAK,qBAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,YAAY;eACtG,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;eACzF,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;eACvD,CAAC,KAAK,CAAE,IAAI,CAAC,OAA0D,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC;eACvG,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,KAAK,CAAC,aAAa;eAChH,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,KAAK,CAAC,iBAAiB;eACxH,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS;eAClH,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM;YAAE,IAAI,EAAE,CAAA;QAC9G,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAgC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7G,IAAI,CAAC,UAAU,IAAI,kBAAkB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,gBAAgB;mBACtE,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM;mBAC1F,UAAU,CAAC,SAAS,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;mBACtG,UAAU,CAAC,SAAS,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;mBAC5D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,KAAK,CAAC,iBAAiB;mBACzE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,KAAK,CAAC,gBAAgB;mBACvE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW;mBACrH,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;gBAAE,IAAI,EAAE,CAAA;QAC7F,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;YAAS,CAAC;QAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAwC,EAAE,KAA6B,EAC1F,GAAwC,EAAE,GAAW;IACrD,MAAM,QAAQ,GAAG;QACf,aAAa,EAAE,CAAU,EAAE,IAAI,EAAE,gCAAyC;QAC1E,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM;QAC9F,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QACxG,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,WAAoB;QAChH,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;KAC9F,CAAA;IACD,IAAI,QAAQ,CAAC,SAAS,IAAI,GAAG;QAAE,IAAI,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAA;IACjF,OAAO,6BAA6B,CAAC,EAAE,GAAG,QAAQ;QAChD,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAC5G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,WAA6C,EAC5F,YAAsC;IACtC,IAAI,CAAC;QACH,wCAAwC,CAAC,WAAW,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,WAAW,EAAE,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACrE,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;YAAE,IAAI,EAAE,CAAA;QAC/C,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC/C,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1E,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,sFAAsF,CAAC;iBACjH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAmE,CAAA;YACzF,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,YAAY,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC;gBAAE,IAAI,EAAE,CAAA;YAC1G,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;gEAC8B,CAAC,CAAC,GAAG,CAAC,aAAa,CAG9D,CAAA;YACf,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY;uBACzE,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,WAAW;oBAAE,IAAI,EAAE,CAAA;gBAC7F,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;gBAC5E,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;uBACjF,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;oBAAE,IAAI,EAAE,CAAA;gBACrF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpB,OAAO,OAAO,CAAA;YAChB,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;YACnD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;YACnD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBAAE,IAAI,EAAE,CAAA;YAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,4EAA4E,CAAC;iBACtG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAsB,CAAA;YAC5C,IAAI,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB;gBAAE,IAAI,EAAE,CAAA;YACzD,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,OAAO,CAAC,sDAAsD,CAAC;qBAC/E,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;YACrD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC3C,KAAK,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CACjF,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAClF,WAAW,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAA;YAC/C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAAA,CAAC;YAAC,MAAM,KAAK,CAAA;QAAC,CAAC;gBAChE,CAAC;YAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,+BAA+B;YAAE,MAAM,KAAK,CAAA;QACjE,MAAM,IAAI,+BAA+B,EAAE,CAAA;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;YAAE,IAAI,EAAE,CAAA;QACvD,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QACxF,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACjE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAA;YACpB,IAAI,IAAI,GAAG,WAAW;gBAAE,IAAI,EAAE,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAA;IAChG,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,+BAA+B,EAAE,CAAA;IAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type LiveQualificationRequest } from './live-qualification.js';
2
+ import { type SourceApprovalClientConfig } from './source-approval-client.js';
3
+ export declare function requestLiveQualification(config: SourceApprovalClientConfig, request: LiveQualificationRequest, signal?: AbortSignal): Promise<import("./live-qualification.js").LiveQualificationReceipt>;
4
+ //# sourceMappingURL=live-qualification-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-qualification-client.d.ts","sourceRoot":"","sources":["../src/live-qualification-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EACL,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAEtE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,0BAA0B,EACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,CAAC,EAAE,WAAW,uEAcxD"}
@@ -0,0 +1,22 @@
1
+ import { parseLiveQualificationReceipt } from './live-qualification.js';
2
+ import { requestPinnedAuthorityReceipt, SourceApprovalClientError } from './source-approval-client.js';
3
+ export function requestLiveQualification(config, request, signal) {
4
+ if (request.protocol !== 'dsh-live-qualification/v1'
5
+ || !/^live-qualification-[a-f0-9]{64}$/u.test(request.batchId)
6
+ || !/^[a-f0-9]{64}$/u.test(request.batchDigest)
7
+ || Object.keys(request).sort().join(',') !== 'batchDigest,batchId,protocol') {
8
+ throw new SourceApprovalClientError('FAILED', 'live qualification request is invalid');
9
+ }
10
+ return requestPinnedAuthorityReceipt(config, request, value => {
11
+ try {
12
+ const receipt = parseLiveQualificationReceipt(value);
13
+ if (receipt.batchId !== request.batchId || receipt.batchDigest !== request.batchDigest)
14
+ throw new Error('batch differs');
15
+ return receipt;
16
+ }
17
+ catch {
18
+ throw new SourceApprovalClientError('FAILED', 'live qualification authority returned an invalid receipt');
19
+ }
20
+ }, signal);
21
+ }
22
+ //# sourceMappingURL=live-qualification-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-qualification-client.js","sourceRoot":"","sources":["../src/live-qualification-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAiC,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAC9B,MAAM,6BAA6B,CAAA;AAEtE,MAAM,UAAU,wBAAwB,CAAC,MAAkC,EACzE,OAAiC,EAAE,MAAoB;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,2BAA2B;WAC/C,CAAC,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;WAC3D,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;WAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,8BAA8B,EAAE,CAAC;QAC9E,MAAM,IAAI,yBAAyB,CAAC,QAAQ,EAAE,uCAAuC,CAAC,CAAA;IACxF,CAAC;IACD,OAAO,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAA;YACpD,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YACxH,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,yBAAyB,CAAC,QAAQ,EAAE,0DAA0D,CAAC,CAAA;QAAC,CAAC;IACvH,CAAC,EAAE,MAAM,CAAC,CAAA;AACZ,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { AssistantAutomationsService } from '@dsh-enhanced/assistant-automations';
2
+ import type { AssistantDeliveryService, OwnerForegroundLearningTask } from '@dsh-enhanced/assistant-delivery';
3
+ import type { AssistantEvaluationService } from '@dsh-enhanced/assistant-evaluation';
4
+ import { type ControlPlaneStore } from './store.js';
5
+ import { type SourceApprovalClientConfig } from './source-approval-client.js';
6
+ import { type LiveQualificationBatch, type LiveQualificationReceipt } from './live-qualification.js';
7
+ import { type PluginControlTrustConfig } from './trust.js';
8
+ type Evaluation = Pick<AssistantEvaluationService, 'canonicalHostScope' | 'getTrustedForegroundLearningProjection' | 'withTrustedCanonicalTaskWriterFence' | 'onTrustedTaskChange'>;
9
+ type Delivery = Pick<AssistantDeliveryService, 'validateOwnerRoute' | 'inspectOwnerForegroundLearningTask'>;
10
+ type Automations = Pick<AssistantAutomationsService, 'registerHostExecutor' | 'reconcileSystem' | 'inspectSystemOwnedActivation'>;
11
+ export interface LiveQualificationConfig {
12
+ scope: {
13
+ ownerRouteId: string;
14
+ principalId: string;
15
+ workspace: string;
16
+ preset: string;
17
+ };
18
+ profilePath: string;
19
+ timeoutMs: number;
20
+ budgetId: string;
21
+ budgetAmount: number;
22
+ authority: SourceApprovalClientConfig;
23
+ }
24
+ export declare function validateLiveQualificationConfig(config: LiveQualificationConfig): void;
25
+ /** A finite native-automation witness for real foreground tasks, without a second Agent loop. */
26
+ export declare class LiveQualificationRuntime {
27
+ private readonly options;
28
+ private readonly lane;
29
+ private readonly configDigest;
30
+ private readonly trustDigest;
31
+ private readonly scanId;
32
+ private readonly generation;
33
+ private readonly activationNonce;
34
+ private readonly abort;
35
+ private readonly flights;
36
+ private unregister?;
37
+ private unsubscribe?;
38
+ private closing?;
39
+ private active;
40
+ private runtimeWasAvailable;
41
+ private scanning;
42
+ private lastError;
43
+ constructor(options: {
44
+ config: LiveQualificationConfig;
45
+ store: ControlPlaneStore;
46
+ trust: PluginControlTrustConfig;
47
+ evaluation: Evaluation;
48
+ delivery: Delivery;
49
+ automations: Automations;
50
+ assertCurrent(): void;
51
+ assertRuntime(planId: string): void;
52
+ runtimeAvailable(): boolean;
53
+ qualificationSource(planId: string): OwnerForegroundLearningTask;
54
+ request?: (batch: LiveQualificationBatch, signal: AbortSignal) => Promise<LiveQualificationReceipt>;
55
+ });
56
+ start(): void;
57
+ close(): Promise<void>;
58
+ health: () => {
59
+ connected: boolean;
60
+ lastError: string | null;
61
+ };
62
+ private current;
63
+ private owner;
64
+ private source;
65
+ private vote;
66
+ private sameDeployment;
67
+ private cohort;
68
+ private read;
69
+ private fence;
70
+ /** Synchronous source audit and batch creation; only native cron may request authority. */
71
+ scan: () => void;
72
+ /** Synchronous final-commit guard; the Store calls this inside its CAS. */
73
+ withQualificationFence<T>(planId: string, callback: () => T): T;
74
+ private definition;
75
+ private execute;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=live-qualification-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-qualification-runtime.d.ts","sourceRoot":"","sources":["../src/live-qualification-runtime.ts"],"names":[],"mappings":"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"}