@@ -41,16 +41,16 @@ export type EventSerializePrecursor<K extends EventKind = EventKind> = [
41
41
export type AnyTag = Tag < string > ;
42
42
export type IndexedTag = Tag < AlphabetLetter > ;
43
43
44
- export type Tag < T extends string > = [ T , ...TagValueFor [ T ] ] ;
44
+ export type Tag < T extends string > = [ T , ...TagContentFor [ T ] ] ;
45
45
46
- export interface TagValueFor extends Record < string , TagValue > {
46
+ export interface TagContentFor extends Record < string , TagContent > {
47
47
// Event
48
48
"e" : [ EventId , RelayUrl ?] ;
49
49
// Public key
50
50
"p" : [ PublicKey , RelayUrl ?] ;
51
51
// (Maybe parameterized) replaceable event
52
52
"a" : [
53
- `${EventKind } :${PublicKey } :${TagValueFor [ "d" ] [ 0 ] } `,
53
+ `${EventKind } :${PublicKey } :${TagValueFor [ "d" ] } `,
54
54
RelayUrl ?,
55
55
] | [
56
56
`${EventKind } :${PublicKey } `,
@@ -61,7 +61,11 @@ export interface TagValueFor extends Record<string, TagValue> {
61
61
}
62
62
63
63
// TODO: Tighten the type of TagValue
64
- export type TagValue = ( string | undefined ) [ ] ;
64
+ export type TagContent = ( string | undefined ) [ ] ;
65
+
66
+ export type TagValueFor = {
67
+ [ T in keyof TagContentFor ] : TagContentFor [ T ] [ 0 ] ;
68
+ } ;
65
69
66
70
export interface TagFor extends Record < number , AnyTag > {
67
71
0 : AnyTag ;
@@ -101,7 +105,6 @@ export type EventMessage<K extends EventKind = EventKind> = [
101
105
] ;
102
106
export type OkMessage < B extends boolean = boolean > = [
103
107
"OK" ,
104
-
105
108
EventId ,
106
109
B ,
107
110
OkMessageBody < B > ,
@@ -123,17 +126,16 @@ export type OkMessageBodyPrefix =
123
126
| "error" ;
124
127
125
128
export type SubscriptionFilter <
126
- K extends EventKind = EventKind ,
127
- T extends AlphabetLetter = AlphabetLetter ,
129
+ Ks extends EventKind = EventKind ,
130
+ Ts extends AlphabetLetter = AlphabetLetter ,
128
131
> =
129
132
& {
130
133
ids ?: EventId [ ] ;
131
134
authors ?: PublicKey [ ] ;
132
- kinds ?: K [ ] ;
135
+ kinds ?: Ks [ ] ;
133
136
}
134
- // TODO: Restrict to 1 tag per filter
135
137
& {
136
- [ key in `#${T } `] ?: TagValueFor [ T ] [ ] ;
138
+ [ T in Ts as `#${T } `] ?: TagValueFor [ T ] [ ] ;
137
139
}
138
140
& {
139
141
since ?: Timestamp ;
0 commit comments