|
| 1 | +import { createDurableCaptureSessionBinding } from './session-binding.ts'; |
1 | 2 | import { AppError } from '@agent-device/kernel/errors'; |
2 | 3 | import type { DurableCaptureSessionBinding, DurableCaptureSessionResource } from './definition.ts'; |
3 | 4 |
|
@@ -42,46 +43,18 @@ export function makeCaptureSessionBinding<K extends string, H extends AsyncDispo |
42 | 43 | }>, |
43 | 44 | ): DurableCaptureSessionBinding<K, H> { |
44 | 45 | const ref = store.lookup(address); |
45 | | - let retained = slot.read(ref.session); |
46 | | - const requireSession = (): S => { |
47 | | - const session = store.resolveCurrent(ref); |
48 | | - if (session === undefined) throw new AppError('COMMAND_FAILED', 'Test session retired'); |
49 | | - return session; |
50 | | - }; |
51 | | - const assertAdoptable = (): void => { |
52 | | - if (slot.read(requireSession())) throw new AppError('COMMAND_FAILED', 'Test resource changed'); |
53 | | - }; |
54 | | - return Object.freeze({ |
| 46 | + return createDurableCaptureSessionBinding({ |
55 | 47 | address, |
56 | 48 | sessionDir: store.resolveSessionDir(address), |
57 | | - read: () => { |
| 49 | + initialSession: ref.session, |
| 50 | + resolveCurrent: () => store.resolveCurrent(ref), |
| 51 | + requireCurrent: () => { |
58 | 52 | const session = store.resolveCurrent(ref); |
59 | | - if (session !== undefined) retained = slot.read(session); |
60 | | - return retained; |
61 | | - }, |
62 | | - assertAdoptable, |
63 | | - canPersist: () => { |
64 | | - const session = store.resolveCurrent(ref); |
65 | | - return session !== undefined && slot.read(session) === undefined; |
66 | | - }, |
67 | | - adopt: (resource) => { |
68 | | - assertAdoptable(); |
69 | | - store.update(ref, (current) => slot.replace(current, resource)); |
70 | | - retained = resource; |
71 | | - }, |
72 | | - clear: (expected) => { |
73 | | - const current = store.resolveCurrent(ref); |
74 | | - if (current === undefined) return 'retired'; |
75 | | - const active = slot.read(current); |
76 | | - if ( |
77 | | - active?.handle !== expected.handle || |
78 | | - active.envelope.fence.token !== expected.envelope.fence.token || |
79 | | - active.envelope.fence.generation !== expected.envelope.fence.generation |
80 | | - ) |
81 | | - return 'resource-changed'; |
82 | | - store.update(ref, (session) => slot.replace(session, undefined)); |
83 | | - retained = undefined; |
84 | | - return 'cleared'; |
| 53 | + if (session === undefined) throw new AppError('COMMAND_FAILED', 'Test session retired'); |
| 54 | + return session; |
85 | 55 | }, |
| 56 | + assertAdmissionOpen: () => {}, |
| 57 | + read: slot.read, |
| 58 | + write: (resource) => store.update(ref, (current) => slot.replace(current, resource)), |
86 | 59 | }); |
87 | 60 | } |
0 commit comments