@pomade/core 0.0.7 → 0.0.9

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 CHANGED
@@ -8,20 +8,20 @@ export type ClientOptions = {
8
8
  secret: string;
9
9
  peers: string[];
10
10
  };
11
+ export type ClientOptionsResult<T> = {
12
+ ok: boolean;
13
+ options: [string, string[]][];
14
+ messages: Maybe<T>[];
15
+ clientSecret: string;
16
+ };
11
17
  export declare class Client {
12
18
  rpc: RPC;
13
19
  peers: string[];
14
20
  group: GroupPackage;
15
- pubkey: string;
16
21
  userPubkey: string;
17
22
  constructor(options: ClientOptions);
18
23
  stop(): void;
19
- static _buildOptions<T extends WithEvent<LoginOptions | RecoveryOptions>>(clientSecret: string, messages: Maybe<T>[]): {
20
- ok: boolean;
21
- options: [string, string[]][];
22
- messages: Maybe<T>[];
23
- clientSecret: string;
24
- };
24
+ static _buildOptions<T extends WithEvent<LoginOptions | RecoveryOptions>>(clientSecret: string, messages: Maybe<T>[], threshold: "total" | "threshold"): ClientOptionsResult<T>;
25
25
  static _getKnownPeers(): string[];
26
26
  static register(threshold: number, n: number, userSecret: string, recovery?: boolean): Promise<{
27
27
  ok: boolean;
@@ -39,35 +39,15 @@ export declare class Client {
39
39
  static requestChallenge(email: string, peers?: string[]): Promise<{
40
40
  ok: boolean;
41
41
  }>;
42
- static loginWithPassword(email: string, password: string): Promise<{
43
- ok: boolean;
44
- options: [string, string[]][];
45
- messages: Maybe<WithEvent<LoginOptions>>[];
46
- clientSecret: string;
47
- }>;
48
- static loginWithChallenge(email: string, challenges: string[]): Promise<{
49
- ok: boolean;
50
- options: [string, string[]][];
51
- messages: Maybe<WithEvent<LoginOptions>>[];
52
- clientSecret: string;
53
- }>;
42
+ static loginWithPassword(email: string, password: string): Promise<ClientOptionsResult<WithEvent<LoginOptions>>>;
43
+ static loginWithChallenge(email: string, challenges: string[]): Promise<ClientOptionsResult<WithEvent<LoginOptions>>>;
54
44
  static selectLogin(clientSecret: string, client: string, peers: string[]): Promise<{
55
45
  ok: boolean;
56
46
  messages: Maybe<WithEvent<LoginResult>>[];
57
47
  clientOptions: ClientOptions | undefined;
58
48
  }>;
59
- static recoverWithPassword(email: string, password: string): Promise<{
60
- ok: boolean;
61
- options: [string, string[]][];
62
- messages: Maybe<WithEvent<RecoveryOptions>>[];
63
- clientSecret: string;
64
- }>;
65
- static recoverWithChallenge(email: string, challenges: string[]): Promise<{
66
- ok: boolean;
67
- options: [string, string[]][];
68
- messages: Maybe<WithEvent<RecoveryOptions>>[];
69
- clientSecret: string;
70
- }>;
49
+ static recoverWithPassword(email: string, password: string): Promise<ClientOptionsResult<WithEvent<RecoveryOptions>>>;
50
+ static recoverWithChallenge(email: string, challenges: string[]): Promise<ClientOptionsResult<WithEvent<RecoveryOptions>>>;
71
51
  static selectRecovery(clientSecret: string, client: string, peers: string[]): Promise<{
72
52
  ok: boolean;
73
53
  messages: Maybe<WithEvent<RecoveryResult>>[];
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EAYN,MAAM,eAAe,CAAA;AAKtB,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE7D,OAAO,KAAK,EAAC,YAAY,EAAc,MAAM,iBAAiB,CAAA;AAG9D,OAAO,EAAC,GAAG,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACvC,OAAO,EAsBL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACX,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,qBAAa,MAAM;IACjB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;gBAEN,OAAO,EAAE,aAAa;IAQlC,IAAI;IAIJ,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,SAAS,CAAC,YAAY,GAAG,eAAe,CAAC,EACtE,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GACnB;QACD,EAAE,EAAE,OAAO,CAAA;QACX,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;QAC7B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;KACrB;IAaD,MAAM,CAAC,cAAc;WAWR,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,UAAO;;;;;;;;;IAyDjF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;WAqBtC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,WAA0B;;;WAmB/D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;YA7HxD,OAAO;iBACF,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;;sBAEf,MAAM;;WAoJT,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;YAvJ7D,OAAO;iBACF,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;;sBAEf,MAAM;;WA8KT,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;;WA2BjE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;YA5M1D,OAAO;iBACF,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;;sBAEf,MAAM;;WAmOT,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;YAtO/D,OAAO;iBACF,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;;sBAEf,MAAM;;WA6PT,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;;IAyB3E,IAAI,CAAC,YAAY,EAAE,YAAY;;;eAgCuB,WAAW;;;;;;IAOjE,kBAAkB,CAAC,OAAO,EAAE,MAAM;IA+BlC,YAAY;;;;IAqBZ,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;CAoBpD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAYN,MAAM,eAAe,CAAA;AAKtB,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE7D,OAAO,KAAK,EAAC,YAAY,EAAc,MAAM,iBAAiB,CAAA;AAG9D,OAAO,EAAC,GAAG,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACvC,OAAO,EAsBL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACX,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IAC7B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,MAAM;IACjB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;gBAEN,OAAO,EAAE,aAAa;IAOlC,IAAI;IAIJ,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,SAAS,CAAC,YAAY,GAAG,eAAe,CAAC,EACtE,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EACpB,SAAS,EAAE,OAAO,GAAG,WAAW,GAC/B,mBAAmB,CAAC,CAAC,CAAC;IA0CzB,MAAM,CAAC,cAAc;WAWR,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,UAAO;;;;;;;;;IAyDjF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;WAqBtC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,WAA0B;;;WAmB/D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;WA0BjD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;WA0BtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;;WA2BjE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;WA0BnD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;WA0BxD,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;;IAyB3E,IAAI,CAAC,YAAY,EAAE,YAAY;;;eAgCuB,WAAW;;;;;;IAOjE,kBAAkB,CAAC,OAAO,EAAE,MAAM;IA+BlC,YAAY;;;;IAqBZ,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;;;CAoBpD"}
package/dist/client.js CHANGED
@@ -1,8 +1,8 @@
1
- import { nth, tryCatch, groupBy, removeUndefined, shuffle, sortBy, first, last, isDefined, identity, sample, textEncoder, } from "@welshman/lib";
1
+ import { tryCatch, groupBy, removeUndefined, shuffle, sortBy, first, last, isDefined, identity, sample, textEncoder, } from "@welshman/lib";
2
2
  import { extract } from "@noble/hashes/hkdf.js";
3
3
  import { sha256 } from "@noble/hashes/sha2.js";
4
4
  import { hexToBytes, bytesToHex } from "@noble/hashes/utils.js";
5
- import { prep, makeSecret, getPubkey, makeHttpAuth } from "@welshman/util";
5
+ import { prep, makeSecret, makeHttpAuth } from "@welshman/util";
6
6
  import { Lib } from "@frostr/bifrost";
7
7
  import { Method } from "./schema.js";
8
8
  import { context, hashEmail, hashPassword, decodeChallenge } from "./util.js";
@@ -12,22 +12,43 @@ export class Client {
12
12
  rpc;
13
13
  peers;
14
14
  group;
15
- pubkey;
16
15
  userPubkey;
17
16
  constructor(options) {
18
- this.rpc = new RPC(options.secret);
17
+ this.rpc = RPC.fromSecret(options.secret);
19
18
  this.peers = options.peers;
20
19
  this.group = options.group;
21
- this.pubkey = getPubkey(options.secret);
22
20
  this.userPubkey = this.group.group_pk.slice(2);
23
21
  }
24
22
  stop() {
25
23
  this.rpc.stop();
26
24
  }
27
- static _buildOptions(clientSecret, messages) {
28
- const items = messages.flatMap(m => m?.payload.items?.map(item => [item.client, m.event.pubkey, item.idx]) || []);
29
- const itemsByClient = Array.from(groupBy(([client, peer, idx]) => client, items));
30
- const options = itemsByClient.map(([client, items]) => [client, sortBy(nth(2), items).map(nth(1))]);
25
+ static _buildOptions(clientSecret, messages, threshold) {
26
+ // Extract all items with their metadata
27
+ const items = messages.flatMap(m => m?.payload.items?.map(item => ({
28
+ client: item.client,
29
+ peer: m.event.pubkey,
30
+ idx: item.idx,
31
+ total: item.total,
32
+ threshold: item.threshold,
33
+ })) || []);
34
+ // Group by client
35
+ const itemsByClient = Array.from(groupBy(item => item.client, items));
36
+ // Build options, filtering out incomplete sets
37
+ const options = [];
38
+ for (const [client, clientItems] of itemsByClient) {
39
+ // Get the expected total (should be the same for all items of this client)
40
+ const total = clientItems[0]?.[threshold];
41
+ if (!total || clientItems.length < total)
42
+ continue;
43
+ // Check that we have all indices from 1 to total
44
+ const idxSet = new Set(clientItems.map(item => item.idx));
45
+ const hasAllIndices = Array.from({ length: total }, (_, i) => i + 1).every(idx => idxSet.has(idx));
46
+ if (!hasAllIndices)
47
+ continue;
48
+ // Sort by idx and map to peers
49
+ const peers = sortBy(item => item.idx, clientItems).map(item => item.peer);
50
+ options.push([client, peers]);
51
+ }
31
52
  const ok = messages.some(m => m?.payload.ok) && options.length > 0;
32
53
  return { ok, options, messages, clientSecret };
33
54
  }
@@ -48,7 +69,7 @@ export class Client {
48
69
  throw new Error("Threshold must be greater than 0");
49
70
  }
50
71
  const secret = makeSecret();
51
- const rpc = new RPC(secret);
72
+ const rpc = RPC.fromSecret(secret);
52
73
  const { group, shares } = Lib.generate_dealer_pkg(threshold, n, [userSecret]);
53
74
  const remainingSignerPubkeys = shuffle(context.signerPubkeys);
54
75
  const peersByIndex = new Map();
@@ -86,7 +107,7 @@ export class Client {
86
107
  // Recovery setup
87
108
  async setupRecovery(email, password) {
88
109
  const messages = await Promise.all(this.peers.map(async (peer, i) => {
89
- const password_hash = await hashPassword(password, peer);
110
+ const password_hash = await hashPassword(email, password, peer);
90
111
  return this.rpc
91
112
  .channel(peer)
92
113
  .send(makeRecoverySetup({ email, password_hash }))
@@ -101,7 +122,7 @@ export class Client {
101
122
  // Challenge
102
123
  static async requestChallenge(email, peers = Client._getKnownPeers()) {
103
124
  const clientSecret = makeSecret();
104
- const rpc = new RPC(clientSecret);
125
+ const rpc = RPC.fromSecret(clientSecret);
105
126
  const oks = await Promise.all(peers.map(async (peer, i) => {
106
127
  const email_hash = await hashEmail(email, peer);
107
128
  return rpc.channel(peer).send(makeChallengeRequest({ email_hash })).ok;
@@ -112,10 +133,10 @@ export class Client {
112
133
  // Login
113
134
  static async loginWithPassword(email, password) {
114
135
  const clientSecret = makeSecret();
115
- const rpc = new RPC(clientSecret);
136
+ const rpc = RPC.fromSecret(clientSecret);
116
137
  const messages = await Promise.all(Client._getKnownPeers().map(async (peer, i) => {
117
138
  const email_hash = await hashEmail(email, peer);
118
- const password_hash = await hashPassword(password, peer);
139
+ const password_hash = await hashPassword(email, password, peer);
119
140
  const auth = { email_hash, password_hash };
120
141
  return rpc
121
142
  .channel(peer)
@@ -127,11 +148,11 @@ export class Client {
127
148
  });
128
149
  }));
129
150
  rpc.stop();
130
- return this._buildOptions(clientSecret, messages);
151
+ return this._buildOptions(clientSecret, messages, "total");
131
152
  }
132
153
  static async loginWithChallenge(email, challenges) {
133
154
  const clientSecret = makeSecret();
134
- const rpc = new RPC(clientSecret);
155
+ const rpc = RPC.fromSecret(clientSecret);
135
156
  const messages = await Promise.all(challenges.map(async (challenge) => {
136
157
  const { peer, otp } = decodeChallenge(challenge);
137
158
  const email_hash = await hashEmail(email, peer);
@@ -146,10 +167,10 @@ export class Client {
146
167
  });
147
168
  }));
148
169
  rpc.stop();
149
- return this._buildOptions(clientSecret, messages);
170
+ return this._buildOptions(clientSecret, messages, "total");
150
171
  }
151
172
  static async selectLogin(clientSecret, client, peers) {
152
- const rpc = new RPC(clientSecret);
173
+ const rpc = RPC.fromSecret(clientSecret);
153
174
  const messages = await Promise.all(peers.map((peer, i) => {
154
175
  return rpc
155
176
  .channel(peer)
@@ -169,10 +190,10 @@ export class Client {
169
190
  // Recovery
170
191
  static async recoverWithPassword(email, password) {
171
192
  const clientSecret = makeSecret();
172
- const rpc = new RPC(clientSecret);
193
+ const rpc = RPC.fromSecret(clientSecret);
173
194
  const messages = await Promise.all(Client._getKnownPeers().map(async (peer, i) => {
174
195
  const email_hash = await hashEmail(email, peer);
175
- const password_hash = await hashPassword(password, peer);
196
+ const password_hash = await hashPassword(email, password, peer);
176
197
  const auth = { email_hash, password_hash };
177
198
  return rpc
178
199
  .channel(peer)
@@ -184,11 +205,11 @@ export class Client {
184
205
  });
185
206
  }));
186
207
  rpc.stop();
187
- return this._buildOptions(clientSecret, messages);
208
+ return this._buildOptions(clientSecret, messages, "threshold");
188
209
  }
189
210
  static async recoverWithChallenge(email, challenges) {
190
211
  const clientSecret = makeSecret();
191
- const rpc = new RPC(clientSecret);
212
+ const rpc = RPC.fromSecret(clientSecret);
192
213
  const messages = await Promise.all(challenges.map(async (challenge) => {
193
214
  const { peer, otp } = decodeChallenge(challenge);
194
215
  const email_hash = await hashEmail(email, peer);
@@ -203,10 +224,10 @@ export class Client {
203
224
  });
204
225
  }));
205
226
  rpc.stop();
206
- return this._buildOptions(clientSecret, messages);
227
+ return this._buildOptions(clientSecret, messages, "threshold");
207
228
  }
208
229
  static async selectRecovery(clientSecret, client, peers) {
209
- const rpc = new RPC(clientSecret);
230
+ const rpc = RPC.fromSecret(clientSecret);
210
231
  const messages = await Promise.all(peers.map(peer => {
211
232
  return rpc
212
233
  .channel(peer)
@@ -257,11 +278,12 @@ export class Client {
257
278
  // TODO: optimize this so that all signers are asked, but only the fastest results get used
258
279
  const { threshold, commits } = this.group;
259
280
  const members = sample(threshold, commits).map(c => c.idx);
260
- const results = await Promise.all(members.map(async (idx) => {
281
+ const results = await Promise.all(members.map(idx => {
261
282
  const peer = this.peers[idx - 1];
262
283
  const channel = this.rpc.channel(peer);
263
- channel.send(makeEcdhRequest({ idx, members, ecdh_pk }));
264
- return channel.receive((message, resolve) => {
284
+ return channel
285
+ .send(makeEcdhRequest({ idx, members, ecdh_pk }))
286
+ .receive((message, resolve) => {
265
287
  if (isEcdhResult(message)) {
266
288
  resolve(message.payload.result);
267
289
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from "./client.js";
2
2
  export * from "./message.js";
3
+ export * from "./pomade-signer.js";
4
+ export * from "./ratelimit.js";
3
5
  export * from "./rpc.js";
4
6
  export * from "./schema.js";
5
7
  export * from "./signer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from "./client.js";
2
2
  export * from "./message.js";
3
+ export * from "./pomade-signer.js";
4
+ export * from "./ratelimit.js";
3
5
  export * from "./rpc.js";
4
6
  export * from "./schema.js";
5
7
  export * from "./signer.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { Client } from "./client.js";
2
+ import type { StampedEvent, SignedEvent } from "@welshman/util";
3
+ import type { ISigner, SignOptions } from "@welshman/signer";
4
+ export declare class PomadeSigner implements ISigner {
5
+ #private;
6
+ readonly client: Client;
7
+ constructor(client: Client);
8
+ private getSharedSecret;
9
+ getPubkey: () => Promise<string>;
10
+ sign: (event: StampedEvent, options?: SignOptions) => Promise<SignedEvent>;
11
+ nip04: {
12
+ encrypt: (...args: unknown[]) => never;
13
+ decrypt: (...args: unknown[]) => never;
14
+ };
15
+ nip44: {
16
+ encrypt: (pubkey: string, message: string) => Promise<string>;
17
+ decrypt: (pubkey: string, message: string) => Promise<string>;
18
+ };
19
+ }
20
+ //# sourceMappingURL=pomade-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pomade-signer.d.ts","sourceRoot":"","sources":["../src/pomade-signer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE7D,OAAO,KAAK,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAE1D,qBAAa,YAAa,YAAW,OAAO;;IAI9B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;IAInC,OAAO,CAAC,eAAe,CAatB;IAED,SAAS,wBAA2B;IAEpC,IAAI,GAAU,OAAO,YAAY,EAAE,UAAS,WAAgB,KAAG,OAAO,CAAC,WAAW,CAAC,CAQlF;IAED,KAAK;;;MAGJ;IAED,KAAK;0BACqB,MAAM,WAAW,MAAM;0BASvB,MAAM,WAAW,MAAM;MAShD;CACF"}
@@ -0,0 +1,51 @@
1
+ import * as nt44 from "nostr-tools/nip44";
2
+ import { thrower, hexToBytes } from "@welshman/lib";
3
+ export class PomadeSigner {
4
+ client;
5
+ #pubkey;
6
+ #sharedSecretCache = new Map();
7
+ constructor(client) {
8
+ this.client = client;
9
+ this.#pubkey = client.userPubkey;
10
+ }
11
+ getSharedSecret = async (pubkey) => {
12
+ let sharedSecret = this.#sharedSecretCache.get(pubkey);
13
+ if (!sharedSecret) {
14
+ const hexSharedSecret = await this.client.getConversationKey(pubkey);
15
+ if (hexSharedSecret) {
16
+ sharedSecret = hexToBytes(hexSharedSecret);
17
+ this.#sharedSecretCache.set(pubkey, sharedSecret);
18
+ }
19
+ }
20
+ return sharedSecret;
21
+ };
22
+ getPubkey = async () => this.#pubkey;
23
+ sign = async (event, options = {}) => {
24
+ const result = await this.client.sign(event);
25
+ if (!result.event) {
26
+ throw new Error(result.messages[0]?.payload.message || "Failed to sign event");
27
+ }
28
+ return result.event;
29
+ };
30
+ nip04 = {
31
+ encrypt: thrower("PomadeSigner does not support nip04"),
32
+ decrypt: thrower("PomadeSigner does not support nip04"),
33
+ };
34
+ nip44 = {
35
+ encrypt: async (pubkey, message) => {
36
+ const sharedSecret = await this.getSharedSecret(pubkey);
37
+ if (!sharedSecret) {
38
+ throw new Error("Failed to get shared secret");
39
+ }
40
+ return nt44.v2.encrypt(message, sharedSecret);
41
+ },
42
+ decrypt: async (pubkey, message) => {
43
+ const sharedSecret = await this.getSharedSecret(pubkey);
44
+ if (!sharedSecret) {
45
+ throw new Error("Failed to get shared secret");
46
+ }
47
+ return nt44.v2.decrypt(message, sharedSecret);
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=pomade-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pomade-signer.js","sourceRoot":"","sources":["../src/pomade-signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AAGzC,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,eAAe,CAAA;AAGjD,MAAM,OAAO,YAAY;IAIF;IAHrB,OAAO,CAAQ;IACf,kBAAkB,GAAG,IAAI,GAAG,EAAmC,CAAA;IAE/D,YAAqB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAA;IAClC,CAAC;IAEO,eAAe,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACjD,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;YAEpE,IAAI,eAAe,EAAE,CAAC;gBACpB,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;gBAC1C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC,CAAA;IAED,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;IAEpC,IAAI,GAAG,KAAK,EAAE,KAAmB,EAAE,UAAuB,EAAE,EAAwB,EAAE;QACpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,sBAAsB,CAAC,CAAA;QAChF,CAAC;QAED,OAAO,MAAM,CAAC,KAAoB,CAAA;IACpC,CAAC,CAAA;IAED,KAAK,GAAG;QACN,OAAO,EAAE,OAAO,CAAC,qCAAqC,CAAC;QACvD,OAAO,EAAE,OAAO,CAAC,qCAAqC,CAAC;KACxD,CAAA;IAED,KAAK,GAAG;QACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAEvD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAChD,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAEvD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAChD,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAC/C,CAAC;KACF,CAAA;CACF"}
@@ -0,0 +1,33 @@
1
+ import { ICollection } from "./storage.js";
2
+ /**
3
+ * Rate limit bucket tracking attempts within a time window
4
+ */
5
+ export type RateLimitBucket = {
6
+ attempts: number;
7
+ first_attempt: number;
8
+ last_attempt: number;
9
+ };
10
+ /**
11
+ * Rate limit configuration
12
+ */
13
+ export type RateLimitConfig = {
14
+ maxAttempts: number;
15
+ windowSeconds: number;
16
+ };
17
+ /**
18
+ * Check if a rate limit has been exceeded
19
+ */
20
+ export declare function isRateLimited(bucket: RateLimitBucket | undefined, config: RateLimitConfig): boolean;
21
+ /**
22
+ * Record an attempt and update the rate limit bucket
23
+ */
24
+ export declare function recordAttempt(bucket: RateLimitBucket | undefined, config: RateLimitConfig): RateLimitBucket;
25
+ /**
26
+ * Get remaining time until rate limit expires (in seconds)
27
+ */
28
+ export declare function getRateLimitResetTime(bucket: RateLimitBucket | undefined, config: RateLimitConfig): number;
29
+ /**
30
+ * Clean up old rate limit buckets outside the window
31
+ */
32
+ export declare function cleanupRateLimits<T extends RateLimitBucket>(collection: ICollection<T>, windowSeconds: number): Promise<void>;
33
+ //# sourceMappingURL=ratelimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratelimit.d.ts","sourceRoot":"","sources":["../src/ratelimit.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAA;AAExC;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,MAAM,EAAE,eAAe,GACtB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,MAAM,EAAE,eAAe,GACtB,eAAe,CAmBjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,MAAM,EAAE,eAAe,GACtB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EAC/D,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -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 { HashedEvent, TrustedEvent } from "@welshman/util";
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(secret: string): RPC;
8
+ export declare function rpc(signer: ISigner): RPC;
8
9
  export declare class RPC {
9
- private secret;
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
- constructor(secret: string, relays?: string[]);
17
- publishRelays(): void;
18
- listenForEvents(): void;
19
- read(event: TrustedEvent): Maybe<WithEvent<Message>>;
20
- notify(event: TrustedEvent): void;
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: HashedEvent): {
23
- sig: string;
24
- tags: string[][];
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
- sig: string;
49
- tags: string[][];
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>>;