88 * @module
99 * @since 1.9.0
1010 */
11- import type {
12- KVNamespace ,
13- MessageSendRequest ,
14- Queue ,
15- } from "@cloudflare/workers-types" ;
11+ import type { MessageSendRequest , Queue } from "@cloudflare/workers-types" ;
1612import type {
1713 KvKey ,
1814 KvStore ,
@@ -27,6 +23,67 @@ interface KvMetadata {
2723 expires ?: number ;
2824}
2925
26+ interface WorkersKvNamespaceGetWithMetadataResult < Value , Metadata > {
27+ readonly value : Value | null ;
28+ readonly metadata : Metadata | null ;
29+ }
30+
31+ interface WorkersKvNamespaceListKey < Metadata , Key extends string = string > {
32+ readonly name : Key ;
33+ readonly expiration ?: number ;
34+ readonly metadata ?: Metadata ;
35+ }
36+
37+ interface WorkersKvNamespaceListResult < Metadata , Key extends string = string > {
38+ readonly list_complete : boolean ;
39+ readonly keys : readonly WorkersKvNamespaceListKey < Metadata , Key > [ ] ;
40+ readonly cursor ?: string ;
41+ }
42+
43+ interface WorkersKvNamespaceListOptions {
44+ readonly limit ?: number ;
45+ readonly prefix ?: string | null ;
46+ readonly cursor ?: string | null ;
47+ }
48+
49+ interface WorkersKvNamespacePutOptions {
50+ readonly expiration ?: number ;
51+ readonly expirationTtl ?: number ;
52+ readonly metadata ?: unknown ;
53+ }
54+
55+ /**
56+ * Minimal Cloudflare Workers KV binding shape used by this package.
57+ * Compatible with both `@cloudflare/workers-types` and `wrangler types`
58+ * generated declarations.
59+ * @since 2.0.12
60+ */
61+ export interface WorkersKvNamespaceLike < Key extends string = string > {
62+ get ( key : Key ) : Promise < string | null > ;
63+ get < ExpectedValue = unknown > (
64+ key : Key ,
65+ type : "json" ,
66+ ) : Promise < ExpectedValue | null > ;
67+ getWithMetadata < Metadata = unknown > (
68+ key : Key ,
69+ ) : Promise < WorkersKvNamespaceGetWithMetadataResult < string , Metadata > > ;
70+ getWithMetadata < ExpectedValue = unknown , Metadata = unknown > (
71+ key : Key ,
72+ type : "json" ,
73+ ) : Promise <
74+ WorkersKvNamespaceGetWithMetadataResult < ExpectedValue , Metadata >
75+ > ;
76+ put (
77+ key : Key ,
78+ value : string ,
79+ options ?: WorkersKvNamespacePutOptions ,
80+ ) : Promise < void > ;
81+ delete ( key : Key ) : Promise < void > ;
82+ list < Metadata = unknown > (
83+ options ?: WorkersKvNamespaceListOptions ,
84+ ) : Promise < WorkersKvNamespaceListResult < Metadata , Key > > ;
85+ }
86+
3087/**
3188 * Internal message wrapper that includes ordering key metadata.
3289 */
@@ -74,9 +131,9 @@ export interface ProcessMessageResult {
74131 * @since 1.9.0
75132 */
76133export class WorkersKvStore implements KvStore {
77- #namespace: KVNamespace < string > ;
134+ #namespace: WorkersKvNamespaceLike < string > ;
78135
79- constructor ( namespace : KVNamespace < string > ) {
136+ constructor ( namespace : WorkersKvNamespaceLike < string > ) {
80137 this . #namespace = namespace ;
81138 }
82139
@@ -202,7 +259,7 @@ export interface WorkersMessageQueueOptions {
202259 * guarantees are best-effort. For strict ordering requirements, consider
203260 * using Durable Objects.
204261 */
205- readonly orderingKv ?: KVNamespace < string > ;
262+ readonly orderingKv ?: WorkersKvNamespaceLike < string > ;
206263
207264 /**
208265 * The prefix for ordering key lock keys. Defaults to `"__fedify_ordering_"`.
@@ -233,7 +290,7 @@ export interface WorkersMessageQueueOptions {
233290 */
234291export class WorkersMessageQueue implements MessageQueue {
235292 #queue: Queue ;
236- #orderingKv?: KVNamespace < string > ;
293+ #orderingKv?: WorkersKvNamespaceLike < string > ;
237294 #orderingKeyPrefix: string ;
238295 #orderingLockTtl: number ;
239296
0 commit comments