@ouispec/agent-realtime 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/approvals/routes.d.ts +2 -0
- package/dist/approvals/routes.d.ts.map +1 -1
- package/dist/approvals/routes.js +21 -0
- package/dist/approvals/routes.js.map +1 -1
- package/dist/approvals/store.d.ts +16 -2
- package/dist/approvals/store.d.ts.map +1 -1
- package/dist/approvals/store.js +90 -12
- package/dist/approvals/store.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -63,6 +63,7 @@ All of them require the `x-api-key` header.
|
|
|
63
63
|
| `POST /internal/approvals/:id/decide` `{ userId, decision, channel }` | A conversation channel's decision (`voice`, `phone`, `sms`, `chat`), made by the engine for the session's user. A `ui` decision is refused here: in a UI only the user's click counts. |
|
|
64
64
|
| `POST /internal/approvals/redeem` `{ token, userId, conversationId }` | Atomic single use. `200 { call }` returns exactly the stored call. `403` for a token this environment did not sign, another user's or conversation's, or one not for the stored call; `410` for an expired or already used one. |
|
|
65
65
|
| `GET /internal/approvals/:id?userId=` | Where an approval of this user's stands: `pending`, `approved` or `declined` (remembered for 30 minutes). |
|
|
66
|
+
| `POST /internal/approvals/:id/settle` `{ userId, conversationId, confirm? }` | Whether an approval a conversation still shows as waiting expired with nobody deciding it. Always `200 { approvalId, outcome, expiresAt? }`: `claimed` (it expired without having run, and this caller holds the claim to store that, for two minutes; `decided: "approved"` when the user had approved it and it was never used), `already` (another turn holds the claim, or it is stored), `open` (pending, or approved and not yet used), `unknown` (declined, used, another user's or conversation's, or not remembered). With `confirm: true`, the caller has stored it and the claim becomes permanent: `confirmed`. |
|
|
66
67
|
| `GET /internal/events/settlements/:kind/:id?waitMs=` | How a job of a declared kind ended: `{ kind, role, event, id, payload }`, with `role` `completion` or `failure`. `204` means not yet; `400` an undeclared kind; `404` a server without `events`. A wait lasts at most 25 s. |
|
|
67
68
|
| `GET /health` | Returns `200` with connection and pending-wait counts. No key needed. |
|
|
68
69
|
|
|
@@ -72,6 +73,8 @@ All of them require the `x-api-key` header.
|
|
|
72
73
|
2. The user clicks the approval card. Their socket sends `approval:decide { approvalId, decision }`, a declared client event. The store checks that the socket's verified user is the approval's own. An approval's token is answered only to that socket, in the ack: `{ ok: true, decision: 'approve', token, argsHash, expiresAt }`.
|
|
73
74
|
3. The next turn carries the token outside the message text. The worker redeems it, and the store returns the stored call exactly once.
|
|
74
75
|
|
|
76
|
+
An approval nobody decides sends nothing when it expires, so a later turn settles it. The store remembers, for 30 days, that an approval was asked for and is still undecided; a decline or a redemption removes that memory in the same step. Once the approval's own keys have lapsed in Redis, `POST /internal/approvals/:id/settle` answers that it expired undecided, and gives the claim to store that to one caller at a time. Expiry is Redis's clock: neither this server's nor the caller's is consulted. Approvals stored before this memory existed are answered `unknown`.
|
|
77
|
+
|
|
75
78
|
A declined approval is deleted and remembered for the next turn. Every issue, decision and redemption is logged with the approval id, user, tool, effect, channel and args hash. The arguments are logged only when their declaration marks them not sensitive, and a token never is.
|
|
76
79
|
|
|
77
80
|
The token's claims are `aid sub cid tool ah eff ch iat exp jti`. `ah` is `argsHash(args)` from `@ouispec/agent-core`: SHA-256 over the RFC 8785 canonical JSON. The package ships `approval-vectors.json`, which every other implementation must match.
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* POST /internal/approvals/:id/decide a conversation channel's decision (engine)
|
|
9
9
|
* POST /internal/approvals/redeem atomic single use (worker, engine)
|
|
10
10
|
* GET /internal/approvals/:id?userId= where an approval stands (worker, for the turn after a decision)
|
|
11
|
+
* POST /internal/approvals/:id/settle whether it expired undecided, claimed for one turn to store; with
|
|
12
|
+
* `confirm`, that it has been stored (worker, at the start of a later turn)
|
|
11
13
|
*/
|
|
12
14
|
import { Router } from 'express';
|
|
13
15
|
import type { ApprovalStore } from './store.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/approvals/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/approvals/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;CAC3D;AAkBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA6F9D"}
|
package/dist/approvals/routes.js
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* POST /internal/approvals/:id/decide a conversation channel's decision (engine)
|
|
9
9
|
* POST /internal/approvals/redeem atomic single use (worker, engine)
|
|
10
10
|
* GET /internal/approvals/:id?userId= where an approval stands (worker, for the turn after a decision)
|
|
11
|
+
* POST /internal/approvals/:id/settle whether it expired undecided, claimed for one turn to store; with
|
|
12
|
+
* `confirm`, that it has been stored (worker, at the start of a later turn)
|
|
11
13
|
*/
|
|
12
14
|
import { Router } from 'express';
|
|
13
15
|
import { internalDecideSchema, pendingApprovalSchema, redeemSchema } from './schemas.js';
|
|
@@ -78,6 +80,25 @@ export function approvalRouter(deps) {
|
|
|
78
80
|
}
|
|
79
81
|
res.json(result);
|
|
80
82
|
});
|
|
83
|
+
router.post('/internal/approvals/:id/settle', async (req, res) => {
|
|
84
|
+
if (!deps.isInternalKey(req.headers['x-api-key'])) {
|
|
85
|
+
res.status(401).json({ error: 'Invalid or missing API key' });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const body = (req.body ?? {});
|
|
89
|
+
if (typeof body.userId !== 'string' || !body.userId || typeof body.conversationId !== 'string' || !body.conversationId) {
|
|
90
|
+
res.status(400).json({ error: 'userId and conversationId are required' });
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const approvalId = req.params.id;
|
|
94
|
+
const owner = { userId: body.userId, conversationId: body.conversationId };
|
|
95
|
+
// Always 200: `unknown` is an answer, and a worker must tell it from a server that has no such route (404).
|
|
96
|
+
if (body.confirm === true) {
|
|
97
|
+
res.json({ approvalId, outcome: (await deps.approvals.confirmExpirySettled(approvalId, owner)) ? 'confirmed' : 'unknown' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
res.json(await deps.approvals.settleExpired(approvalId, owner));
|
|
101
|
+
});
|
|
81
102
|
router.get('/internal/approvals/:id', async (req, res) => {
|
|
82
103
|
if (!deps.isInternalKey(req.headers['x-api-key'])) {
|
|
83
104
|
res.status(401).json({ error: 'Invalid or missing API key' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/approvals/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/approvals/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ApprovalChannel, type ApprovalDecideResult, type ApprovalDecision, type ApprovalRedeemResult, type ApprovalRefusal, type ApprovalStatus, type PendingApprovalInput } from '@ouispec/agent-core';
|
|
1
|
+
import { type ApprovalChannel, type ApprovalDecideResult, type ApprovalDecision, type ApprovalOwner, type ApprovalRedeemResult, type ApprovalRefusal, type ApprovalSettlement, type ApprovalStatus, type PendingApprovalInput } from '@ouispec/agent-core';
|
|
2
2
|
import type { RealtimeLogger } from '../logger.js';
|
|
3
3
|
import type { ApprovalTokenSigner } from './token.js';
|
|
4
4
|
/** The Redis command the store uses. ioredis satisfies it. */
|
|
@@ -26,8 +26,22 @@ export interface ApprovalStore {
|
|
|
26
26
|
}): Promise<ApprovalRedeemResult>;
|
|
27
27
|
/** Where an approval of this user's stands, or null when it is not theirs or not known. */
|
|
28
28
|
status(approvalId: string, userId: string): Promise<ApprovalStatus | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Settle an approval a conversation still shows as waiting: whether it
|
|
31
|
+
* expired undecided, and whether this caller holds the claim to store that.
|
|
32
|
+
* One script, so of two turns asking together exactly one is `claimed`.
|
|
33
|
+
* Expiry is the approval's keys lapsing in Redis: this server's clock is
|
|
34
|
+
* not consulted, and nor is the caller's.
|
|
35
|
+
*/
|
|
36
|
+
settleExpired(approvalId: string, owner: ApprovalOwner): Promise<ApprovalSettlement>;
|
|
37
|
+
/** The claimed expiry is stored: the claim no longer lapses. False when the store does not know the approval as this owner's. */
|
|
38
|
+
confirmExpirySettled(approvalId: string, owner: ApprovalOwner): Promise<boolean>;
|
|
29
39
|
}
|
|
30
40
|
/** How long a decline is remembered for the turn that follows it. */
|
|
31
41
|
export declare const DECLINED_TTL_SEC: number;
|
|
32
|
-
export
|
|
42
|
+
export interface ApprovalStoreOptions {
|
|
43
|
+
/** How long a turn's claim on an expiry lasts unconfirmed. Default `EXPIRY_CLAIM_LEASE_MS`; shorter in tests. */
|
|
44
|
+
expiryClaimLeaseMs?: number;
|
|
45
|
+
}
|
|
46
|
+
export declare function createApprovalStore(redis: ApprovalRedis, signer: ApprovalTokenSigner, logger: RealtimeLogger, options?: ApprovalStoreOptions): ApprovalStore;
|
|
33
47
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/approvals/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/approvals/store.ts"],"names":[],"mappings":"AA6BA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC,CAAC;IACtI,sFAAsF;IACtF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxI,8GAA8G;IAC9G,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzG,2FAA2F;IAC3F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3E;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrF,iIAAiI;IACjI,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF;AAED,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,QAAU,CAAC;AAoHxC,MAAM,WAAW,oBAAoB;IACnC,iHAAiH;IACjH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAwNf"}
|
package/dist/approvals/store.js
CHANGED
|
@@ -8,6 +8,17 @@
|
|
|
8
8
|
* conversationId, tool, argsHash, expiresAt, and
|
|
9
9
|
* once approved the token's jti and the channel
|
|
10
10
|
* approval:declined:{id} → what the next turn tells the model, 30 min
|
|
11
|
+
* approval:{id}:seen → that it was asked for and has not run or been
|
|
12
|
+
* declined (userId, conversationId, expiresAt,
|
|
13
|
+
* and `decided: approved` once the user has
|
|
14
|
+
* approved it): written with the approval,
|
|
15
|
+
* rewritten in the script that approves it,
|
|
16
|
+
* removed in the script that declines or redeems
|
|
17
|
+
* it, and kept 30 days past its expiry. Present
|
|
18
|
+
* with the approval gone, it expired without
|
|
19
|
+
* having run: undecided, or approved and unused.
|
|
20
|
+
* approval:{id}:settled → a turn's claim to store that expiry: a two
|
|
21
|
+
* minute lease, permanent once confirmed
|
|
11
22
|
*
|
|
12
23
|
* Each decision and each redemption is one Lua script, so two instances can
|
|
13
24
|
* never both approve one call, or both redeem one token. The stored call is
|
|
@@ -16,22 +27,29 @@
|
|
|
16
27
|
* exactly the one the user approved.
|
|
17
28
|
*/
|
|
18
29
|
import crypto from 'node:crypto';
|
|
19
|
-
import { argsHash as hashOf, MAX_APPROVAL_TTL_MS, } from '@ouispec/agent-core';
|
|
30
|
+
import { argsHash as hashOf, EXPIRED_APPROVAL_MEMORY_MS, EXPIRY_CLAIM_LEASE_MS, MAX_APPROVAL_TTL_MS, } from '@ouispec/agent-core';
|
|
20
31
|
/** How long a decline is remembered for the turn that follows it. */
|
|
21
32
|
export const DECLINED_TTL_SEC = 30 * 60;
|
|
22
33
|
const recordKey = (id) => `approval:${id}`;
|
|
23
34
|
const stateKey = (id) => `approval:${id}:state`;
|
|
24
35
|
const declinedKey = (id) => `approval:declined:${id}`;
|
|
25
|
-
|
|
26
|
-
|
|
36
|
+
const seenKey = (id) => `approval:${id}:seen`;
|
|
37
|
+
const settledKey = (id) => `approval:${id}:settled`;
|
|
38
|
+
// KEYS: record, state, declined, seen, settled. ARGV: record JSON, ttl ms, userId, conversationId, tool, argsHash,
|
|
39
|
+
// expiresAt, seen JSON, seen ttl ms.
|
|
40
|
+
// A new approval supersedes an old decline under the same id, and an old expiry's settlement.
|
|
27
41
|
const CREATE = `
|
|
28
42
|
if redis.call('EXISTS', KEYS[1]) == 1 or redis.call('EXISTS', KEYS[2]) == 1 then return 'exists' end
|
|
29
|
-
redis.call('DEL', KEYS[3])
|
|
43
|
+
redis.call('DEL', KEYS[3], KEYS[5])
|
|
44
|
+
redis.call('SET', KEYS[4], ARGV[8], 'PX', ARGV[9])
|
|
30
45
|
redis.call('SET', KEYS[1], ARGV[1], 'PX', ARGV[2])
|
|
31
46
|
redis.call('HSET', KEYS[2], 'status', 'pending', 'userId', ARGV[3], 'conversationId', ARGV[4], 'tool', ARGV[5], 'argsHash', ARGV[6], 'expiresAt', ARGV[7])
|
|
32
47
|
redis.call('PEXPIRE', KEYS[2], ARGV[2])
|
|
33
48
|
return 'ok'`;
|
|
34
|
-
// KEYS: state, record, declined. ARGV: userId, decision, now ms, jti, channel, declined ttl s, declined JSON
|
|
49
|
+
// KEYS: state, record, declined, seen. ARGV: userId, decision, now ms, jti, channel, declined ttl s, declined JSON,
|
|
50
|
+
// seen JSON once approved.
|
|
51
|
+
// A decline decides it: it is no longer something that can expire. An approval is recorded in the
|
|
52
|
+
// memory (same TTL), so if the approved call is never run its expiry is not told as "undecided".
|
|
35
53
|
const DECIDE = `
|
|
36
54
|
if redis.call('EXISTS', KEYS[1]) == 0 then return {'unknown'} end
|
|
37
55
|
local s = redis.call('HMGET', KEYS[1], 'status', 'userId', 'expiresAt')
|
|
@@ -41,12 +59,14 @@ if tonumber(ARGV[3]) >= tonumber(s[3]) then return {'expired'} end
|
|
|
41
59
|
local record = redis.call('GET', KEYS[2])
|
|
42
60
|
if ARGV[2] == 'approve' then
|
|
43
61
|
redis.call('HSET', KEYS[1], 'status', 'approved', 'jti', ARGV[4], 'channel', ARGV[5])
|
|
62
|
+
if redis.call('EXISTS', KEYS[4]) == 1 then redis.call('SET', KEYS[4], ARGV[8], 'KEEPTTL') end
|
|
44
63
|
return {'approved', record}
|
|
45
64
|
end
|
|
46
|
-
redis.call('DEL', KEYS[1], KEYS[2])
|
|
65
|
+
redis.call('DEL', KEYS[1], KEYS[2], KEYS[4])
|
|
47
66
|
redis.call('SET', KEYS[3], ARGV[7], 'EX', ARGV[6])
|
|
48
67
|
return {'declined', record}`;
|
|
49
|
-
// KEYS: state, record. ARGV: jti, argsHash, tool, userId, conversationId.
|
|
68
|
+
// KEYS: state, record, seen. ARGV: jti, argsHash, tool, userId, conversationId.
|
|
69
|
+
// A redemption uses it: it did not expire undecided.
|
|
50
70
|
const REDEEM = `
|
|
51
71
|
if redis.call('EXISTS', KEYS[1]) == 0 then return {'used'} end
|
|
52
72
|
local s = redis.call('HMGET', KEYS[1], 'status', 'jti', 'argsHash', 'tool', 'userId', 'conversationId', 'channel')
|
|
@@ -54,8 +74,37 @@ if s[1] ~= 'approved' or s[2] ~= ARGV[1] or s[3] ~= ARGV[2] or s[4] ~= ARGV[3] o
|
|
|
54
74
|
return {'mismatch'}
|
|
55
75
|
end
|
|
56
76
|
local record = redis.call('GET', KEYS[2])
|
|
57
|
-
redis.call('DEL', KEYS[1], KEYS[2])
|
|
77
|
+
redis.call('DEL', KEYS[1], KEYS[2], KEYS[3])
|
|
58
78
|
return {'ok', record, s[7]}`;
|
|
79
|
+
// KEYS: state, seen, settled. ARGV: userId, conversationId, lease ms.
|
|
80
|
+
// The approval's own keys lapse in Redis at its expiry, so "state gone, seen present" is this
|
|
81
|
+
// server's Redis saying it expired undecided. The claim is one SET NX: exactly one caller gets it,
|
|
82
|
+
// and it lapses unless confirmed.
|
|
83
|
+
const SETTLE = `
|
|
84
|
+
if redis.call('EXISTS', KEYS[1]) == 1 then
|
|
85
|
+
local o = redis.call('HMGET', KEYS[1], 'userId', 'conversationId')
|
|
86
|
+
if o[1] ~= ARGV[1] or o[2] ~= ARGV[2] then return {'unknown'} end
|
|
87
|
+
return {'open'}
|
|
88
|
+
end
|
|
89
|
+
local seen = redis.call('GET', KEYS[2])
|
|
90
|
+
if not seen then return {'unknown'} end
|
|
91
|
+
local m = cjson.decode(seen)
|
|
92
|
+
if m['userId'] ~= ARGV[1] or m['conversationId'] ~= ARGV[2] then return {'unknown'} end
|
|
93
|
+
if redis.call('SET', KEYS[3], 'lease', 'NX', 'PX', ARGV[3]) then return {'claimed', seen} end
|
|
94
|
+
return {'already', seen}`;
|
|
95
|
+
// KEYS: state, seen, settled. ARGV: userId, conversationId, memory ms.
|
|
96
|
+
// The expiry is stored in the conversation: the claim stays for as long as the memory of the approval does.
|
|
97
|
+
// A confirmation with no live claim (the lease lapsed while the host was storing) is still kept, and said.
|
|
98
|
+
const CONFIRM = `
|
|
99
|
+
if redis.call('EXISTS', KEYS[1]) == 1 then return 'unknown' end
|
|
100
|
+
local seen = redis.call('GET', KEYS[2])
|
|
101
|
+
if not seen then return 'unknown' end
|
|
102
|
+
local m = cjson.decode(seen)
|
|
103
|
+
if m['userId'] ~= ARGV[1] or m['conversationId'] ~= ARGV[2] then return 'unknown' end
|
|
104
|
+
local claimed = redis.call('EXISTS', KEYS[3])
|
|
105
|
+
redis.call('SET', KEYS[3], 'confirmed', 'PX', ARGV[3])
|
|
106
|
+
if claimed == 1 then return 'confirmed' end
|
|
107
|
+
return 'unclaimed'`;
|
|
59
108
|
// KEYS: state, record, declined. ARGV: userId. A live approval first, then a remembered decline.
|
|
60
109
|
const STATUS = `
|
|
61
110
|
if redis.call('EXISTS', KEYS[1]) == 1 then
|
|
@@ -75,7 +124,8 @@ const REFUSALS = {
|
|
|
75
124
|
used: 'this approval has already been used',
|
|
76
125
|
mismatch: 'this token is not for the stored call',
|
|
77
126
|
};
|
|
78
|
-
export function createApprovalStore(redis, signer, logger) {
|
|
127
|
+
export function createApprovalStore(redis, signer, logger, options = {}) {
|
|
128
|
+
const expiryClaimLeaseMs = options.expiryClaimLeaseMs ?? EXPIRY_CLAIM_LEASE_MS;
|
|
79
129
|
/** An approval as this user may see it. */
|
|
80
130
|
async function read(approvalId, userId) {
|
|
81
131
|
const [status, raw] = ((await redis.eval(STATUS, 3, stateKey(approvalId), recordKey(approvalId), declinedKey(approvalId), userId)) ??
|
|
@@ -117,7 +167,8 @@ export function createApprovalStore(redis, signer, logger) {
|
|
|
117
167
|
}
|
|
118
168
|
if (computed !== input.argsHash)
|
|
119
169
|
return refusal('invalid', 'argsHash does not match the arguments');
|
|
120
|
-
const
|
|
170
|
+
const seen = { userId: input.userId, conversationId: input.conversationId, expiresAt: input.expiresAt };
|
|
171
|
+
const result = await redis.eval(CREATE, 5, recordKey(input.approvalId), stateKey(input.approvalId), declinedKey(input.approvalId), seenKey(input.approvalId), settledKey(input.approvalId), JSON.stringify(input), input.expiresAt - now, input.userId, input.conversationId, input.tool, input.argsHash, input.expiresAt, JSON.stringify(seen), input.expiresAt - now + EXPIRED_APPROVAL_MEMORY_MS);
|
|
121
172
|
if (result !== 'ok')
|
|
122
173
|
return refusal('decided', `an approval ${input.approvalId} already exists`);
|
|
123
174
|
logger.info(audit(input, { expiresAt: input.expiresAt }), 'Approval stored');
|
|
@@ -133,7 +184,11 @@ export function createApprovalStore(redis, signer, logger) {
|
|
|
133
184
|
tool: seen.kind === 'open' ? seen.pending.tool : '',
|
|
134
185
|
title: seen.kind === 'open' ? seen.pending.preview.title : '',
|
|
135
186
|
};
|
|
136
|
-
const [outcome, raw] = (await redis.eval(DECIDE,
|
|
187
|
+
const [outcome, raw] = (await redis.eval(DECIDE, 4, stateKey(approvalId), recordKey(approvalId), declinedKey(approvalId), seenKey(approvalId), userId, decision, Date.now(), jti, channel, DECLINED_TTL_SEC, JSON.stringify(declined),
|
|
188
|
+
// The memory of the approval once it is approved: written by the script, never re-encoded in Lua.
|
|
189
|
+
seen.kind === 'open'
|
|
190
|
+
? JSON.stringify({ userId: seen.pending.userId, conversationId: seen.pending.conversationId, expiresAt: seen.pending.expiresAt, decided: 'approved' })
|
|
191
|
+
: ''));
|
|
137
192
|
if (outcome !== 'approved' && outcome !== 'declined') {
|
|
138
193
|
logger.warn({ approvalId, userId, decision, channel, reason: outcome }, 'Approval decision refused');
|
|
139
194
|
return refusal(outcome, REFUSALS[outcome] ?? outcome);
|
|
@@ -170,7 +225,7 @@ export function createApprovalStore(redis, signer, logger) {
|
|
|
170
225
|
logger.warn({ ...context, tokenUser: claims.sub, reason: 'forbidden' }, 'Approval redemption refused');
|
|
171
226
|
return refusal('forbidden', "this approval is another user's or another conversation's");
|
|
172
227
|
}
|
|
173
|
-
const [outcome, raw, channel] = (await redis.eval(REDEEM,
|
|
228
|
+
const [outcome, raw, channel] = (await redis.eval(REDEEM, 3, stateKey(claims.aid), recordKey(claims.aid), seenKey(claims.aid), claims.jti, claims.ah, claims.tool, claims.sub, claims.cid));
|
|
174
229
|
if (outcome !== 'ok') {
|
|
175
230
|
logger.warn({ ...context, reason: outcome }, 'Approval redemption refused');
|
|
176
231
|
return refusal(outcome, REFUSALS[outcome] ?? outcome);
|
|
@@ -201,6 +256,29 @@ export function createApprovalStore(redis, signer, logger) {
|
|
|
201
256
|
return { approvalId, status: seen.status, tool: seen.pending.tool, title: seen.pending.preview.title };
|
|
202
257
|
return null;
|
|
203
258
|
},
|
|
259
|
+
async settleExpired(approvalId, { userId, conversationId }) {
|
|
260
|
+
const [outcome, raw] = ((await redis.eval(SETTLE, 3, stateKey(approvalId), seenKey(approvalId), settledKey(approvalId), userId, conversationId, expiryClaimLeaseMs)) ?? []);
|
|
261
|
+
if (outcome === 'open')
|
|
262
|
+
return { approvalId, outcome };
|
|
263
|
+
if ((outcome === 'claimed' || outcome === 'already') && raw) {
|
|
264
|
+
const { expiresAt, decided } = JSON.parse(raw);
|
|
265
|
+
if (outcome === 'claimed') {
|
|
266
|
+
logger.info({ approvalId, userId, conversationId, expiresAt, decided: decided ?? null }, 'Approval expired without running: claimed for a turn to store');
|
|
267
|
+
}
|
|
268
|
+
return { approvalId, outcome, expiresAt, ...(decided === 'approved' ? { decided } : {}) };
|
|
269
|
+
}
|
|
270
|
+
return { approvalId, outcome: 'unknown' };
|
|
271
|
+
},
|
|
272
|
+
async confirmExpirySettled(approvalId, { userId, conversationId }) {
|
|
273
|
+
const outcome = await redis.eval(CONFIRM, 3, stateKey(approvalId), seenKey(approvalId), settledKey(approvalId), userId, conversationId, EXPIRED_APPROVAL_MEMORY_MS);
|
|
274
|
+
if (outcome === 'confirmed')
|
|
275
|
+
logger.info({ approvalId, userId, conversationId }, 'Approval expiry stored in the conversation');
|
|
276
|
+
if (outcome === 'unclaimed') {
|
|
277
|
+
// The turn's claim had lapsed before it confirmed: another turn may have claimed and stored the expiry too.
|
|
278
|
+
logger.warn({ approvalId, userId, conversationId }, 'Approval expiry confirmed with no live claim: the lease had lapsed, so it may be stored twice');
|
|
279
|
+
}
|
|
280
|
+
return outcome === 'confirmed' || outcome === 'unclaimed';
|
|
281
|
+
},
|
|
204
282
|
};
|
|
205
283
|
}
|
|
206
284
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/approvals/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/approvals/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ouispec/agent-realtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Realtime server for agent turns and UI actions — declared client events, room tokens, the UI action result store, the approval store, declared product events and their job settlements, Redis fan-out; the product supplies auth, room policy and keys",
|
|
5
5
|
"homepage": "https://github.com/wesreid/oui/tree/main/packages/agent-realtime#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"ioredis": "^5.6.0",
|
|
38
38
|
"joi": "^17.13.3",
|
|
39
39
|
"socket.io": "^4.8.0",
|
|
40
|
-
"@ouispec/agent-core": "^0.
|
|
41
|
-
"@ouispec/agent-events": "^0.2.
|
|
42
|
-
"oui-spec": "^0.
|
|
40
|
+
"@ouispec/agent-core": "^0.4.0",
|
|
41
|
+
"@ouispec/agent-events": "^0.2.2",
|
|
42
|
+
"oui-spec": "^0.8.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/cors": "^2.8.0",
|