@kraki/head 0.17.4 → 0.19.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 +9 -0
- package/dist/account-api.d.ts +6 -0
- package/dist/account-api.js +29 -0
- package/dist/account-api.js.map +1 -1
- package/dist/cli.js +14 -12
- package/dist/cli.js.map +1 -1
- package/dist/lease-issuer.d.ts +1 -1
- package/dist/lease-issuer.js +1 -1
- package/dist/local-auth-backend.d.ts +15 -0
- package/dist/local-auth-backend.js +11 -0
- package/dist/local-auth-backend.js.map +1 -1
- package/dist/pulse-hub.d.ts +13 -0
- package/dist/pulse-hub.js +26 -0
- package/dist/pulse-hub.js.map +1 -1
- package/dist/server.d.ts +7 -4
- package/dist/server.js +51 -12
- package/dist/server.js.map +1 -1
- package/dist/storage.d.ts +57 -15
- package/dist/storage.js +222 -61
- package/dist/storage.js.map +1 -1
- package/dist/voice-settlement.d.ts +5 -1
- package/dist/voice-settlement.js +12 -3
- package/dist/voice-settlement.js.map +1 -1
- package/package.json +4 -4
package/dist/storage.d.ts
CHANGED
|
@@ -37,6 +37,18 @@ export interface StoredRegion {
|
|
|
37
37
|
updatedAt: string;
|
|
38
38
|
lastSeenAt?: string;
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Audio a live broker connection may run ahead of its last usage report.
|
|
42
|
+
* The broker reports every 15 s while recording and each reply extends the
|
|
43
|
+
* allowance, so a recording never waits on Head; the chunk only bounds what a
|
|
44
|
+
* connection holds in reserve (and what it may use if Head is unreachable).
|
|
45
|
+
*/
|
|
46
|
+
export declare const VOICE_GRANT_CHUNK_SEC = 60;
|
|
47
|
+
/**
|
|
48
|
+
* Past its expiry a lease still gets grants for the recording in progress
|
|
49
|
+
* (the broker never cuts one off at expiry) for at most this long.
|
|
50
|
+
*/
|
|
51
|
+
export declare const VOICE_EXPIRY_OVERRUN_SEC = 900;
|
|
40
52
|
export declare class Storage {
|
|
41
53
|
private db;
|
|
42
54
|
/** Raw SQLite handle for adjacent subsystems (e.g. the pulse hub's own
|
|
@@ -118,32 +130,56 @@ export declare class Storage {
|
|
|
118
130
|
expiresAtUnixSec: number;
|
|
119
131
|
}): void;
|
|
120
132
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
133
|
+
* Voice seconds charged against a user's daily cap for the UTC day of
|
|
134
|
+
* `nowUnixSec`: audio reported today, plus the not-yet-used part of the
|
|
135
|
+
* allowance held by live connections (at most one grant chunk each), so
|
|
136
|
+
* concurrent devices can never jointly exceed the cap. `excludeJti` leaves
|
|
137
|
+
* one lease's reservation out (used when re-granting that lease).
|
|
125
138
|
*/
|
|
126
|
-
|
|
139
|
+
voiceSecondsAccountedToday(userId: string, nowUnixSec: number, excludeJti?: string): number;
|
|
127
140
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
|
|
132
|
-
|
|
141
|
+
* A device only ever holds one lease: when it asks for a new one, its
|
|
142
|
+
* earlier leases that never connected are abandoned. Revoke them so they can
|
|
143
|
+
* never be activated later.
|
|
144
|
+
*/
|
|
145
|
+
revokePendingVoiceLeases(userId: string, deviceId: string, resource: string, nowUnixSec: number): number;
|
|
146
|
+
/**
|
|
147
|
+
* Cumulative allowance for a lease that has reported `reported` seconds:
|
|
148
|
+
* `reported` plus what today's budget leaves (optionally at most one chunk),
|
|
149
|
+
* never above the signed per-lease ceiling.
|
|
150
|
+
*/
|
|
151
|
+
private voiceAllowance;
|
|
152
|
+
/**
|
|
153
|
+
* Activate a lease connection before the broker accepts recordings. The
|
|
154
|
+
* same activation id is an idempotent retry; a different one replaces the
|
|
155
|
+
* previous owner (last-writer-wins reconnect) and makes stale checkpoints
|
|
156
|
+
* fail closed. Returns the exact cumulative usage (to resume) and, with a
|
|
157
|
+
* daily cap, the cumulative allowance the broker must enforce: one grant
|
|
158
|
+
* chunk for brokers that renew grants on usage reports, otherwise all that
|
|
159
|
+
* today's budget leaves.
|
|
133
160
|
*/
|
|
134
161
|
activateVoiceLease(input: {
|
|
135
162
|
jti: string;
|
|
136
163
|
activationId: string;
|
|
137
164
|
activatedAtUnixSec?: number;
|
|
165
|
+
dailyCapSec?: number;
|
|
166
|
+
/** The broker renews the allowance through usage reports. */
|
|
167
|
+
grants?: boolean;
|
|
138
168
|
}): {
|
|
139
|
-
status: 'activated' | 'unchanged' | 'replaced' | 'expired' | '
|
|
169
|
+
status: 'activated' | 'unchanged' | 'replaced' | 'expired' | 'revoked' | 'quota_exhausted' | 'grants_required' | 'not_found';
|
|
140
170
|
reportedAudioSeconds?: number;
|
|
171
|
+
quotaSeconds?: number;
|
|
141
172
|
};
|
|
142
173
|
/**
|
|
143
|
-
* Store a monotonic cumulative usage checkpoint for one
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
174
|
+
* Store a monotonic cumulative usage checkpoint for one lease connection
|
|
175
|
+
* and charge the increase to the UTC day it is reported on. Equal values
|
|
176
|
+
* are idempotent; lower out-of-order retries are stale but harmless;
|
|
177
|
+
* checkpoints from a replaced activation are rejected. The broker's final
|
|
178
|
+
* report for a closing socket releases its reservation.
|
|
179
|
+
*
|
|
180
|
+
* With `grants`, a report from a live connection also renews its allowance
|
|
181
|
+
* (returned as `quotaSeconds`): one chunk ahead while today's budget lasts,
|
|
182
|
+
* nothing more once the lease is revoked or long past expiry.
|
|
147
183
|
*/
|
|
148
184
|
settleVoiceLease(input: {
|
|
149
185
|
jti: string;
|
|
@@ -151,11 +187,15 @@ export declare class Storage {
|
|
|
151
187
|
audioSeconds: number;
|
|
152
188
|
reason?: string;
|
|
153
189
|
settledAtUnixSec?: number;
|
|
190
|
+
dailyCapSec?: number;
|
|
191
|
+
grants?: boolean;
|
|
154
192
|
}): {
|
|
155
193
|
status: 'updated' | 'unchanged' | 'stale' | 'conflict' | 'not_found' | 'not_activated';
|
|
156
194
|
usedSeconds?: number;
|
|
157
195
|
reportedAudioSeconds?: number;
|
|
196
|
+
quotaSeconds?: number;
|
|
158
197
|
};
|
|
198
|
+
private chargeVoiceUsage;
|
|
159
199
|
/** Fetch a single lease by jti (audit / debug). Returns undefined if unknown. */
|
|
160
200
|
getVoiceLease(jti: string): {
|
|
161
201
|
jti: string;
|
|
@@ -172,6 +212,8 @@ export declare class Storage {
|
|
|
172
212
|
reportedAudioSeconds: number;
|
|
173
213
|
activationId: string | null;
|
|
174
214
|
activatedAt: string | null;
|
|
215
|
+
allowedSeconds: number | null;
|
|
216
|
+
closedAt: string | null;
|
|
175
217
|
} | undefined;
|
|
176
218
|
close(): void;
|
|
177
219
|
}
|
package/dist/storage.js
CHANGED
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { createHash, randomBytes } from 'crypto';
|
|
2
2
|
import Database from 'better-sqlite3';
|
|
3
|
-
const SCHEMA_VERSION =
|
|
3
|
+
const SCHEMA_VERSION = 12;
|
|
4
|
+
/**
|
|
5
|
+
* Audio a live broker connection may run ahead of its last usage report.
|
|
6
|
+
* The broker reports every 15 s while recording and each reply extends the
|
|
7
|
+
* allowance, so a recording never waits on Head; the chunk only bounds what a
|
|
8
|
+
* connection holds in reserve (and what it may use if Head is unreachable).
|
|
9
|
+
*/
|
|
10
|
+
export const VOICE_GRANT_CHUNK_SEC = 60;
|
|
11
|
+
/**
|
|
12
|
+
* Past its expiry a lease still gets grants for the recording in progress
|
|
13
|
+
* (the broker never cuts one off at expiry) for at most this long.
|
|
14
|
+
*/
|
|
15
|
+
export const VOICE_EXPIRY_OVERRUN_SEC = 900;
|
|
16
|
+
/**
|
|
17
|
+
* A connection past its overrun window can no longer be granted audio and the
|
|
18
|
+
* broker hard-stops it; keep reserving its last grant a little longer so a
|
|
19
|
+
* lost close report never frees budget the broker may still be using.
|
|
20
|
+
*/
|
|
21
|
+
const VOICE_RESERVATION_SLACK_SEC = 120;
|
|
22
|
+
const utcDay = (unixSec) => new Date(unixSec * 1000).toISOString().slice(0, 10);
|
|
23
|
+
/**
|
|
24
|
+
* Broker usage reasons emitted while the warm socket stays open (periodic
|
|
25
|
+
* checkpoints, reconnect takeover, end of one recording). Any other reason is
|
|
26
|
+
* the broker's forced final report for a closing socket.
|
|
27
|
+
*/
|
|
28
|
+
const VOICE_OPEN_USAGE_REASONS = new Set([
|
|
29
|
+
'checkpoint',
|
|
30
|
+
'connection_takeover',
|
|
31
|
+
'session_final',
|
|
32
|
+
'asr_open_failed',
|
|
33
|
+
'asr_error',
|
|
34
|
+
'asr_closed',
|
|
35
|
+
'asr_send_failed',
|
|
36
|
+
]);
|
|
4
37
|
export class Storage {
|
|
5
38
|
db;
|
|
6
39
|
/** Raw SQLite handle for adjacent subsystems (e.g. the pulse hub's own
|
|
@@ -219,6 +252,49 @@ export class Storage {
|
|
|
219
252
|
UPDATE voice_leases
|
|
220
253
|
SET reported_audio_seconds = COALESCE(used_seconds, 0)
|
|
221
254
|
WHERE reported_audio_seconds = 0 AND used_seconds IS NOT NULL
|
|
255
|
+
`);
|
|
256
|
+
}
|
|
257
|
+
if (currentVersion < 12) {
|
|
258
|
+
// Usage-time daily accounting. A lease is a long-lived credential; the
|
|
259
|
+
// budget is granted incrementally (`allowed_seconds`, a cumulative
|
|
260
|
+
// ceiling) and every reported second is charged to the UTC day it was
|
|
261
|
+
// reported on, so a recording crossing midnight splits naturally.
|
|
262
|
+
const columns = new Set(this.db.prepare('PRAGMA table_info(voice_leases)').all()
|
|
263
|
+
.map((column) => column.name));
|
|
264
|
+
if (!columns.has('allowed_seconds')) {
|
|
265
|
+
this.db.exec('ALTER TABLE voice_leases ADD COLUMN allowed_seconds REAL');
|
|
266
|
+
}
|
|
267
|
+
if (!columns.has('closed_at')) {
|
|
268
|
+
this.db.exec('ALTER TABLE voice_leases ADD COLUMN closed_at TEXT');
|
|
269
|
+
}
|
|
270
|
+
this.db.exec(`
|
|
271
|
+
CREATE TABLE IF NOT EXISTS voice_usage_daily (
|
|
272
|
+
user_id TEXT NOT NULL,
|
|
273
|
+
day TEXT NOT NULL,
|
|
274
|
+
seconds REAL NOT NULL DEFAULT 0,
|
|
275
|
+
PRIMARY KEY (user_id, day)
|
|
276
|
+
);
|
|
277
|
+
INSERT OR IGNORE INTO voice_usage_daily (user_id, day, seconds)
|
|
278
|
+
SELECT user_id, substr(issued_at, 1, 10),
|
|
279
|
+
SUM(MAX(COALESCE(reported_audio_seconds, 0), COALESCE(used_seconds, 0)))
|
|
280
|
+
FROM voice_leases GROUP BY user_id, substr(issued_at, 1, 10);
|
|
281
|
+
`);
|
|
282
|
+
// Close reports were not recorded before. Clients only request a new
|
|
283
|
+
// lease after closing the old socket, so a lease whose device later
|
|
284
|
+
// *activated* a newer lease is closed. Leases whose successor never
|
|
285
|
+
// connected keep reserving (their socket may still be recording).
|
|
286
|
+
this.db.exec(`
|
|
287
|
+
UPDATE voice_leases
|
|
288
|
+
SET closed_at = COALESCE(settled_at, activated_at, issued_at)
|
|
289
|
+
WHERE closed_at IS NULL AND activated_at IS NOT NULL AND EXISTS (
|
|
290
|
+
SELECT 1 FROM voice_leases newer
|
|
291
|
+
WHERE newer.user_id = voice_leases.user_id
|
|
292
|
+
AND newer.device_id = voice_leases.device_id
|
|
293
|
+
AND newer.resource = voice_leases.resource
|
|
294
|
+
AND newer.activated_at IS NOT NULL
|
|
295
|
+
AND (newer.activated_at, newer.issued_at, newer.jti)
|
|
296
|
+
> (voice_leases.activated_at, voice_leases.issued_at, voice_leases.jti)
|
|
297
|
+
)
|
|
222
298
|
`);
|
|
223
299
|
}
|
|
224
300
|
this.db.pragma(`user_version = ${SCHEMA_VERSION}`);
|
|
@@ -529,37 +605,62 @@ export class Storage {
|
|
|
529
605
|
`).run(input.jti, input.userId, input.deviceId, input.resource, input.quotaSeconds, issuedIso, expiresIso);
|
|
530
606
|
}
|
|
531
607
|
/**
|
|
532
|
-
*
|
|
533
|
-
*
|
|
534
|
-
*
|
|
535
|
-
*
|
|
608
|
+
* Voice seconds charged against a user's daily cap for the UTC day of
|
|
609
|
+
* `nowUnixSec`: audio reported today, plus the not-yet-used part of the
|
|
610
|
+
* allowance held by live connections (at most one grant chunk each), so
|
|
611
|
+
* concurrent devices can never jointly exceed the cap. `excludeJti` leaves
|
|
612
|
+
* one lease's reservation out (used when re-granting that lease).
|
|
536
613
|
*/
|
|
537
|
-
|
|
538
|
-
const
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
), 0) AS total
|
|
614
|
+
voiceSecondsAccountedToday(userId, nowUnixSec, excludeJti = '') {
|
|
615
|
+
const used = this.db.prepare(`
|
|
616
|
+
SELECT seconds FROM voice_usage_daily WHERE user_id = ? AND day = ?
|
|
617
|
+
`).get(userId, utcDay(nowUnixSec));
|
|
618
|
+
const reserved = this.db.prepare(`
|
|
619
|
+
SELECT COALESCE(SUM(MAX(0,
|
|
620
|
+
COALESCE(allowed_seconds, quota_seconds) - COALESCE(reported_audio_seconds, 0)
|
|
621
|
+
)), 0) AS total
|
|
546
622
|
FROM voice_leases
|
|
547
|
-
WHERE user_id = ? AND
|
|
548
|
-
|
|
549
|
-
|
|
623
|
+
WHERE user_id = ? AND jti != ?
|
|
624
|
+
AND activated_at IS NOT NULL AND closed_at IS NULL
|
|
625
|
+
AND unixepoch(expires_at) + ? > ?
|
|
626
|
+
`).get(userId, excludeJti, VOICE_EXPIRY_OVERRUN_SEC + VOICE_RESERVATION_SLACK_SEC, nowUnixSec);
|
|
627
|
+
return Math.ceil((Number(used?.seconds) || 0) + (Number(reserved.total) || 0));
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* A device only ever holds one lease: when it asks for a new one, its
|
|
631
|
+
* earlier leases that never connected are abandoned. Revoke them so they can
|
|
632
|
+
* never be activated later.
|
|
633
|
+
*/
|
|
634
|
+
revokePendingVoiceLeases(userId, deviceId, resource, nowUnixSec) {
|
|
635
|
+
return this.db.prepare(`
|
|
636
|
+
UPDATE voice_leases SET revoked_at = ?
|
|
637
|
+
WHERE user_id = ? AND device_id = ? AND resource = ?
|
|
638
|
+
AND activated_at IS NULL AND revoked_at IS NULL
|
|
639
|
+
`).run(new Date(nowUnixSec * 1000).toISOString(), userId, deviceId, resource).changes;
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* Cumulative allowance for a lease that has reported `reported` seconds:
|
|
643
|
+
* `reported` plus what today's budget leaves (optionally at most one chunk),
|
|
644
|
+
* never above the signed per-lease ceiling.
|
|
645
|
+
*/
|
|
646
|
+
voiceAllowance(lease, reported, nowUnixSec, dailyCapSec, chunkSec) {
|
|
647
|
+
const accounted = this.voiceSecondsAccountedToday(lease.user_id, nowUnixSec, lease.jti);
|
|
648
|
+
const budgetLeft = Math.max(0, dailyCapSec - accounted);
|
|
649
|
+
return Math.min(lease.quota_seconds, reported + Math.min(chunkSec, budgetLeft));
|
|
550
650
|
}
|
|
551
651
|
/**
|
|
552
|
-
* Activate a
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
*
|
|
652
|
+
* Activate a lease connection before the broker accepts recordings. The
|
|
653
|
+
* same activation id is an idempotent retry; a different one replaces the
|
|
654
|
+
* previous owner (last-writer-wins reconnect) and makes stale checkpoints
|
|
655
|
+
* fail closed. Returns the exact cumulative usage (to resume) and, with a
|
|
656
|
+
* daily cap, the cumulative allowance the broker must enforce: one grant
|
|
657
|
+
* chunk for brokers that renew grants on usage reports, otherwise all that
|
|
658
|
+
* today's budget leaves.
|
|
557
659
|
*/
|
|
558
660
|
activateVoiceLease(input) {
|
|
559
661
|
const nowUnixSec = input.activatedAtUnixSec ?? Math.floor(Date.now() / 1000);
|
|
560
|
-
const activationDay = new Date(nowUnixSec * 1000).toISOString().slice(0, 10);
|
|
561
662
|
const lease = this.db.prepare(`
|
|
562
|
-
SELECT activation_id, activated_at,
|
|
663
|
+
SELECT jti, user_id, quota_seconds, allowed_seconds, activation_id, activated_at,
|
|
563
664
|
unixepoch(expires_at) AS expires_at_unix, revoked_at,
|
|
564
665
|
COALESCE(reported_audio_seconds, 0) AS reported_audio_seconds
|
|
565
666
|
FROM voice_leases WHERE jti = ?
|
|
@@ -570,32 +671,65 @@ export class Storage {
|
|
|
570
671
|
return { status: 'revoked' };
|
|
571
672
|
if (lease.expires_at_unix <= nowUnixSec)
|
|
572
673
|
return { status: 'expired' };
|
|
573
|
-
if (lease.issued_at.slice(0, 10) !== activationDay)
|
|
574
|
-
return { status: 'wrong_day' };
|
|
575
674
|
const reportedAudioSeconds = Number(lease.reported_audio_seconds) || 0;
|
|
576
675
|
if (lease.activated_at !== null && lease.activation_id === input.activationId) {
|
|
577
|
-
return {
|
|
676
|
+
return {
|
|
677
|
+
status: 'unchanged',
|
|
678
|
+
reportedAudioSeconds,
|
|
679
|
+
quotaSeconds: lease.allowed_seconds ?? lease.quota_seconds,
|
|
680
|
+
};
|
|
578
681
|
}
|
|
579
|
-
|
|
682
|
+
let allowedSeconds = lease.quota_seconds;
|
|
683
|
+
if (input.dailyCapSec !== undefined) {
|
|
684
|
+
allowedSeconds = this.voiceAllowance(lease, reportedAudioSeconds, nowUnixSec, input.dailyCapSec, input.grants ? VOICE_GRANT_CHUNK_SEC : Number.POSITIVE_INFINITY);
|
|
685
|
+
if (!input.grants && lease.quota_seconds > input.dailyCapSec) {
|
|
686
|
+
// A broker that ignores grants would enforce the day-scale signed
|
|
687
|
+
// ceiling and let one socket exceed the cap: refuse (fail closed).
|
|
688
|
+
return { status: 'grants_required', reportedAudioSeconds };
|
|
689
|
+
}
|
|
690
|
+
if (!input.grants && allowedSeconds < lease.quota_seconds) {
|
|
691
|
+
return { status: 'quota_exhausted', reportedAudioSeconds };
|
|
692
|
+
}
|
|
693
|
+
if (allowedSeconds - reportedAudioSeconds < 1) {
|
|
694
|
+
if (lease.activated_at === null) {
|
|
695
|
+
// Never connected and now unusable: nobody should activate it later.
|
|
696
|
+
this.db.prepare(`
|
|
697
|
+
UPDATE voice_leases SET revoked_at = ? WHERE jti = ? AND activated_at IS NULL
|
|
698
|
+
`).run(new Date(nowUnixSec * 1000).toISOString(), input.jti);
|
|
699
|
+
}
|
|
700
|
+
return { status: 'quota_exhausted', reportedAudioSeconds };
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
// Last-writer-wins: the broker transfers a replaced same-process owner's
|
|
704
|
+
// unreported audio to the new owner (reported as connection_takeover).
|
|
705
|
+
// Assumes one broker process per lease; across processes a replaced
|
|
706
|
+
// socket could use at most its last grant chunk unaccounted.
|
|
580
707
|
this.db.prepare(`
|
|
581
|
-
UPDATE voice_leases
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
`).run(input.activationId,
|
|
708
|
+
UPDATE voice_leases
|
|
709
|
+
SET activation_id = ?, activated_at = ?, allowed_seconds = ?, closed_at = NULL
|
|
710
|
+
WHERE jti = ? AND revoked_at IS NULL AND unixepoch(expires_at) > ?
|
|
711
|
+
`).run(input.activationId, new Date(nowUnixSec * 1000).toISOString(), allowedSeconds, input.jti, nowUnixSec);
|
|
585
712
|
return {
|
|
586
713
|
status: lease.activated_at === null ? 'activated' : 'replaced',
|
|
587
714
|
reportedAudioSeconds,
|
|
715
|
+
quotaSeconds: allowedSeconds,
|
|
588
716
|
};
|
|
589
717
|
}
|
|
590
718
|
/**
|
|
591
|
-
* Store a monotonic cumulative usage checkpoint for one
|
|
592
|
-
*
|
|
593
|
-
*
|
|
594
|
-
*
|
|
719
|
+
* Store a monotonic cumulative usage checkpoint for one lease connection
|
|
720
|
+
* and charge the increase to the UTC day it is reported on. Equal values
|
|
721
|
+
* are idempotent; lower out-of-order retries are stale but harmless;
|
|
722
|
+
* checkpoints from a replaced activation are rejected. The broker's final
|
|
723
|
+
* report for a closing socket releases its reservation.
|
|
724
|
+
*
|
|
725
|
+
* With `grants`, a report from a live connection also renews its allowance
|
|
726
|
+
* (returned as `quotaSeconds`): one chunk ahead while today's budget lasts,
|
|
727
|
+
* nothing more once the lease is revoked or long past expiry.
|
|
595
728
|
*/
|
|
596
729
|
settleVoiceLease(input) {
|
|
597
730
|
const lease = this.db.prepare(`
|
|
598
|
-
SELECT quota_seconds, used_seconds, activation_id,
|
|
731
|
+
SELECT jti, user_id, quota_seconds, allowed_seconds, used_seconds, activation_id,
|
|
732
|
+
activated_at, closed_at, revoked_at, unixepoch(expires_at) AS expires_at_unix,
|
|
599
733
|
COALESCE(reported_audio_seconds, 0) AS reported_audio_seconds
|
|
600
734
|
FROM voice_leases WHERE jti = ?
|
|
601
735
|
`).get(input.jti);
|
|
@@ -603,34 +737,59 @@ export class Storage {
|
|
|
603
737
|
return { status: 'not_found' };
|
|
604
738
|
if (lease.activated_at === null)
|
|
605
739
|
return { status: 'not_activated' };
|
|
740
|
+
const nowUnixSec = input.settledAtUnixSec ?? Math.floor(Date.now() / 1000);
|
|
741
|
+
const nowIso = new Date(nowUnixSec * 1000).toISOString();
|
|
606
742
|
if (lease.activation_id !== input.activationId)
|
|
607
743
|
return { status: 'conflict' };
|
|
608
|
-
const
|
|
744
|
+
const closing = !VOICE_OPEN_USAGE_REASONS.has(input.reason ?? '');
|
|
609
745
|
const currentReported = Number(lease.reported_audio_seconds) || 0;
|
|
610
|
-
const
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
}
|
|
746
|
+
const reported = Math.min(lease.quota_seconds, Math.max(0, input.audioSeconds));
|
|
747
|
+
let status = 'unchanged';
|
|
748
|
+
let latestReported = currentReported;
|
|
749
|
+
this.db.transaction(() => {
|
|
750
|
+
if (reported > currentReported) {
|
|
751
|
+
status = 'updated';
|
|
752
|
+
latestReported = reported;
|
|
753
|
+
this.db.prepare(`
|
|
754
|
+
UPDATE voice_leases
|
|
755
|
+
SET reported_audio_seconds = ?, used_seconds = ?, settled_at = ?, settlement_reason = ?
|
|
756
|
+
WHERE jti = ? AND activation_id = ?
|
|
757
|
+
`).run(reported, Math.ceil(reported), nowIso, input.reason?.slice(0, 64) ?? null, input.jti, input.activationId);
|
|
758
|
+
this.chargeVoiceUsage(lease.user_id, nowUnixSec, reported - currentReported);
|
|
759
|
+
}
|
|
760
|
+
else if (reported < currentReported) {
|
|
761
|
+
status = 'stale';
|
|
762
|
+
}
|
|
763
|
+
// Closing is terminal for this activation; only a new activation
|
|
764
|
+
// (reconnect) reopens the lease.
|
|
765
|
+
if (closing && lease.closed_at === null) {
|
|
766
|
+
this.db.prepare('UPDATE voice_leases SET closed_at = ? WHERE jti = ?').run(nowIso, input.jti);
|
|
767
|
+
}
|
|
768
|
+
})();
|
|
769
|
+
let quotaSeconds;
|
|
770
|
+
if (input.grants && !closing && input.dailyCapSec !== undefined) {
|
|
771
|
+
const live = lease.revoked_at === null && lease.closed_at === null
|
|
772
|
+
&& nowUnixSec < lease.expires_at_unix + VOICE_EXPIRY_OVERRUN_SEC;
|
|
773
|
+
quotaSeconds = live
|
|
774
|
+
? this.voiceAllowance(lease, latestReported, nowUnixSec, input.dailyCapSec, VOICE_GRANT_CHUNK_SEC)
|
|
775
|
+
: latestReported;
|
|
776
|
+
this.db.prepare('UPDATE voice_leases SET allowed_seconds = ? WHERE jti = ?')
|
|
777
|
+
.run(quotaSeconds, input.jti);
|
|
624
778
|
}
|
|
625
|
-
|
|
626
|
-
|
|
779
|
+
return {
|
|
780
|
+
status,
|
|
781
|
+
usedSeconds: Math.max(lease.used_seconds ?? 0, Math.ceil(latestReported)),
|
|
782
|
+
reportedAudioSeconds: latestReported,
|
|
783
|
+
...(quotaSeconds !== undefined ? { quotaSeconds } : {}),
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
chargeVoiceUsage(userId, nowUnixSec, seconds) {
|
|
787
|
+
if (!(seconds > 0))
|
|
788
|
+
return;
|
|
627
789
|
this.db.prepare(`
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
AND COALESCE(reported_audio_seconds, 0) < ?
|
|
632
|
-
`).run(reportedAudioSeconds, usedSeconds, settledAt, input.reason?.slice(0, 64) ?? null, input.jti, input.activationId, reportedAudioSeconds);
|
|
633
|
-
return { status: 'updated', usedSeconds, reportedAudioSeconds };
|
|
790
|
+
INSERT INTO voice_usage_daily (user_id, day, seconds) VALUES (?, ?, ?)
|
|
791
|
+
ON CONFLICT (user_id, day) DO UPDATE SET seconds = seconds + excluded.seconds
|
|
792
|
+
`).run(userId, utcDay(nowUnixSec), seconds);
|
|
634
793
|
}
|
|
635
794
|
/** Fetch a single lease by jti (audit / debug). Returns undefined if unknown. */
|
|
636
795
|
getVoiceLease(jti) {
|
|
@@ -638,7 +797,7 @@ export class Storage {
|
|
|
638
797
|
SELECT jti, user_id, device_id, resource, quota_seconds, issued_at,
|
|
639
798
|
expires_at, revoked_at, used_seconds, settled_at, settlement_reason,
|
|
640
799
|
COALESCE(reported_audio_seconds, 0) AS reported_audio_seconds,
|
|
641
|
-
activation_id, activated_at
|
|
800
|
+
activation_id, activated_at, allowed_seconds, closed_at
|
|
642
801
|
FROM voice_leases WHERE jti = ?
|
|
643
802
|
`).get(jti);
|
|
644
803
|
if (!row)
|
|
@@ -658,6 +817,8 @@ export class Storage {
|
|
|
658
817
|
reportedAudioSeconds: Number(row.reported_audio_seconds) || 0,
|
|
659
818
|
activationId: row.activation_id,
|
|
660
819
|
activatedAt: row.activated_at,
|
|
820
|
+
allowedSeconds: row.allowed_seconds,
|
|
821
|
+
closedAt: row.closed_at,
|
|
661
822
|
};
|
|
662
823
|
}
|
|
663
824
|
// --- Cleanup ---
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,8 @@ export interface VoiceSettlementResponse {
|
|
|
7
7
|
status: number;
|
|
8
8
|
body: Record<string, unknown>;
|
|
9
9
|
}
|
|
10
|
-
export
|
|
10
|
+
export interface VoiceSettlementOptions {
|
|
11
|
+
/** Per-user daily voice cap; activations and usage reports are granted against it. */
|
|
12
|
+
dailyCapSec?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function handleVoiceSettlement(storage: Storage, settlementKey: string, request: VoiceSettlementRequest, options?: VoiceSettlementOptions): VoiceSettlementResponse;
|
package/dist/voice-settlement.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { safeEqual } from './auth.js';
|
|
2
|
-
export function handleVoiceSettlement(storage, settlementKey, request) {
|
|
2
|
+
export function handleVoiceSettlement(storage, settlementKey, request, options = {}) {
|
|
3
3
|
const token = request.authorization?.startsWith('Bearer ')
|
|
4
4
|
? request.authorization.slice(7)
|
|
5
5
|
: '';
|
|
@@ -23,21 +23,27 @@ export function handleVoiceSettlement(storage, settlementKey, request) {
|
|
|
23
23
|
const result = storage.activateVoiceLease({
|
|
24
24
|
jti: input.jti,
|
|
25
25
|
activationId: input.activationId,
|
|
26
|
+
dailyCapSec: options.dailyCapSec,
|
|
27
|
+
grants: input.grants === true,
|
|
26
28
|
});
|
|
27
29
|
if (result.status === 'not_found')
|
|
28
30
|
return { status: 404, body: { error: 'not_found' } };
|
|
29
31
|
if (result.status === 'expired')
|
|
30
32
|
return { status: 409, body: { error: 'lease_expired' } };
|
|
31
|
-
if (result.status === 'wrong_day')
|
|
32
|
-
return { status: 409, body: { error: 'lease_wrong_day' } };
|
|
33
33
|
if (result.status === 'revoked')
|
|
34
34
|
return { status: 409, body: { error: 'lease_revoked' } };
|
|
35
|
+
if (result.status === 'quota_exhausted')
|
|
36
|
+
return { status: 409, body: { error: 'quota_exhausted' } };
|
|
37
|
+
if (result.status === 'grants_required') {
|
|
38
|
+
return { status: 409, body: { error: 'broker_upgrade_required' } };
|
|
39
|
+
}
|
|
35
40
|
return {
|
|
36
41
|
status: 200,
|
|
37
42
|
body: {
|
|
38
43
|
ok: true,
|
|
39
44
|
activationStatus: result.status,
|
|
40
45
|
reportedAudioSeconds: result.reportedAudioSeconds ?? 0,
|
|
46
|
+
quotaSeconds: result.quotaSeconds,
|
|
41
47
|
},
|
|
42
48
|
};
|
|
43
49
|
}
|
|
@@ -50,6 +56,8 @@ export function handleVoiceSettlement(storage, settlementKey, request) {
|
|
|
50
56
|
activationId: input.activationId,
|
|
51
57
|
audioSeconds: input.audioSeconds,
|
|
52
58
|
reason: typeof input.reason === 'string' ? input.reason : undefined,
|
|
59
|
+
dailyCapSec: options.dailyCapSec,
|
|
60
|
+
grants: input.grants === true,
|
|
53
61
|
});
|
|
54
62
|
if (result.status === 'not_found') {
|
|
55
63
|
return { status: 404, body: { error: 'not_found' } };
|
|
@@ -67,6 +75,7 @@ export function handleVoiceSettlement(storage, settlementKey, request) {
|
|
|
67
75
|
usedSeconds: result.usedSeconds,
|
|
68
76
|
reportedAudioSeconds: result.reportedAudioSeconds,
|
|
69
77
|
settlementStatus: result.status,
|
|
78
|
+
...(result.quotaSeconds !== undefined ? { quotaSeconds: result.quotaSeconds } : {}),
|
|
70
79
|
},
|
|
71
80
|
};
|
|
72
81
|
}
|