| 174 | } |
| 175 | |
| 176 | const create = (request: Request, agent?: AgentV2.ID) => |
| 177 | EffectRuntime.uninterruptible( |
| 178 | EffectRuntime.gen(function* () { |
| 179 | const deferred = yield* Deferred.make<void, RejectedError | CorrectedError>() |
| 180 | const item = { request, agent, deferred } |
| 181 | if (pending.has(request.id)) return yield* EffectRuntime.die(`Duplicate pending permission ID: ${request.id}`) |
| 182 | pending.set(request.id, item) |
| 183 | yield* events |
| 184 | .publish(Event.Asked, request) |
| 185 | .pipe(EffectRuntime.onError(() => EffectRuntime.sync(() => pending.delete(request.id)))) |
| 186 | return item |
| 187 | }), |
| 188 | ) |
| 189 | |
| 190 | const ask = EffectRuntime.fn("PermissionV2.ask")(function* (input: AssertInput) { |
| 191 | const result = yield* evaluateInput(input) |