nostr-double-ratchet 0.0.26 → 0.0.28
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/Invite.d.ts +3 -3
- package/dist/Invite.d.ts.map +1 -1
- package/dist/Session.d.ts +1 -1
- package/dist/Session.d.ts.map +1 -1
- package/dist/SessionManager.d.ts +23 -0
- package/dist/SessionManager.d.ts.map +1 -0
- package/dist/UserRecord.d.ts +30 -3
- package/dist/UserRecord.d.ts.map +1 -1
- package/dist/nostr-double-ratchet.es.js +1285 -1194
- package/dist/nostr-double-ratchet.umd.js +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +19 -17
- package/src/Invite.ts +14 -14
- package/src/Session.ts +17 -26
- package/src/SessionManager.ts +165 -0
- package/src/UserRecord.ts +64 -6
- package/src/types.ts +5 -5
- package/src/utils.ts +12 -12
package/dist/Invite.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export declare class Invite {
|
|
|
24
24
|
static fromUrl(url: string): Invite;
|
|
25
25
|
static deserialize(json: string): Invite;
|
|
26
26
|
static fromEvent(event: VerifiedEvent): Invite;
|
|
27
|
-
static fromUser(user: string, subscribe: NostrSubscribe, onInvite: (
|
|
27
|
+
static fromUser(user: string, subscribe: NostrSubscribe, onInvite: (_invite: Invite) => void): Unsubscribe;
|
|
28
28
|
/**
|
|
29
29
|
* Save Invite as JSON. Includes the inviter's session private key, so don't share this.
|
|
30
30
|
*/
|
|
@@ -33,7 +33,7 @@ export declare class Invite {
|
|
|
33
33
|
* Invite parameters are in the URL's hash so they are not sent to the server.
|
|
34
34
|
*/
|
|
35
35
|
getUrl(root?: string): string;
|
|
36
|
-
getEvent(): UnsignedEvent;
|
|
36
|
+
getEvent(deviceName: string): UnsignedEvent;
|
|
37
37
|
/**
|
|
38
38
|
* Called by the invitee. Accepts the invite and creates a new session with the inviter.
|
|
39
39
|
*
|
|
@@ -53,6 +53,6 @@ export declare class Invite {
|
|
|
53
53
|
session: Session;
|
|
54
54
|
event: VerifiedEvent;
|
|
55
55
|
}>;
|
|
56
|
-
listen(decryptor: Uint8Array | DecryptFunction, nostrSubscribe: NostrSubscribe, onSession: (
|
|
56
|
+
listen(decryptor: Uint8Array | DecryptFunction, nostrSubscribe: NostrSubscribe, onSession: (_session: Session, _identity?: string) => void): Unsubscribe;
|
|
57
57
|
}
|
|
58
58
|
//# sourceMappingURL=Invite.d.ts.map
|
package/dist/Invite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invite.d.ts","sourceRoot":"","sources":["../src/Invite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACvI,OAAO,EAAqB,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,SAAS,CAAC;AAEjI,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC;;;;;;;;;GASG;AACH,qBAAa,MAAM;IAEJ,yBAAyB,EAAE,MAAM;IACjC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,0BAA0B,CAAC,EAAE,UAAU;IACvC,KAAK,CAAC,EAAE,MAAM;IACd,OAAO,CAAC,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM,EAAE;gBANhB,yBAAyB,EAAE,MAAM,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,0BAA0B,CAAC,EAAE,UAAU,YAAA,EACvC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,MAAM,GAAE,MAAM,EAAO;
|
|
1
|
+
{"version":3,"file":"Invite.d.ts","sourceRoot":"","sources":["../src/Invite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACvI,OAAO,EAAqB,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,SAAS,CAAC;AAEjI,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC;;;;;;;;;GASG;AACH,qBAAa,MAAM;IAEJ,yBAAyB,EAAE,MAAM;IACjC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,0BAA0B,CAAC,EAAE,UAAU;IACvC,KAAK,CAAC,EAAE,MAAM;IACd,OAAO,CAAC,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM,EAAE;gBANhB,yBAAyB,EAAE,MAAM,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,0BAA0B,CAAC,EAAE,UAAU,YAAA,EACvC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,MAAM,GAAE,MAAM,EAAO;IAIhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAiB3E,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA2BnC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAaxC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA4B9C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAsB1G;;OAEG;IACH,SAAS,IAAI,MAAM;IAYnB;;OAEG;IACH,MAAM,CAAC,IAAI,SAAoB;IAW/B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;IAkB3C;;;;;;;;;;;;;;OAcG;IACG,MAAM,CACR,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,UAAU,GAAG,eAAe,GACxC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAsCtD,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;CA0C3J"}
|
package/dist/Session.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare class Session {
|
|
|
18
18
|
constructor(nostrSubscribe: NostrSubscribe, state: SessionState);
|
|
19
19
|
/**
|
|
20
20
|
* Initializes a new secure communication session
|
|
21
|
-
* @param nostrSubscribe Function to subscribe to Nostr events
|
|
21
|
+
* @param nostrSubscribe Function to subscribe to Nostr events. Make sure it deduplicates events (doesnt return the same event twice), otherwise you'll see decryption errors!
|
|
22
22
|
* @param theirNextNostrPublicKey The public key of the other party
|
|
23
23
|
* @param ourCurrentPrivateKey Our current private key for Nostr
|
|
24
24
|
* @param isInitiator Whether we are initiating the conversation (true) or responding (false)
|
package/dist/Session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAE/I,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,aAAa,EAEb,KAAK,EAEN,MAAM,SAAS,CAAC;AAQjB;;;;;GAKG;AACH,qBAAa,OAAO;IASN,OAAO,CAAC,cAAc;IAAyB,KAAK,EAAE,YAAY;IAR9E,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAc;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,qBAAqB,CAAoC;IACjE,OAAO,CAAC,6BAA6B,CAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAGA,cAAc,EAAE,cAAc,EAAS,KAAK,EAAE,YAAY;IAI9E;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CACT,cAAc,EAAE,cAAc,EAC9B,4BAA4B,EAAE,MAAM,EACpC,2BAA2B,EAAE,UAAU,EACvC,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,UAAU,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO;IA8CV;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAO7D;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAyCnF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C;;OAEG;IACH,KAAK;IAQL,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAE/I,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,aAAa,EAEb,KAAK,EAEN,MAAM,SAAS,CAAC;AAQjB;;;;;GAKG;AACH,qBAAa,OAAO;IASN,OAAO,CAAC,cAAc;IAAyB,KAAK,EAAE,YAAY;IAR9E,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAc;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,qBAAqB,CAAoC;IACjE,OAAO,CAAC,6BAA6B,CAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAGA,cAAc,EAAE,cAAc,EAAS,KAAK,EAAE,YAAY;IAI9E;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CACT,cAAc,EAAE,cAAc,EAC9B,4BAA4B,EAAE,MAAM,EACpC,2BAA2B,EAAE,UAAU,EACvC,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,UAAU,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO;IA8CV;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAO7D;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAyCnF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C;;OAEG;IACH,KAAK;IAQL,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,sBAAsB;CAsB/B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NostrPublish, NostrSubscribe, Rumor } from "./types";
|
|
2
|
+
import { Invite } from "./Invite";
|
|
3
|
+
export default class SessionManager {
|
|
4
|
+
private userRecords;
|
|
5
|
+
private nostrSubscribe;
|
|
6
|
+
private nostrPublish;
|
|
7
|
+
private ourIdentityKey;
|
|
8
|
+
private inviteUnsubscribes;
|
|
9
|
+
private ownDeviceInvites;
|
|
10
|
+
constructor(ourIdentityKey: Uint8Array, nostrSubscribe: NostrSubscribe, nostrPublish: NostrPublish);
|
|
11
|
+
sendText(recipientIdentityKey: string, text: string): Promise<import("nostr-tools").VerifiedEvent[]>;
|
|
12
|
+
sendEvent(recipientIdentityKey: string, event: Partial<Rumor>): Promise<import("nostr-tools").VerifiedEvent[]>;
|
|
13
|
+
listenToUser(userPubkey: string): void;
|
|
14
|
+
stopListeningToUser(userPubkey: string): void;
|
|
15
|
+
private internalSubscriptions;
|
|
16
|
+
onEvent(callback: (_event: Rumor) => void): () => void;
|
|
17
|
+
close(): void;
|
|
18
|
+
createOwnDeviceInvite(deviceName: string, label?: string, maxUses?: number): Invite;
|
|
19
|
+
removeOwnDevice(deviceName: string): void;
|
|
20
|
+
getOwnDeviceInvites(): Map<string, Invite | null>;
|
|
21
|
+
getActiveOwnDeviceInvites(): Map<string, Invite>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=SessionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,cAAc,EAAE,KAAK,EAAe,MAAM,SAAS,CAAA;AAE7F,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGjC,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,gBAAgB,CAAwC;gBAEpD,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAO5F,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAQnD,SAAS,CAAC,oBAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;IA8BnE,YAAY,CAAC,UAAU,EAAE,MAAM;IAmC/B,mBAAmB,CAAC,UAAU,EAAE,MAAM;IAStC,OAAO,CAAC,qBAAqB,CAA0C;IAEvE,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI;IAkBzC,KAAK;IAkBL,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAOnF,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAIjD,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CASnD"}
|
package/dist/UserRecord.d.ts
CHANGED
|
@@ -5,12 +5,21 @@ import { NostrSubscribe } from './types';
|
|
|
5
5
|
* https://signal.org/docs/specifications/sesame/
|
|
6
6
|
*/
|
|
7
7
|
export declare class UserRecord {
|
|
8
|
-
|
|
9
|
-
private
|
|
8
|
+
_userId: string;
|
|
9
|
+
private _nostrSubscribe;
|
|
10
10
|
private deviceRecords;
|
|
11
11
|
private isStale;
|
|
12
12
|
private staleTimestamp?;
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Temporary store for sessions when the corresponding deviceId is unknown.
|
|
15
|
+
*
|
|
16
|
+
* SessionManager currently operates at a per-user granularity (it is not
|
|
17
|
+
* yet aware of individual devices). Until full Sesame device handling is
|
|
18
|
+
* implemented we keep sessions in this simple list so that
|
|
19
|
+
* SessionManager.getActiveSessions / getAllSessions work as expected.
|
|
20
|
+
*/
|
|
21
|
+
private extraSessions;
|
|
22
|
+
constructor(_userId: string, _nostrSubscribe: NostrSubscribe);
|
|
14
23
|
/**
|
|
15
24
|
* Adds or updates a device record for this user
|
|
16
25
|
*/
|
|
@@ -47,5 +56,23 @@ export declare class UserRecord {
|
|
|
47
56
|
* Cleanup when destroying the user record
|
|
48
57
|
*/
|
|
49
58
|
close(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Add a session without associating it with a specific device.
|
|
61
|
+
* This is mainly used by SessionManager which does not yet keep track of
|
|
62
|
+
* device identifiers. The session will be considered active.
|
|
63
|
+
*/
|
|
64
|
+
addSession(session: Session): void;
|
|
65
|
+
/**
|
|
66
|
+
* Return all sessions that are currently considered *active*.
|
|
67
|
+
* For now this means any session in a non-stale device record as well as
|
|
68
|
+
* all sessions added through `addSession`.
|
|
69
|
+
*/
|
|
70
|
+
getActiveSessions(): Session[];
|
|
71
|
+
/**
|
|
72
|
+
* Return *all* sessions — active or inactive — that we have stored for this
|
|
73
|
+
* user. This is required for `SessionManager.onEvent` so that it can attach
|
|
74
|
+
* listeners to existing sessions.
|
|
75
|
+
*/
|
|
76
|
+
getAllSessions(): Session[];
|
|
50
77
|
}
|
|
51
78
|
//# sourceMappingURL=UserRecord.d.ts.map
|
package/dist/UserRecord.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserRecord.d.ts","sourceRoot":"","sources":["../src/UserRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUzC;;;GAGG;AACH,qBAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"UserRecord.d.ts","sourceRoot":"","sources":["../src/UserRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUzC;;;GAGG;AACH,qBAAa,UAAU;IAeZ,OAAO,EAAE,MAAM;IACtB,OAAO,CAAC,eAAe;IAfzB,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CAAiB;gBAG7B,OAAO,EAAE,MAAM,EACd,eAAe,EAAE,cAAc;IAIzC;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAanE;;OAEG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAe9D;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAuBhE;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ9C;;OAEG;IACI,aAAa,IAAI,IAAI;IAK5B;;OAEG;IACI,gBAAgB,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQnD;;OAEG;IACI,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,UAAU,EACxB,oBAAoB,EAAE,UAAU,EAChC,WAAW,EAAE,OAAO,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO;IAmBV;;OAEG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAyBlD;;OAEG;IACI,KAAK,IAAI,IAAI;IAYpB;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;;;OAIG;IACI,iBAAiB,IAAI,OAAO,EAAE;IAYrC;;;;OAIG;IACI,cAAc,IAAI,OAAO,EAAE;CAYnC"}
|