@dharma-ai-labs/agent-fabric 0.2.118 → 0.2.120

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 (74) hide show
  1. package/AGENT_FABRIC_ONBOARDING.md +5 -0
  2. package/README.md +23 -0
  3. package/dist/demoEnrollment.d.ts.map +1 -1
  4. package/dist/demoEnrollment.js +81 -9
  5. package/dist/demoEnrollment.js.map +1 -1
  6. package/dist/demoEnrollment.test.js +185 -0
  7. package/dist/demoEnrollment.test.js.map +1 -1
  8. package/dist/demoPackage.d.ts +1 -1
  9. package/dist/demoTransportFetch.d.ts.map +1 -1
  10. package/dist/demoTransportFetch.js +3 -1
  11. package/dist/demoTransportFetch.js.map +1 -1
  12. package/dist/demoTransportFetch.test.js +62 -0
  13. package/dist/demoTransportFetch.test.js.map +1 -1
  14. package/dist/evidencePreviewDisclosureCaller.test.d.ts +2 -0
  15. package/dist/evidencePreviewDisclosureCaller.test.d.ts.map +1 -0
  16. package/dist/evidencePreviewDisclosureCaller.test.js +56 -0
  17. package/dist/evidencePreviewDisclosureCaller.test.js.map +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +683 -377
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.test.js +2 -2
  22. package/dist/index.test.js.map +1 -1
  23. package/dist/legacyInstallerRecovery.d.ts +30 -0
  24. package/dist/legacyInstallerRecovery.d.ts.map +1 -0
  25. package/dist/legacyInstallerRecovery.js +107 -0
  26. package/dist/legacyInstallerRecovery.js.map +1 -0
  27. package/dist/legacyInstallerRecovery.test.d.ts +2 -0
  28. package/dist/legacyInstallerRecovery.test.d.ts.map +1 -0
  29. package/dist/legacyInstallerRecovery.test.js +126 -0
  30. package/dist/legacyInstallerRecovery.test.js.map +1 -0
  31. package/dist/relayAutostart.d.ts +9 -1
  32. package/dist/relayAutostart.d.ts.map +1 -1
  33. package/dist/relayAutostart.js +39 -3
  34. package/dist/relayAutostart.js.map +1 -1
  35. package/dist/relayAutostart.test.js +37 -0
  36. package/dist/relayAutostart.test.js.map +1 -1
  37. package/dist/relayRuntimeUpgrade.d.ts +58 -0
  38. package/dist/relayRuntimeUpgrade.d.ts.map +1 -0
  39. package/dist/relayRuntimeUpgrade.js +193 -0
  40. package/dist/relayRuntimeUpgrade.js.map +1 -0
  41. package/dist/relayRuntimeUpgrade.test.d.ts +2 -0
  42. package/dist/relayRuntimeUpgrade.test.d.ts.map +1 -0
  43. package/dist/relayRuntimeUpgrade.test.js +173 -0
  44. package/dist/relayRuntimeUpgrade.test.js.map +1 -0
  45. package/dist/relayRuntimeUpgradeCaller.test.d.ts +2 -0
  46. package/dist/relayRuntimeUpgradeCaller.test.d.ts.map +1 -0
  47. package/dist/relayRuntimeUpgradeCaller.test.js +116 -0
  48. package/dist/relayRuntimeUpgradeCaller.test.js.map +1 -0
  49. package/dist/repositoryInstallerFiles.d.ts +2 -1
  50. package/dist/repositoryInstallerFiles.d.ts.map +1 -1
  51. package/dist/repositoryInstallerFiles.js +6 -3
  52. package/dist/repositoryInstallerFiles.js.map +1 -1
  53. package/dist/repositoryOnboardingCaller.test.js +94 -1
  54. package/dist/repositoryOnboardingCaller.test.js.map +1 -1
  55. package/dist/repositoryOnboardingFlow.test.js +4 -3
  56. package/dist/repositoryOnboardingFlow.test.js.map +1 -1
  57. package/dist/repositoryRelaySupervisor.d.ts +39 -0
  58. package/dist/repositoryRelaySupervisor.d.ts.map +1 -0
  59. package/dist/repositoryRelaySupervisor.js +145 -0
  60. package/dist/repositoryRelaySupervisor.js.map +1 -0
  61. package/dist/repositoryRelaySupervisor.test.d.ts +2 -0
  62. package/dist/repositoryRelaySupervisor.test.d.ts.map +1 -0
  63. package/dist/repositoryRelaySupervisor.test.js +189 -0
  64. package/dist/repositoryRelaySupervisor.test.js.map +1 -0
  65. package/dist/schemas/local-relay-upgrade.schema.json +32 -0
  66. package/dist/skillPreparationCache.test.js +8 -4
  67. package/dist/skillPreparationCache.test.js.map +1 -1
  68. package/dist/skillPreparationCaller.test.js +4 -2
  69. package/dist/skillPreparationCaller.test.js.map +1 -1
  70. package/dist/usage.d.ts +1 -1
  71. package/dist/usage.d.ts.map +1 -1
  72. package/dist/usage.js +1 -1
  73. package/dist/usage.js.map +1 -1
  74. package/package.json +3 -3
@@ -81,6 +81,8 @@ To propose a new or corrected term, edit an approved repository source or regist
81
81
 
82
82
  ## 7. Maintain autonomous synchronization
83
83
 
84
+ One enrolled device supervisor can serve multiple authorized repositories in its current organization. Each repository keeps its own verified policy, source watcher, package, catalog, skills and poll receipt. Adding another repository does not replace the existing user-logon startup anchor or merge repository knowledge. Device-wide task execution is serialized; removing one registered repository stops its worker without stopping the others. Check `dharma status --diagnostic` for `repositoryRelays`: each intended repository must report a recent poll from the actual receiver PID and release. A healthy first repository does not prove readiness of a second one. Older single-repository receivers require the supported stopped-runtime upgrade at their existing startup-anchor checkout; never retarget a working receiver to the newly connected repository.
85
+
84
86
  Completed onboarding starts a detached supervisor for the outbound relay and registers per-user startup on Windows or Linux with a systemd user session. It restarts the receiver after an unexpected process exit. After a reboot and normal sign-in by the enrolled operating-system user, startup resumes the bound relay without another grant or prompt. Verify `autostart.state: enabled`, `supervisor: running`, and a recent `reconnect.lastSuccessfulPollAt` with `dharma status`; `dharma relay probe` independently verifies the signed connection. Startup registration failure is an incomplete onboarding stage, not a success receipt. If the relay does not reconnect, use the supported grant-free onboarding resume from this bound repository. `dharma relay stop` stops current processes without deleting credentials, vault data, or the next-login startup entry; `dharma relay autostart disable` removes that entry. Linux environments without a systemd user bus and macOS are not yet reboot-autonomous. The relay receives signed tasks, policy refreshes, package releases, evidence requests, role questions, remediation skills, and rollback instructions.
85
87
 
86
88
  Watch approved source branches, repository skills, dependencies, and registered output folders. Debounce changes, hash stable snapshots, and publish only against the expected parent. Validated updates publish automatically under the standing policy. Permission expansion, secret detection, manifest corruption, unresolved conflicts, failed evaluation, or budget exhaustion blocks publication.
@@ -93,6 +95,8 @@ The Linux supervisor also attempts to reconnect enabled named sessions after nor
93
95
 
94
96
  After publication, compare release ID and manifest/catalog hashes on every connected endpoint with `dharma skills status` and `dharma skills verify`. Have a second agent in a separate session answer a source-grounded question or use the new skill in a bounded task. Matching files prove delivery, not correct use. If a relay is not running, restart it under the enrolled identity and verify `dharma relay probe`; do not claim continuous synchronization from an earlier bootstrap receipt. An offline client must reconcile the signed release on reconnect before its next relevant task.
95
97
 
98
+ CLI executable updates are separate from signed repository releases. Merely invoking a newer CLI does not upgrade the managed launcher or background receiver. Use the exact approved published release, the same secure device home and bound checkout. At a safe task boundary, stop named sessions and the relay, then inspect `dharma relay upgrade --workspace . --dry-run` using that release. Apply the verified plan with `--apply`; it updates the owned launchers and user-logon registration together, starts the receiver and checks its actual process versions and fresh local poll. It does not redeem another grant or change device identity, source policy or signed skills. Re-enable previously enabled named sessions on their existing bindings and verify messaging. A failed restart attempts to restore the previous executable and startup; report `rollback_failed` without claiming recovery. An interrupted transaction requires `dharma relay upgrade --workspace . --rollback --apply` from the same approved release after work stops. Local poll observations are unsigned. Fleet-wide automatic selection and live Windows/Linux upgrade qualification remain separate; do not claim them from this command alone.
99
+
96
100
  ## 8. Recover without weakening trust
97
101
 
98
102
  On failure, classify the stage: provider readiness, enrollment, authority, repository identity, source policy, package convergence, relay connectivity, signing, delivery, or activation. Retain the last verified release. Use supported retry, reconciliation, rollback, or browser-authorized re-enrollment; never edit trust files, extend an expired key, create a replacement organization, or manufacture a success receipt.
@@ -139,6 +143,7 @@ Report `complete` only when identity, shared package, native skill, role, first
139
143
  - Read a peer answer: `dharma repositories reply --workspace-id <workspace-id> --question-id <question-id>`.
140
144
  - Check relay connectivity: `dharma relay probe`.
141
145
  - Check user-logon startup: `dharma relay autostart status`.
146
+ - Plan an approved executable/startup update on a stopped runtime: `dharma relay upgrade --workspace . --dry-run`; apply with `--apply` instead of `--dry-run`.
142
147
  - Disable future user-logon startup without deleting enrollment: `dharma relay autostart disable`.
143
148
  - Resume a stopped supervised receiver from an enrolled checkout: `dharma onboard --resume --organization-id <organization-id> --workspace . --policy-revision <policy-revision> --providers <provider>`.
144
149
  - Stop the receiver intentionally, preserving enrollment and vault: `dharma relay stop`.
package/README.md CHANGED
@@ -6,6 +6,29 @@ discovers provider capabilities, keeps full trajectories in an encrypted local
6
6
  vault, syncs policy-qualified evidence, executes bounded signed tasks, and
7
7
  installs signed Skill releases with receipts and rollback ancestry.
8
8
 
9
+ ## Recover a committed legacy bootstrap
10
+
11
+ Older repositories may contain an unsigned installer marker committed for a
12
+ different workspace. Normal onboarding rejects it. An enrolled member can plan
13
+ an explicit migration using the old workspace ID from that marker:
14
+
15
+ ```powershell
16
+ dharma repositories recover-installer --workspace . --organization-id <organization-id> --workspace-id <current-workspace-id> --from-workspace-id <old-workspace-id> --dry-run
17
+ ```
18
+
19
+ After inspecting the plan, replace `--dry-run` with `--apply`. Both modes require
20
+ current enrollment, the canonical device/repository binding, current signed
21
+ workspace policy and live repository-source consent. Recovery accepts only the
22
+ five unchanged, committed bootstrap files for the same repository key. Signed
23
+ bundles, custom files, staged changes, untracked files, symlinks and hardlinks
24
+ are rejected. Windows text checkout conversion is supported.
25
+
26
+ Apply preserves original bytes under `.dharma/installer-recovery/<id>` and
27
+ replaces only the unsigned installer workspace marker. It does not replace
28
+ trust, install a signed bundle, publish content or establish activation. Resume
29
+ the exact released onboarding command afterward and require its completion
30
+ receipt. Keep backups private and retain them until recovery is qualified.
31
+
9
32
  ## Demo peer collaboration
10
33
 
11
34
  After a recipient approves a Demo device, run these commands from the exact
@@ -1 +1 @@
1
- {"version":3,"file":"demoEnrollment.d.ts","sourceRoot":"","sources":["../src/demoEnrollment.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8C,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC/H,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAC3H,OAAO,EAAkF,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAMrJ,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,EACzD,OAAO,GAAG,gBAAgB,GAAG,cAAc,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;AAkBzG,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AA6CD,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,UAI/D;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,GAAE,uBAA4B;;;;GA2BpG;AAwDD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAC3D,IAAI,GAAE,IAAI,CAAC,6BAA6B,EAAE,OAAO,GAAG,SAAS,GAAG,0BAA0B,CAAM;;;;;;;;;GA2FjG;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,EACrE,IAAI,GAAE,6BAAkC;;;;;;;;;GAoIzC"}
1
+ {"version":3,"file":"demoEnrollment.d.ts","sourceRoot":"","sources":["../src/demoEnrollment.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8C,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC/H,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAC3H,OAAO,EAAkF,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAMrJ,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,EACzD,OAAO,GAAG,gBAAgB,GAAG,cAAc,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;AAkBzG,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AA6CD,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,UAI/D;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,GAAE,uBAA4B;;;;GA2BpG;AA2GD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAC3D,IAAI,GAAE,IAAI,CAAC,6BAA6B,EAAE,OAAO,GAAG,SAAS,GAAG,0BAA0B,CAAM;;;;;;;;;GAuGjG;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,EACrE,IAAI,GAAE,6BAAkC;;;;;;;;;GAoIzC"}
@@ -1,5 +1,5 @@
1
- import { createHash, createPublicKey, randomBytes, randomUUID, sign } from 'node:crypto';
2
- import { chmod, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
1
+ import { createHash, createPublicKey, randomBytes, randomUUID, sign, verify } from 'node:crypto';
2
+ import { chmod, lstat, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
3
3
  import { dirname, resolve } from 'node:path';
4
4
  import { loadOrCreateDeviceIdentity, normalizeHqUrl } from '@dharma-ai-labs/agent-fabric-relay-client';
5
5
  import { verifyInitialServerSigningKeyset } from '@dharma-ai-labs/agent-fabric-contracts';
@@ -140,6 +140,65 @@ function signedStatusRequest(origin, input, deviceId, privateJwk, sequence, sign
140
140
  'x-dharma-signature': signature,
141
141
  } };
142
142
  }
143
+ function authenticCompletedStatus(request, publicKeyEd25519) {
144
+ try {
145
+ const fields = ['url', 'deviceId', 'sequence', 'createdAt', 'headers'];
146
+ const headerFields = ['x-dharma-device-id', 'x-dharma-session-id', 'x-dharma-message-id',
147
+ 'x-dharma-timestamp', 'x-dharma-nonce', 'x-dharma-sequence', 'x-dharma-signature'];
148
+ const headers = request.headers;
149
+ if (Object.keys(request).length !== fields.length || Object.keys(request).some(key => !fields.includes(key))
150
+ || Object.keys(headers).length !== headerFields.length || Object.keys(headers).some(key => !headerFields.includes(key))
151
+ || headers['x-dharma-device-id'] !== request.deviceId
152
+ || headers['x-dharma-sequence'] !== String(request.sequence)
153
+ || headers['x-dharma-timestamp'] !== request.createdAt
154
+ || !UUID.test(headers['x-dharma-session-id']) || !UUID.test(headers['x-dharma-message-id'])
155
+ || !/^[A-Za-z0-9_-]{32}$/.test(headers['x-dharma-nonce'])
156
+ || !/^[A-Za-z0-9_-]{86}$/.test(headers['x-dharma-signature']))
157
+ return false;
158
+ const url = new URL(request.url);
159
+ if (url.toString() !== request.url)
160
+ return false;
161
+ const payload = Buffer.from(JSON.stringify({
162
+ bodyHash: `sha256:${createHash('sha256').update('').digest('hex')}`,
163
+ deviceId: request.deviceId, messageId: headers['x-dharma-message-id'], method: 'GET',
164
+ nonce: headers['x-dharma-nonce'], organizationId: url.searchParams.get('orgId'),
165
+ pathname: `${url.pathname}${url.search}`, sequence: request.sequence,
166
+ sessionId: headers['x-dharma-session-id'], timestamp: request.createdAt,
167
+ }));
168
+ return verify(null, payload, createPublicKey({
169
+ key: { kty: 'OKP', crv: 'Ed25519', x: publicKeyEd25519 }, format: 'jwk',
170
+ }), Buffer.from(headers['x-dharma-signature'], 'base64url'));
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ }
176
+ async function preserveCompletedStatus(configPath, bytes) {
177
+ const directory = `${configPath}.status-history`;
178
+ await mkdir(directory, { recursive: true, mode: 0o700 });
179
+ const directoryStat = await lstat(directory);
180
+ if (!directoryStat.isDirectory() || directoryStat.isSymbolicLink()) {
181
+ throw new Error('Completed Demo status history directory is invalid.');
182
+ }
183
+ if (process.platform !== 'win32')
184
+ await chmod(directory, 0o700);
185
+ const hash = createHash('sha256').update(bytes).digest('hex');
186
+ const path = resolve(directory, `${hash}.json`);
187
+ try {
188
+ await writeFile(path, bytes, { mode: 0o600, flag: 'wx' });
189
+ }
190
+ catch (error) {
191
+ if (error.code !== 'EEXIST')
192
+ throw error;
193
+ const existing = await lstat(path);
194
+ if (!existing.isFile() || existing.isSymbolicLink() || existing.size !== Buffer.byteLength(bytes)
195
+ || await readFile(path, 'utf8') !== bytes) {
196
+ throw new Error('Completed Demo status history conflicts with the original receipt.');
197
+ }
198
+ }
199
+ if (process.platform !== 'win32')
200
+ await chmod(path, 0o600);
201
+ }
143
202
  export async function verifyDemoDevice(input, deps = {}) {
144
203
  const origin = normalizeHqUrl(input.hqUrl);
145
204
  const configPath = scopePath(input, origin);
@@ -161,25 +220,38 @@ export async function verifyDemoDevice(input, deps = {}) {
161
220
  if (config.serverSigningKeyset)
162
221
  config = await resolveDemoSigningTrust(config, { store: deps.store });
163
222
  let hasPending = false;
223
+ let existingReceiptRead = false;
164
224
  let pending = signedStatusRequest(origin, input, config.deviceId, identity.privateJwk, config.nextSequence, config.serverSigningKeyset?.generation);
165
225
  try {
166
- const existing = JSON.parse(await readFile(pendingPath, 'utf8'));
226
+ const existingBytes = await readFile(pendingPath, 'utf8');
227
+ existingReceiptRead = true;
228
+ const existing = JSON.parse(existingBytes);
167
229
  const existingUrl = new URL(existing.url);
168
230
  existingUrl.searchParams.delete('signingGeneration');
169
231
  const expectedUrl = new URL(pending.url);
170
232
  expectedUrl.searchParams.delete('signingGeneration');
171
233
  if (existing.deviceId !== config.deviceId || existingUrl.toString() !== expectedUrl.toString()
172
- || !Number.isSafeInteger(existing.sequence) || existing.sequence < config.nextSequence
234
+ || !Number.isSafeInteger(existing.sequence) || existing.sequence < 1
173
235
  || !Number.isFinite(Date.parse(existing.createdAt))) {
174
236
  throw new Error('Pending Demo device status does not match this identity.');
175
237
  }
176
- hasPending = true;
177
- pending = Date.now() - Date.parse(existing.createdAt) < 4 * 60_000 && existing.url === pending.url
178
- ? existing
179
- : signedStatusRequest(origin, input, config.deviceId, identity.privateJwk, existing.sequence, config.serverSigningKeyset?.generation);
238
+ if (existing.sequence < config.nextSequence) {
239
+ // A committed status can survive a crash before cleanup; never replay it or discard its receipt.
240
+ if (!config.signedReady || existing.sequence + 1 !== config.nextSequence
241
+ || !authenticCompletedStatus(existing, config.publicKeyEd25519)) {
242
+ throw new Error('Pending Demo device status does not match this identity.');
243
+ }
244
+ await preserveCompletedStatus(configPath, existingBytes);
245
+ }
246
+ else {
247
+ hasPending = true;
248
+ pending = Date.now() - Date.parse(existing.createdAt) < 4 * 60_000 && existing.url === pending.url
249
+ ? existing
250
+ : signedStatusRequest(origin, input, config.deviceId, identity.privateJwk, existing.sequence, config.serverSigningKeyset?.generation);
251
+ }
180
252
  }
181
253
  catch (error) {
182
- if (error.code !== 'ENOENT') {
254
+ if (existingReceiptRead || error.code !== 'ENOENT') {
183
255
  throw new Error('Pending Demo device status is invalid; preserve it for recovery.', { cause: error });
184
256
  }
185
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"demoEnrollment.js","sourceRoot":"","sources":["../src/demoEnrollment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"demoEnrollment.js","sourceRoot":"","sources":["../src/demoEnrollment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AAClH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAA0B,MAAM,2CAA2C,CAAC;AAC/H,OAAO,EAAE,gCAAgC,EAAmC,MAAM,wCAAwC,CAAC;AAC3H,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,uBAAuB,EAAgC,MAAM,uBAAuB,CAAC;AAErJ,MAAM,IAAI,GAAG,4EAA4E,CAAC;AAC1F,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AA0CtC,SAAS,WAAW,CAAC,KAA+B;IAClD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;WAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;WAClE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;WAC7D,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB;WAC5D,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED,MAAM,kBAAmB,SAAQ,KAAK;IACf;IAAwC;IAA7D,YAAqB,IAAY,EAAE,OAAe,EAAW,MAAc;QACzE,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QADV,SAAI,GAAJ,IAAI,CAAQ;QAA4B,WAAM,GAAN,MAAM,CAAQ;IAE3E,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,MAAc;IAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACvF,CAAC,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;QACzD,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;QAClE,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IACpF,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,SAAS;WAC5B,CAAC,KAAK,YAAY,kBAAkB;eAClC,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAkB;IAChD,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;WACtD,IAAgC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAA+B,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAsB,EAAE,MAAc;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;SACnG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAsB,EAAE,OAAgC,EAAE;IACnG,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAqB,CAAC;IAClF,IAAI,MAAM,CAAC,MAAM,KAAK,uBAAuB,IAAI,CAAC,MAAM,CAAC,WAAW;WAC/D,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;WACtD,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WAC5F,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB;WAC1D,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;WAC9C,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,CAAC;WAChE,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,MAAM;QAC/D,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE;QAC/D,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,sBAAsB,KAAK,MAAM,CAAC,sBAAsB;WAC/D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAChG,MAAM,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS;YACnE,CAAC,EAAE,OAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,mBAAoB,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAChD,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,MAAc,EAAE,KAA+B;IAClF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC9F,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QAAC,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAC7B,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAAC,CAAC;IACzE,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAsB;WAC/D,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;WACvE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;WAC7C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC;WACpD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;WAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,cAAc;WACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,KAAK,CAAC,YAAY;WAC3D,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,KAAsB,EACjE,QAAgB,EAAE,UAAsB,EAAE,QAAgB,EAAE,iBAA0B;IACtF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,iCAAiC,KAAK,CAAC,YAAY,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1F,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACpD,IAAI,iBAAiB,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1G,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACzC,QAAQ,EAAE,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACnE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;QACzC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;KACzE,CAAC,CAAC,CAAC;IACJ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChG,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;YAC/E,oBAAoB,EAAE,QAAQ;YAC9B,qBAAqB,EAAE,SAAS;YAChC,qBAAqB,EAAE,SAAS;YAChC,oBAAoB,EAAE,SAAS;YAC/B,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC;YACrC,oBAAoB,EAAE,SAAS;SAChC,EAAE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA+C,EAAE,gBAAwB;IACzG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB;YACtF,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;eACvG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;eACpH,OAAO,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,QAAQ;eAClD,OAAO,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;eACzD,OAAO,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,SAAS;eACnD,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;eACxF,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;eACtD,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,QAAQ,EAAE,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACnE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,KAAK;YACpF,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/E,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YACpE,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS;SACxE,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC;YAC3C,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK;SACxE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,UAAkB,EAAE,KAAa;IACtE,MAAM,SAAS,GAAG,GAAG,UAAU,iBAAiB,CAAC;IACjD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC;QAAC,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAClE,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;eAC5F,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAsB,EAC3D,OAA8F,EAAE;IAChG,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,GAAG,UAAU,sBAAsB,CAAC;IACxD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAqB,CAAC;IAChF,IAAI,MAAM,CAAC,MAAM,KAAK,uBAAuB,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM;WACnE,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WAC5F,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB;WAC1D,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;WAC7E,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,MAAM;QAC/D,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE;QAC/D,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,MAAM,CAAC,mBAAmB;QAAE,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtG,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IACpF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,mBAAmB,GAAG,IAAI,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAmB,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE;eACzF,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC;eACjE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAC5C,iGAAiG;YACjG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,KAAK,MAAM,CAAC,YAAY;mBACnE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,uBAAuB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAI,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;gBAChG,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAClD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,kEAAkE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACjE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;SACxC,CAAC,CAAC,CAAC;IACN,CAAC,CAAC;IACF,IAAI,MAAM,GAAmC,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,KAAK,OAAO,CAAC,QAAQ,CAAC;eAClE,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;eACtC,KAAK,CAAC,IAAI,KAAK,mCAAmC;YAAE,MAAM,KAAK,CAAC;QACrE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC5D,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,EACzF,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;gBAC/B,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YAAC,OAAO,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,cAAc,YAAY,kBAAkB,CAAC;uBAC9C,cAAc,CAAC,IAAI,KAAK,mCAAmC;oBAAE,MAAM,cAAc,CAAC;YACzF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,MAAM,KAAK,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WACtG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB,EAAE,CAAC;QACvG,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC3C,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,gFAAgF;IAChF,uFAAuF;IACvF,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjG,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,qBAA8B;QAC/D,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;QACtE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QAC3E,UAAU,EAAE,sBAAsB,EAAE,eAAwB,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA+B,EACrE,OAAsC,EAAE;IACxC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,YAAoB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,MAAM;QAC/D,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE;QAC/D,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,OAAO,CAAC,GAAG,MAAM,8BAA8B,EAAE;QAC5F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;YAClF,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;YAC3E,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KACjD,CAAC,CAAC,CAAC;IACJ,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;WAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAC7D,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAC3F,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,sBAAsB,GAAG,EAAE,CAAC;IAChC,IAAI,mBAA2D,CAAC;IAChE,IAAI,kBAA2B,CAAC;IAChC,IAAI,kBAA2B,CAAC;IAChC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,OAAO,CAAC,GAAG,MAAM,mCAAmC,EAAE;gBAC1F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;aACtF,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC9C,iBAAiB,IAAI,CAAC,CAAC;YACvB,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,8GAA8G,EAC5H,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,iBAAiB,GAAG,CAAC,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5F,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACvF,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YACpF,CAAC;YACD,mBAAmB,GAAG,MAAM,CAAC,mBAAiD,CAAC;YAC/E,MAAM,YAAY,GAAG,gCAAgC,CAAC,mBAAmB,EACvE,eAAe,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAClG,KAAK,CAAC,cAAc,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7G,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC/C,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC/C,MAAM;QACR,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QACvH,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IACxH,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAqB,CAAC;QAClF,IAAI,QAAQ,CAAC,MAAM,KAAK,uBAAuB,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM;eACvE,QAAQ,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eAChG,QAAQ,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB,IAAI,QAAQ,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;eAChH,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACjC,IAAI,CAAC;gBAAC,QAAQ,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAAC,CAAC;YAClF,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,uCAAuC,CAAC;oBAAE,MAAM,KAAK,CAAC;gBACjH,QAAQ,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,EACrG,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC7C,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACrC,QAAQ,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC;YACD,MAAM,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAClC,IAAI,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;YAC5E,IAAI,kBAAkB,KAAK,SAAS;gBAAE,QAAQ,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACpI,MAAM,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,GAAqB,EAAE,MAAM,EAAE,uBAAuB;QAC9D,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;QACrF,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;QACtF,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QACrD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QACzE,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;IAChD,MAAM,qBAAqB,GAAG,GAAG,UAAU,0BAA0B,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAqB,CAAC;QAC9F,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;eACzD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;eAC7D,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;eAC/F,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB;eAC/E,CAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,gBAAgB;gBACtF,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,CAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClH,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,qBAAqB,GAAG,MAAM,CAAC,mBAAoB,CAAC,UAAU,CAAC;IACrE,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtE,IAAI,kBAAkB,KAAK,SAAS,IAAI,MAAM,CAAC,mBAAoB,CAAC,UAAU,KAAK,qBAAqB,EAAE,CAAC;QACzG,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -647,4 +647,189 @@ test('expired status does not advance on an unrelated conflict', async () => {
647
647
  assert.deepEqual(sequences, [1, 2]);
648
648
  assert.equal(JSON.parse(await readFile(connected.configPath, 'utf8')).nextSequence, 2);
649
649
  });
650
+ async function committedStatusFixture() {
651
+ const stateRoot = await mkdtemp(resolve(tmpdir(), 'dharma-demo-committed-status-'));
652
+ const scope = options(stateRoot);
653
+ const store = memoryStore();
654
+ const configPath = scopePath(scope, hqUrl);
655
+ const pendingPath = `${configPath}.pending-status.json`;
656
+ const sequences = [];
657
+ let committedPending = '';
658
+ let failNext = false;
659
+ const fetcher = async (resource, init) => {
660
+ const url = new URL(String(resource));
661
+ if (url.pathname.endsWith('/enrollments'))
662
+ return Response.json({ ok: true, status: 'pending',
663
+ organizationId: orgId, repositoryId, deviceCode,
664
+ expiresAt: new Date(Date.now() + 60_000).toISOString(),
665
+ verificationUri: `${hqUrl}/demo/fabric/approve?orgId=${orgId}&repositoryId=${repositoryId}&code=${browserCode}` });
666
+ if (url.pathname.endsWith('/poll'))
667
+ return Response.json(approvedEnrollment());
668
+ sequences.push(Number(new Headers(init?.headers).get('x-dharma-sequence')));
669
+ if (!committedPending)
670
+ committedPending = await readFile(pendingPath, 'utf8');
671
+ if (failNext) {
672
+ failNext = false;
673
+ return Response.json({ ok: false, error: { code: 'fixture_unavailable', message: 'Unavailable.' } }, { status: 503 });
674
+ }
675
+ return Response.json({ ok: true, organizationId: orgId, repositoryId, deviceId, normalizedRepository });
676
+ };
677
+ await connectDemoDevice(scope, { store, fetcher });
678
+ const committedConfig = await readFile(configPath, 'utf8');
679
+ await writeFile(pendingPath, committedPending);
680
+ return { scope, store, configPath, pendingPath, sequences, fetcher, committedPending, committedConfig,
681
+ failNextStatus: () => { failNext = true; } };
682
+ }
683
+ test('status resumes after committed config but interrupted pending cleanup, preserving the authentic receipt', async () => {
684
+ const fixture = await committedStatusFixture();
685
+ const result = await verifyDemoDevice(fixture.scope, fixture);
686
+ assert.equal(result.stage, 'device_signed_ready');
687
+ assert.deepEqual(fixture.sequences, [1, 2]);
688
+ const before = JSON.parse(fixture.committedConfig);
689
+ const after = JSON.parse(await readFile(fixture.configPath, 'utf8'));
690
+ assert.deepEqual({ ...after, nextSequence: before.nextSequence }, before);
691
+ assert.equal(after.nextSequence, 3);
692
+ const hash = createHash('sha256').update(fixture.committedPending).digest('hex');
693
+ const historyPath = resolve(`${fixture.configPath}.status-history`, `${hash}.json`);
694
+ assert.equal(await readFile(historyPath, 'utf8'), fixture.committedPending);
695
+ if (process.platform !== 'win32')
696
+ assert.equal((await stat(historyPath)).mode & 0o777, 0o600);
697
+ await assert.rejects(readFile(fixture.pendingPath), { code: 'ENOENT' });
698
+ await verifyDemoDevice(fixture.scope, fixture);
699
+ assert.deepEqual(fixture.sequences, [1, 2, 3]);
700
+ assert.deepEqual(await readdir(`${fixture.configPath}.status-history`), [`${hash}.json`]);
701
+ });
702
+ test('interrupted stale-status recovery keeps the fresh exact replay without advancing or losing history', async () => {
703
+ const fixture = await committedStatusFixture();
704
+ fixture.failNextStatus();
705
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /fixture_unavailable/);
706
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
707
+ const pending = JSON.parse(await readFile(fixture.pendingPath, 'utf8'));
708
+ assert.equal(pending.sequence, 2);
709
+ const result = await verifyDemoDevice(fixture.scope, fixture);
710
+ assert.equal(result.stage, 'device_signed_ready');
711
+ assert.deepEqual(fixture.sequences, [1, 2, 2]);
712
+ const hash = createHash('sha256').update(fixture.committedPending).digest('hex');
713
+ assert.equal(await readFile(resolve(`${fixture.configPath}.status-history`, `${hash}.json`), 'utf8'), fixture.committedPending);
714
+ assert.equal(JSON.parse(await readFile(fixture.configPath, 'utf8')).nextSequence, 3);
715
+ });
716
+ test('stale-status recovery refuses foreign, malformed and unauthenticated receipts before dispatch', async () => {
717
+ const fixture = await committedStatusFixture();
718
+ const authentic = JSON.parse(fixture.committedPending);
719
+ const mutations = [
720
+ (p) => { p.deviceId = repositoryId; },
721
+ (p) => { p.url = p.url.replace(hqUrl, 'https://foreign.example'); },
722
+ (p) => { p.url = p.url.replace(orgId, 'org_foreign'); },
723
+ (p) => { p.url = p.url.replace(repositoryId, deviceId); },
724
+ (p) => { p.sequence = 0; },
725
+ (p) => { p.createdAt = 'invalid'; },
726
+ (p) => { p.headers['x-dharma-device-id'] = repositoryId; },
727
+ (p) => { p.headers['x-dharma-sequence'] = '2'; },
728
+ (p) => { p.headers['x-dharma-message-id'] = repositoryId; },
729
+ (p) => { p.headers['x-dharma-session-id'] = repositoryId; },
730
+ (p) => { p.headers['x-dharma-nonce'] = 'A'.repeat(32); },
731
+ (p) => { p.headers['x-dharma-signature'] = 'A'.repeat(86); },
732
+ (p) => { p.headers.authorization = 'Bearer fixture-not-a-credential'; },
733
+ (p) => { p.headers = {}; },
734
+ ];
735
+ for (const mutate of mutations) {
736
+ const pending = structuredClone(authentic);
737
+ mutate(pending);
738
+ const bytes = JSON.stringify(pending);
739
+ await writeFile(fixture.pendingPath, bytes);
740
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /Pending Demo device status is invalid/);
741
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), bytes);
742
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
743
+ assert.deepEqual(fixture.sequences, [1]);
744
+ await assert.rejects(readdir(`${fixture.configPath}.status-history`), { code: 'ENOENT' });
745
+ }
746
+ await writeFile(fixture.pendingPath, fixture.committedPending);
747
+ for (const config of [
748
+ { ...JSON.parse(fixture.committedConfig), signedReady: false },
749
+ { ...JSON.parse(fixture.committedConfig), nextSequence: 3 },
750
+ ]) {
751
+ const bytes = JSON.stringify(config);
752
+ await writeFile(fixture.configPath, bytes);
753
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /Pending Demo device status is invalid/);
754
+ assert.equal(await readFile(fixture.configPath, 'utf8'), bytes);
755
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), fixture.committedPending);
756
+ assert.deepEqual(fixture.sequences, [1]);
757
+ }
758
+ });
759
+ test('stale-status history conflicts preserve the source receipt and block dispatch', async () => {
760
+ const fixture = await committedStatusFixture();
761
+ const hash = createHash('sha256').update(fixture.committedPending).digest('hex');
762
+ const { mkdir } = await import('node:fs/promises');
763
+ await mkdir(`${fixture.configPath}.status-history`);
764
+ const history = resolve(`${fixture.configPath}.status-history`, `${hash}.json`);
765
+ await writeFile(history, 'conflicting receipt');
766
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /Pending Demo device status is invalid/);
767
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), fixture.committedPending);
768
+ assert.equal(await readFile(history, 'utf8'), 'conflicting receipt');
769
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
770
+ assert.deepEqual(fixture.sequences, [1]);
771
+ });
772
+ test('stale-status recovery reuses an identical private history receipt after interruption', async () => {
773
+ const fixture = await committedStatusFixture();
774
+ const hash = createHash('sha256').update(fixture.committedPending).digest('hex');
775
+ const { mkdir } = await import('node:fs/promises');
776
+ const directory = `${fixture.configPath}.status-history`;
777
+ await mkdir(directory);
778
+ const history = resolve(directory, `${hash}.json`);
779
+ await writeFile(history, fixture.committedPending);
780
+ await verifyDemoDevice(fixture.scope, fixture);
781
+ assert.equal(await readFile(history, 'utf8'), fixture.committedPending);
782
+ assert.deepEqual(await readdir(directory), [`${hash}.json`]);
783
+ assert.deepEqual(fixture.sequences, [1, 2]);
784
+ if (process.platform !== 'win32') {
785
+ assert.equal((await stat(directory)).mode & 0o777, 0o700);
786
+ assert.equal((await stat(history)).mode & 0o777, 0o600);
787
+ }
788
+ });
789
+ test('stale-status archival failure cannot overwrite the source receipt or dispatch', async () => {
790
+ const fixture = await committedStatusFixture();
791
+ const directory = `${fixture.configPath}.status-history`;
792
+ await writeFile(directory, 'not a directory');
793
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /Pending Demo device status is invalid/);
794
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), fixture.committedPending);
795
+ assert.equal(await readFile(directory, 'utf8'), 'not a directory');
796
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
797
+ assert.deepEqual(fixture.sequences, [1]);
798
+ });
799
+ test('stale-status history refuses directory symlinks without following or writing them', async () => {
800
+ const fixture = await committedStatusFixture();
801
+ const { symlink } = await import('node:fs/promises');
802
+ const target = await mkdtemp(resolve(tmpdir(), 'dharma-demo-history-target-'));
803
+ await symlink(target, `${fixture.configPath}.status-history`, process.platform === 'win32' ? 'junction' : 'dir');
804
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /Pending Demo device status is invalid/);
805
+ assert.deepEqual(await readdir(target), []);
806
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), fixture.committedPending);
807
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
808
+ assert.deepEqual(fixture.sequences, [1]);
809
+ });
810
+ test('stale-status recovery requires the fresh response to confirm the same repository and device', async () => {
811
+ for (const mutation of [
812
+ { organizationId: 'org_foreign' }, { repositoryId: deviceId },
813
+ { deviceId: repositoryId }, { normalizedRepository: 'github.com/foreign/private' },
814
+ ]) {
815
+ const fixture = await committedStatusFixture();
816
+ const fetcher = async () => Response.json({ ok: true, organizationId: orgId,
817
+ repositoryId, deviceId, normalizedRepository, ...mutation });
818
+ await assert.rejects(verifyDemoDevice(fixture.scope, { store: fixture.store, fetcher }), /exact repository and device/);
819
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
820
+ assert.equal(JSON.parse(await readFile(fixture.pendingPath, 'utf8')).sequence, 2);
821
+ const hash = createHash('sha256').update(fixture.committedPending).digest('hex');
822
+ assert.equal(await readFile(resolve(`${fixture.configPath}.status-history`, `${hash}.json`), 'utf8'), fixture.committedPending);
823
+ }
824
+ });
825
+ test('stale-status recovery cannot extend expired signing trust or replace the enrolled identity', async (t) => {
826
+ t.mock.timers.enable({ apis: ['Date'], now: new Date('2026-09-29T15:00:00Z') });
827
+ const fixture = await committedStatusFixture();
828
+ t.mock.timers.tick(48 * 60 * 60_000);
829
+ await assert.rejects(verifyDemoDevice(fixture.scope, fixture), /expired/i);
830
+ assert.equal(await readFile(fixture.configPath, 'utf8'), fixture.committedConfig);
831
+ assert.equal(await readFile(fixture.pendingPath, 'utf8'), fixture.committedPending);
832
+ assert.deepEqual(fixture.sequences, [1]);
833
+ await assert.rejects(readdir(`${fixture.configPath}.status-history`), { code: 'ENOENT' });
834
+ });
650
835
  //# sourceMappingURL=demoEnrollment.test.js.map