@pomade/core 0.0.8 → 0.0.11
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/dist/client.d.ts +13 -31
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +67 -54
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/message.d.ts +1 -0
- package/dist/message.d.ts.map +1 -1
- package/dist/pomade-signer.d.ts +21 -0
- package/dist/pomade-signer.d.ts.map +1 -0
- package/dist/pomade-signer.js +54 -0
- package/dist/pomade-signer.js.map +1 -0
- package/dist/ratelimit.d.ts +33 -0
- package/dist/ratelimit.d.ts.map +1 -0
- package/dist/ratelimit.js +61 -0
- package/dist/ratelimit.js.map +1 -0
- package/dist/rpc.d.ts +16 -40
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +47 -37
- package/dist/rpc.js.map +1 -1
- package/dist/schema.d.ts +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +20 -8
- package/dist/schema.js.map +1 -1
- package/dist/signer.d.ts +10 -70
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +171 -93
- package/dist/signer.js.map +1 -1
- package/dist/util.d.ts +1 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +5 -19
- package/dist/util.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { now, ago } from "@welshman/lib";
|
|
2
|
+
/**
|
|
3
|
+
* Check if a rate limit has been exceeded
|
|
4
|
+
*/
|
|
5
|
+
export function isRateLimited(bucket, config) {
|
|
6
|
+
if (!bucket)
|
|
7
|
+
return false;
|
|
8
|
+
const windowStart = ago(config.windowSeconds);
|
|
9
|
+
// If the bucket is outside the current window, it's not rate limited
|
|
10
|
+
if (bucket.last_attempt < windowStart) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
// Check if attempts exceed the limit within the window
|
|
14
|
+
return bucket.attempts >= config.maxAttempts;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Record an attempt and update the rate limit bucket
|
|
18
|
+
*/
|
|
19
|
+
export function recordAttempt(bucket, config) {
|
|
20
|
+
const currentTime = now();
|
|
21
|
+
const windowStart = ago(config.windowSeconds);
|
|
22
|
+
// If no bucket exists or the bucket is outside the current window, create a new one
|
|
23
|
+
if (!bucket || bucket.last_attempt < windowStart) {
|
|
24
|
+
return {
|
|
25
|
+
attempts: 1,
|
|
26
|
+
first_attempt: currentTime,
|
|
27
|
+
last_attempt: currentTime,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Increment attempts within the current window
|
|
31
|
+
return {
|
|
32
|
+
...bucket,
|
|
33
|
+
attempts: bucket.attempts + 1,
|
|
34
|
+
last_attempt: currentTime,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get remaining time until rate limit expires (in seconds)
|
|
39
|
+
*/
|
|
40
|
+
export function getRateLimitResetTime(bucket, config) {
|
|
41
|
+
if (!bucket)
|
|
42
|
+
return 0;
|
|
43
|
+
const windowStart = ago(config.windowSeconds);
|
|
44
|
+
if (bucket.last_attempt < windowStart) {
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
const resetTime = bucket.first_attempt + config.windowSeconds;
|
|
48
|
+
return Math.max(0, resetTime - now());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Clean up old rate limit buckets outside the window
|
|
52
|
+
*/
|
|
53
|
+
export async function cleanupRateLimits(collection, windowSeconds) {
|
|
54
|
+
const cutoff = ago(windowSeconds);
|
|
55
|
+
for (const [key, bucket] of await collection.entries()) {
|
|
56
|
+
if (bucket.last_attempt < cutoff) {
|
|
57
|
+
await collection.delete(key);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ratelimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratelimit.js","sourceRoot":"","sources":["../src/ratelimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,GAAG,EAAC,MAAM,eAAe,CAAA;AAoBtC;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAmC,EACnC,MAAuB;IAEvB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAE7C,qEAAqE;IACrE,IAAI,MAAM,CAAC,YAAY,GAAG,WAAW,EAAE,CAAC;QACtC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,uDAAuD;IACvD,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAmC,EACnC,MAAuB;IAEvB,MAAM,WAAW,GAAG,GAAG,EAAE,CAAA;IACzB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAE7C,oFAAoF;IACpF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG,WAAW,EAAE,CAAC;QACjD,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,WAAW;YAC1B,YAAY,EAAE,WAAW;SAC1B,CAAA;IACH,CAAC;IAED,+CAA+C;IAC/C,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC;QAC7B,YAAY,EAAE,WAAW;KAC1B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAmC,EACnC,MAAuB;IAEvB,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IAErB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAE7C,IAAI,MAAM,CAAC,YAAY,GAAG,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA0B,EAC1B,aAAqB;IAErB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA;IAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,EAAE,CAAC;YACjC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/rpc.d.ts
CHANGED
|
@@ -1,35 +1,28 @@
|
|
|
1
1
|
import type { Maybe } from "@welshman/lib";
|
|
2
|
-
import type {
|
|
2
|
+
import type { TrustedEvent, StampedEvent, SignedEvent } from "@welshman/util";
|
|
3
|
+
import type { ISigner } from "@welshman/signer";
|
|
3
4
|
import { Message } from "./message.js";
|
|
4
5
|
export type WithEvent<T extends Message> = T & {
|
|
5
6
|
event: TrustedEvent;
|
|
6
7
|
};
|
|
7
|
-
export declare function rpc(
|
|
8
|
+
export declare function rpc(signer: ISigner): RPC;
|
|
8
9
|
export declare class RPC {
|
|
9
|
-
|
|
10
|
+
signer: ISigner;
|
|
10
11
|
static Kind: number;
|
|
11
|
-
pubkey: string;
|
|
12
12
|
relays: string[];
|
|
13
13
|
subscribers: MessageHandler[];
|
|
14
14
|
controller: AbortController;
|
|
15
15
|
channels: Map<string, RPCChannel>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
static fromSecret(secret: string, relays?: string[]): RPC;
|
|
17
|
+
constructor(signer: ISigner, relays?: string[]);
|
|
18
|
+
publishRelays(): Promise<void>;
|
|
19
|
+
listenForEvents(): Promise<void>;
|
|
20
|
+
read(event: TrustedEvent): Promise<Maybe<WithEvent<Message>>>;
|
|
21
|
+
notify(event: TrustedEvent): Promise<void>;
|
|
21
22
|
subscribe(handler: MessageHandler): () => MessageHandler[];
|
|
22
|
-
sign(event:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
content: string;
|
|
26
|
-
kind: number;
|
|
27
|
-
created_at: number;
|
|
28
|
-
pubkey: string;
|
|
29
|
-
id: string;
|
|
30
|
-
};
|
|
31
|
-
encrypt(peer: string, payload: string): string;
|
|
32
|
-
decrypt(peer: string, payload: string): string;
|
|
23
|
+
sign(event: StampedEvent): Promise<SignedEvent>;
|
|
24
|
+
encrypt(peer: string, payload: string): Promise<string>;
|
|
25
|
+
decrypt(peer: string, payload: string): Promise<string>;
|
|
33
26
|
channel(peer: string, usePeerRelays?: boolean): RPCChannel;
|
|
34
27
|
stop(): void;
|
|
35
28
|
}
|
|
@@ -44,28 +37,11 @@ export declare class RPCChannel {
|
|
|
44
37
|
constructor(rpc: RPC, peer: string, usePeerRelays?: boolean);
|
|
45
38
|
subscribe(handler: MessageHandler): () => MessageHandler[];
|
|
46
39
|
receive<T>(handler: MessageHandlerWithCallback<T>): Promise<Maybe<T>>;
|
|
47
|
-
prep(message: Message):
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
content: string;
|
|
51
|
-
kind: number;
|
|
52
|
-
created_at: number;
|
|
53
|
-
pubkey: string;
|
|
54
|
-
id: string;
|
|
55
|
-
};
|
|
56
|
-
encrypt(payload: string): string;
|
|
57
|
-
decrypt(payload: string): string;
|
|
40
|
+
prep(message: Message): Promise<SignedEvent>;
|
|
41
|
+
encrypt(payload: string): Promise<string>;
|
|
42
|
+
decrypt(payload: string): Promise<string>;
|
|
58
43
|
send(message: Message): {
|
|
59
44
|
abort: () => void;
|
|
60
|
-
event: {
|
|
61
|
-
sig: string;
|
|
62
|
-
tags: string[][];
|
|
63
|
-
content: string;
|
|
64
|
-
kind: number;
|
|
65
|
-
created_at: number;
|
|
66
|
-
pubkey: string;
|
|
67
|
-
id: string;
|
|
68
|
-
};
|
|
69
45
|
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
70
46
|
ok: Promise<boolean>;
|
|
71
47
|
receive: <T>(handler: MessageHandlerWithCallback<T>) => Promise<Maybe<T>>;
|
package/dist/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAA;AAGxC,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAA;AAGxC,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAG3E,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAC,OAAO,EAAe,MAAM,cAAc,CAAA;AAElD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAAC,KAAK,EAAE,YAAY,CAAA;CAAC,CAAA;AAIpE,wBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,OAElC;AAED,qBAAa,GAAG;IAaL,MAAM,EAAE,OAAO;IAZxB,MAAM,CAAC,IAAI,SAAQ;IAEnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,EAAE,cAAc,EAAE,CAAK;IAClC,UAAU,kBAAwB;IAClC,QAAQ,0BAAgC;IAExC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO;gBAK9C,MAAM,EAAE,OAAO,EACtB,MAAM,GAAE,MAAM,EAAO;IAOjB,aAAa;IAwBb,eAAe;IAYf,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAS7D,MAAM,CAAC,KAAK,EAAE,YAAY;IAUhC,SAAS,CAAC,OAAO,EAAE,cAAc;IAcjC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,UAAO;IAY1C,IAAI;CASL;AAID,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;AAElE,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,CAC1C,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAC3B,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,KAC1B,IAAI,CAAA;AAET,qBAAa,UAAU;IAKnB,OAAO,CAAC,GAAG;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa;IANxB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,UAAU,kBAAwB;gBAGxB,GAAG,EAAE,GAAG,EACP,IAAI,EAAE,MAAM,EACZ,aAAa,UAAO;IAqB/B,SAAS,CAAC,OAAO,EAAE,cAAc;IAYjC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAoB3C,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAWlD,OAAO,CAAC,OAAO,EAAE,MAAM;IAIvB,OAAO,CAAC,OAAO,EAAE,MAAM;IAIvB,IAAI,CAAC,OAAO,EAAE,OAAO;;;;kBAkBF,CAAC,WAAW,0BAA0B,CAAC,CAAC,CAAC;;IAY5D,IAAI;CAGL"}
|
package/dist/rpc.js
CHANGED
|
@@ -1,55 +1,65 @@
|
|
|
1
1
|
import { tryCatch, uniq, without, spec } from "@welshman/lib";
|
|
2
2
|
import { publish, request, PublishStatus } from "@welshman/net";
|
|
3
|
-
import { prep
|
|
4
|
-
import {
|
|
3
|
+
import { prep } from "@welshman/util";
|
|
4
|
+
import { Nip01Signer } from "@welshman/signer";
|
|
5
|
+
import { debug, fetchRelays, normalizeRelay } from "./util.js";
|
|
5
6
|
import { parseMessage } from "./message.js";
|
|
6
7
|
// Base RPC class
|
|
7
|
-
export function rpc(
|
|
8
|
-
return new RPC(
|
|
8
|
+
export function rpc(signer) {
|
|
9
|
+
return new RPC(signer);
|
|
9
10
|
}
|
|
10
11
|
export class RPC {
|
|
11
|
-
|
|
12
|
+
signer;
|
|
12
13
|
static Kind = 28350;
|
|
13
|
-
pubkey;
|
|
14
14
|
relays;
|
|
15
15
|
subscribers = [];
|
|
16
16
|
controller = new AbortController();
|
|
17
17
|
channels = new Map();
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
static fromSecret(secret, relays = []) {
|
|
19
|
+
return new RPC(Nip01Signer.fromSecret(secret), relays);
|
|
20
|
+
}
|
|
21
|
+
constructor(signer, relays = []) {
|
|
22
|
+
this.signer = signer;
|
|
20
23
|
this.relays = relays.map(normalizeRelay);
|
|
21
|
-
this.pubkey = getPubkey(secret);
|
|
22
24
|
this.publishRelays();
|
|
23
25
|
this.listenForEvents();
|
|
24
26
|
}
|
|
25
|
-
publishRelays() {
|
|
27
|
+
async publishRelays() {
|
|
26
28
|
if (this.relays.length > 0) {
|
|
27
29
|
debug("[rpc.publishRelays]", this.relays);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
const pubkey = await this.signer.getPubkey();
|
|
31
|
+
const event = await this.signer.sign(prep({
|
|
32
|
+
kind: 10002,
|
|
33
|
+
content: "",
|
|
34
|
+
tags: this.relays.map(url => ["r", url]),
|
|
35
|
+
}, pubkey));
|
|
36
|
+
publish({
|
|
37
|
+
event,
|
|
30
38
|
relays: this.relays,
|
|
31
39
|
signal: this.controller.signal,
|
|
32
40
|
});
|
|
33
41
|
}
|
|
34
42
|
}
|
|
35
|
-
listenForEvents() {
|
|
43
|
+
async listenForEvents() {
|
|
36
44
|
if (this.relays) {
|
|
45
|
+
const pubkey = await this.signer.getPubkey();
|
|
37
46
|
request({
|
|
38
47
|
relays: this.relays,
|
|
39
48
|
signal: this.controller.signal,
|
|
40
|
-
filters: [{ kinds: [RPC.Kind], "#p": [
|
|
49
|
+
filters: [{ kinds: [RPC.Kind], "#p": [pubkey] }],
|
|
41
50
|
onEvent: (event) => this.notify(event),
|
|
42
51
|
});
|
|
43
52
|
}
|
|
44
53
|
}
|
|
45
|
-
read(event) {
|
|
46
|
-
const
|
|
54
|
+
async read(event) {
|
|
55
|
+
const decrypted = await this.decrypt(event.pubkey, event.content);
|
|
56
|
+
const result = tryCatch(() => parseMessage(decrypted));
|
|
47
57
|
if (result) {
|
|
48
58
|
return { ...result, event };
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
|
-
notify(event) {
|
|
52
|
-
const message = this.read(event);
|
|
61
|
+
async notify(event) {
|
|
62
|
+
const message = await this.read(event);
|
|
53
63
|
if (message) {
|
|
54
64
|
for (const subscriber of this.subscribers) {
|
|
55
65
|
subscriber(message);
|
|
@@ -64,13 +74,13 @@ export class RPC {
|
|
|
64
74
|
return () => this.subscribers.splice(this.subscribers.findIndex(s => s === handler), 1);
|
|
65
75
|
}
|
|
66
76
|
sign(event) {
|
|
67
|
-
return sign(event
|
|
77
|
+
return this.signer.sign(event);
|
|
68
78
|
}
|
|
69
79
|
encrypt(peer, payload) {
|
|
70
|
-
return nip44.encrypt(peer,
|
|
80
|
+
return this.signer.nip44.encrypt(peer, payload);
|
|
71
81
|
}
|
|
72
82
|
decrypt(peer, payload) {
|
|
73
|
-
return nip44.decrypt(peer,
|
|
83
|
+
return this.signer.nip44.decrypt(peer, payload);
|
|
74
84
|
}
|
|
75
85
|
channel(peer, usePeerRelays = true) {
|
|
76
86
|
let channel = this.channels.get(peer);
|
|
@@ -101,14 +111,14 @@ export class RPCChannel {
|
|
|
101
111
|
this.usePeerRelays = usePeerRelays;
|
|
102
112
|
const { signal } = this.controller;
|
|
103
113
|
this.relays = usePeerRelays ? fetchRelays(peer, signal) : Promise.resolve([]);
|
|
104
|
-
this.relays.then(relays => {
|
|
114
|
+
Promise.all([this.relays, this.rpc.signer.getPubkey()]).then(([relays, pubkey]) => {
|
|
105
115
|
if (!signal.aborted) {
|
|
106
116
|
const uniqueRelays = without(this.rpc.relays, relays);
|
|
107
117
|
if (uniqueRelays.length > 0) {
|
|
108
118
|
request({
|
|
109
119
|
signal,
|
|
110
120
|
relays: uniqueRelays,
|
|
111
|
-
filters: [{ kinds: [RPC.Kind], authors: [this.peer], "#p": [
|
|
121
|
+
filters: [{ kinds: [RPC.Kind], authors: [this.peer], "#p": [pubkey] }],
|
|
112
122
|
onEvent: (event) => this.rpc.notify(event),
|
|
113
123
|
});
|
|
114
124
|
}
|
|
@@ -143,13 +153,14 @@ export class RPCChannel {
|
|
|
143
153
|
const timeout = setTimeout(done, 30_000);
|
|
144
154
|
});
|
|
145
155
|
}
|
|
146
|
-
prep(message) {
|
|
156
|
+
async prep(message) {
|
|
157
|
+
const pubkey = await this.rpc.signer.getPubkey();
|
|
147
158
|
const template = {
|
|
148
159
|
kind: RPC.Kind,
|
|
149
160
|
tags: [["p", this.peer]],
|
|
150
|
-
content: this.encrypt(JSON.stringify(message)),
|
|
161
|
+
content: await this.encrypt(JSON.stringify(message)),
|
|
151
162
|
};
|
|
152
|
-
return this.rpc.sign(prep(template,
|
|
163
|
+
return this.rpc.sign(prep(template, pubkey));
|
|
153
164
|
}
|
|
154
165
|
encrypt(payload) {
|
|
155
166
|
return this.rpc.encrypt(this.peer, payload);
|
|
@@ -160,23 +171,22 @@ export class RPCChannel {
|
|
|
160
171
|
send(message) {
|
|
161
172
|
const controller = new AbortController();
|
|
162
173
|
const abort = () => controller.abort();
|
|
163
|
-
const
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
174
|
+
const eventPromise = this.prep(message);
|
|
175
|
+
const relaysPromise = this.relays;
|
|
176
|
+
const res = Promise.all([eventPromise, relaysPromise]).then(([event, relays]) => publish({
|
|
177
|
+
event,
|
|
178
|
+
relays: uniq([...relays, ...this.rpc.relays]),
|
|
179
|
+
signal: AbortSignal.any([this.controller.signal, controller.signal]),
|
|
180
|
+
}));
|
|
171
181
|
const ok = res.then(r => {
|
|
172
182
|
return Object.values(r).some(spec({ status: PublishStatus.Success }));
|
|
173
183
|
});
|
|
174
|
-
const receive = (handler) => this.receive((message, resolve) => {
|
|
184
|
+
const receive = (handler) => eventPromise.then(event => this.receive((message, resolve) => {
|
|
175
185
|
if (message.payload.prev === event.id) {
|
|
176
186
|
handler(message, resolve);
|
|
177
187
|
}
|
|
178
|
-
});
|
|
179
|
-
return { abort,
|
|
188
|
+
}));
|
|
189
|
+
return { abort, res, ok, receive };
|
|
180
190
|
}
|
|
181
191
|
stop() {
|
|
182
192
|
this.controller.abort();
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,oBAAY,MAAM;IAChB,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAClC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,mBAAmB,0BAA0B;IAC7C,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,mBAAmB,0BAA0B;IAC7C,WAAW,iBAAiB;IAC5B,iBAAiB,wBAAwB;IACzC,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;CAC3B;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,oBAAY,MAAM;IAChB,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAClC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,mBAAmB,0BAA0B;IAC7C,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,mBAAmB,0BAA0B;IAC7C,WAAW,iBAAiB;IAC5B,iBAAiB,wBAAwB;IACzC,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;CAC3B;AAsDD,QAAA,MAAM,WAAW;;;;;;;;;iBASf,CAAA;AAEF,QAAA,MAAM,YAAY;;;iBAGhB,CAAA;AAEF,QAAA,MAAM,OAAO;;;iBAGX,CAAA;AAEF,QAAA,MAAM,IAAI;;;;;;mBAAmC,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACrD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACvD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAA;AAC7C,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;AAEvC,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,IAAI,IAAI,YACd,CAAA;AAEtC,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,IAAI,IAAI,OAAqC,CAAA;AAEpF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyHlB,CAAA"}
|
package/dist/schema.js
CHANGED
|
@@ -23,6 +23,11 @@ export var Method;
|
|
|
23
23
|
Method["SignRequest"] = "sign/request";
|
|
24
24
|
Method["SignResult"] = "sign/result";
|
|
25
25
|
})(Method || (Method = {}));
|
|
26
|
+
// Security limits to prevent DoS attacks via unbounded payloads
|
|
27
|
+
const MAX_HASHES_PER_REQUEST = 10; // Maximum number of hashes in a single signature request
|
|
28
|
+
const MAX_HASH_VECTORS = 10; // Maximum number of hash vectors per request
|
|
29
|
+
const MAX_MEMBERS = 5; // Maximum number of members in a signing group
|
|
30
|
+
const MAX_COMMITS = 5; // Maximum number of commits in a group
|
|
26
31
|
const hex = z
|
|
27
32
|
.string()
|
|
28
33
|
.regex(/^[0-9a-fA-F]*$/)
|
|
@@ -36,7 +41,7 @@ const commit = z.object({
|
|
|
36
41
|
binder_pn: hex33,
|
|
37
42
|
});
|
|
38
43
|
const group = z.object({
|
|
39
|
-
commits: z.array(commit),
|
|
44
|
+
commits: z.array(commit).max(MAX_COMMITS),
|
|
40
45
|
group_pk: hex33,
|
|
41
46
|
threshold: z.number(),
|
|
42
47
|
});
|
|
@@ -47,7 +52,13 @@ const share = z.object({
|
|
|
47
52
|
seckey: hex32,
|
|
48
53
|
});
|
|
49
54
|
const psig_entry = z.tuple([hex32, hex32]);
|
|
50
|
-
|
|
55
|
+
// Use tuple with rest to maintain type compatibility while enforcing max length
|
|
56
|
+
const sighash_vec = z
|
|
57
|
+
.tuple([hex32])
|
|
58
|
+
.rest(hex32)
|
|
59
|
+
.refine(arr => arr.length <= MAX_HASHES_PER_REQUEST, {
|
|
60
|
+
message: `Maximum ${MAX_HASHES_PER_REQUEST} hashes allowed per request`,
|
|
61
|
+
});
|
|
51
62
|
const event = z.object({
|
|
52
63
|
sig: hex,
|
|
53
64
|
id: hex32,
|
|
@@ -65,7 +76,7 @@ const sessionItem = z.object({
|
|
|
65
76
|
threshold: z.int().positive(),
|
|
66
77
|
total: z.number(),
|
|
67
78
|
idx: z.number(),
|
|
68
|
-
email: z.string().optional(),
|
|
79
|
+
email: z.string().email().optional(),
|
|
69
80
|
});
|
|
70
81
|
const passwordAuth = z.object({
|
|
71
82
|
email_hash: z.string(),
|
|
@@ -81,14 +92,14 @@ export const isOTPAuth = (auth) => Boolean(auth.otp);
|
|
|
81
92
|
export const Schema = {
|
|
82
93
|
ecdhRequest: z.object({
|
|
83
94
|
idx: z.number(),
|
|
84
|
-
members: z.number().array(),
|
|
95
|
+
members: z.number().array().max(MAX_MEMBERS),
|
|
85
96
|
ecdh_pk: hex32,
|
|
86
97
|
}),
|
|
87
98
|
ecdhResult: z.object({
|
|
88
99
|
result: z.optional(z.object({
|
|
89
100
|
idx: z.number(),
|
|
90
101
|
keyshare: hex,
|
|
91
|
-
members: z.number().array(),
|
|
102
|
+
members: z.number().array().max(MAX_MEMBERS),
|
|
92
103
|
ecdh_pk: hex,
|
|
93
104
|
})),
|
|
94
105
|
ok: z.boolean(),
|
|
@@ -96,6 +107,7 @@ export const Schema = {
|
|
|
96
107
|
prev: hex32,
|
|
97
108
|
}),
|
|
98
109
|
challengeRequest: z.object({
|
|
110
|
+
prefix: z.string().regex(/^\d{2}$/),
|
|
99
111
|
email_hash: z.string(),
|
|
100
112
|
}),
|
|
101
113
|
loginStart: z.object({
|
|
@@ -136,7 +148,7 @@ export const Schema = {
|
|
|
136
148
|
prev: hex32,
|
|
137
149
|
}),
|
|
138
150
|
recoverySetup: z.object({
|
|
139
|
-
email: z.string(),
|
|
151
|
+
email: z.string().email(),
|
|
140
152
|
password_hash: z.string(),
|
|
141
153
|
}),
|
|
142
154
|
recoverySetupResult: z.object({
|
|
@@ -175,8 +187,8 @@ export const Schema = {
|
|
|
175
187
|
signRequest: z.object({
|
|
176
188
|
request: z.object({
|
|
177
189
|
content: z.string().nullable(),
|
|
178
|
-
hashes: sighash_vec.array(),
|
|
179
|
-
members: z.number().array(),
|
|
190
|
+
hashes: sighash_vec.array().max(MAX_HASH_VECTORS),
|
|
191
|
+
members: z.number().array().max(MAX_MEMBERS),
|
|
180
192
|
stamp: z.number(),
|
|
181
193
|
type: z.string(),
|
|
182
194
|
gid: hex32,
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,MAAM,CAAN,IAAY,MAsBX;AAtBD,WAAY,MAAM;IAChB,gDAAsC,CAAA;IACtC,sCAA4B,CAAA;IAC5B,oCAA0B,CAAA;IAC1B,oCAA0B,CAAA;IAC1B,wCAA8B,CAAA;IAC9B,sCAA4B,CAAA;IAC5B,sCAA4B,CAAA;IAC5B,0CAAgC,CAAA;IAChC,8CAAoC,CAAA;IACpC,4CAAkC,CAAA;IAClC,4CAAkC,CAAA;IAClC,0CAAgC,CAAA;IAChC,uDAA6C,CAAA;IAC7C,8CAAoC,CAAA;IACpC,4CAAkC,CAAA;IAClC,0CAAgC,CAAA;IAChC,uDAA6C,CAAA;IAC7C,sCAA4B,CAAA;IAC5B,mDAAyC,CAAA;IACzC,sCAA4B,CAAA;IAC5B,oCAA0B,CAAA;AAC5B,CAAC,EAtBW,MAAM,KAAN,MAAM,QAsBjB;AAED,MAAM,GAAG,GAAG,CAAC;KACV,MAAM,EAAE;KACR,KAAK,CAAC,gBAAgB,CAAC;KACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAClC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;AAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;AAE9C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;CACjB,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/signer.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { GroupPackage, SharePackage } from "@frostr/bifrost";
|
|
2
2
|
import type { TrustedEvent, SignedEvent } from "@welshman/util";
|
|
3
|
+
import type { ISigner } from "@welshman/signer";
|
|
3
4
|
import { Method, Auth } from "./schema.js";
|
|
4
5
|
import { RPC, WithEvent } from "./rpc.js";
|
|
5
6
|
import { IStorage, ICollection } from "./storage.js";
|
|
6
7
|
import { ChallengeRequest, EcdhRequest, LoginSelect, LoginStart, RecoverySetup, RecoverySelect, RecoveryStart, RegisterRequest, SessionDelete, SessionList, SignRequest } from "./message.js";
|
|
8
|
+
import { RateLimitBucket } from "./ratelimit.js";
|
|
7
9
|
export type SignerSession = {
|
|
8
10
|
client: string;
|
|
9
11
|
share: SharePackage;
|
|
@@ -37,10 +39,10 @@ export type SignerChallenge = {
|
|
|
37
39
|
};
|
|
38
40
|
export type ChallengePayload = {
|
|
39
41
|
email: string;
|
|
40
|
-
|
|
42
|
+
otp: string;
|
|
41
43
|
};
|
|
42
44
|
export type SignerOptions = {
|
|
43
|
-
|
|
45
|
+
signer: ISigner;
|
|
44
46
|
relays: string[];
|
|
45
47
|
storage: IStorage;
|
|
46
48
|
sendChallenge: (payload: ChallengePayload) => Promise<void>;
|
|
@@ -48,28 +50,21 @@ export type SignerOptions = {
|
|
|
48
50
|
export declare class Signer {
|
|
49
51
|
private options;
|
|
50
52
|
rpc: RPC;
|
|
51
|
-
pubkey: string;
|
|
52
53
|
intervals: number[];
|
|
53
54
|
logins: ICollection<SignerLogin>;
|
|
54
55
|
sessions: ICollection<SignerSession>;
|
|
55
56
|
recoveries: ICollection<SignerRecovery>;
|
|
56
57
|
challenges: ICollection<SignerChallenge>;
|
|
57
58
|
sessionsByEmailHash: ICollection<SignerSessionIndex>;
|
|
59
|
+
rateLimitByEmailHash: ICollection<RateLimitBucket>;
|
|
60
|
+
rateLimitByClient: ICollection<RateLimitBucket>;
|
|
58
61
|
constructor(options: SignerOptions);
|
|
59
62
|
stop(): void;
|
|
63
|
+
_checkAndRecordRateLimit(client: string): Promise<boolean>;
|
|
60
64
|
_getAuthenticatedSessions(auth: Auth): Promise<SignerSession[]>;
|
|
61
|
-
_isNip98AuthValid(auth: SignedEvent, method: Method): boolean
|
|
65
|
+
_isNip98AuthValid(auth: SignedEvent, method: Method): Promise<boolean>;
|
|
62
66
|
_checkKeyReuse(event: TrustedEvent): Promise<{
|
|
63
67
|
abort: () => void;
|
|
64
|
-
event: {
|
|
65
|
-
sig: string;
|
|
66
|
-
tags: string[][];
|
|
67
|
-
content: string;
|
|
68
|
-
kind: number;
|
|
69
|
-
created_at: number;
|
|
70
|
-
pubkey: string;
|
|
71
|
-
id: string;
|
|
72
|
-
};
|
|
73
68
|
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
74
69
|
ok: Promise<boolean>;
|
|
75
70
|
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|
|
@@ -79,62 +74,16 @@ export declare class Signer {
|
|
|
79
74
|
handleRegisterRequest({ payload, event }: WithEvent<RegisterRequest>): Promise<unknown>;
|
|
80
75
|
handleRecoverySetup({ payload, event }: WithEvent<RecoverySetup>): Promise<unknown>;
|
|
81
76
|
handleChallengeRequest({ payload, event }: WithEvent<ChallengeRequest>): Promise<void>;
|
|
82
|
-
handleRecoveryStart({ payload, event }: WithEvent<RecoveryStart>): Promise<
|
|
83
|
-
abort: () => void;
|
|
84
|
-
event: {
|
|
85
|
-
sig: string;
|
|
86
|
-
tags: string[][];
|
|
87
|
-
content: string;
|
|
88
|
-
kind: number;
|
|
89
|
-
created_at: number;
|
|
90
|
-
pubkey: string;
|
|
91
|
-
id: string;
|
|
92
|
-
};
|
|
93
|
-
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
94
|
-
ok: Promise<boolean>;
|
|
95
|
-
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|
|
96
|
-
} | undefined>;
|
|
77
|
+
handleRecoveryStart({ payload, event }: WithEvent<RecoveryStart>): Promise<unknown>;
|
|
97
78
|
handleRecoverySelect({ payload, event }: WithEvent<RecoverySelect>): Promise<{
|
|
98
79
|
abort: () => void;
|
|
99
|
-
event: {
|
|
100
|
-
sig: string;
|
|
101
|
-
tags: string[][];
|
|
102
|
-
content: string;
|
|
103
|
-
kind: number;
|
|
104
|
-
created_at: number;
|
|
105
|
-
pubkey: string;
|
|
106
|
-
id: string;
|
|
107
|
-
};
|
|
108
|
-
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
109
|
-
ok: Promise<boolean>;
|
|
110
|
-
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|
|
111
|
-
} | undefined>;
|
|
112
|
-
handleLoginStart({ payload, event }: WithEvent<LoginStart>): Promise<{
|
|
113
|
-
abort: () => void;
|
|
114
|
-
event: {
|
|
115
|
-
sig: string;
|
|
116
|
-
tags: string[][];
|
|
117
|
-
content: string;
|
|
118
|
-
kind: number;
|
|
119
|
-
created_at: number;
|
|
120
|
-
pubkey: string;
|
|
121
|
-
id: string;
|
|
122
|
-
};
|
|
123
80
|
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
124
81
|
ok: Promise<boolean>;
|
|
125
82
|
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|
|
126
83
|
} | undefined>;
|
|
84
|
+
handleLoginStart({ payload, event }: WithEvent<LoginStart>): Promise<unknown>;
|
|
127
85
|
handleLoginSelect({ payload, event }: WithEvent<LoginSelect>): Promise<{
|
|
128
86
|
abort: () => void;
|
|
129
|
-
event: {
|
|
130
|
-
sig: string;
|
|
131
|
-
tags: string[][];
|
|
132
|
-
content: string;
|
|
133
|
-
kind: number;
|
|
134
|
-
created_at: number;
|
|
135
|
-
pubkey: string;
|
|
136
|
-
id: string;
|
|
137
|
-
};
|
|
138
87
|
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
139
88
|
ok: Promise<boolean>;
|
|
140
89
|
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|
|
@@ -143,15 +92,6 @@ export declare class Signer {
|
|
|
143
92
|
handleEcdhRequest({ payload, event }: WithEvent<EcdhRequest>): Promise<unknown>;
|
|
144
93
|
handleSessionList({ payload, event }: WithEvent<SessionList>): Promise<{
|
|
145
94
|
abort: () => void;
|
|
146
|
-
event: {
|
|
147
|
-
sig: string;
|
|
148
|
-
tags: string[][];
|
|
149
|
-
content: string;
|
|
150
|
-
kind: number;
|
|
151
|
-
created_at: number;
|
|
152
|
-
pubkey: string;
|
|
153
|
-
id: string;
|
|
154
|
-
};
|
|
155
95
|
res: Promise<import("@welshman/net").PublishResultsByRelay>;
|
|
156
96
|
ok: Promise<boolean>;
|
|
157
97
|
receive: <T>(handler: import("./rpc.js").MessageHandlerWithCallback<T>) => Promise<import("@welshman/lib").Maybe<T>>;
|