nostr-double-ratchet 0.0.27 → 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 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: (invite: Invite) => void): Unsubscribe;
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: (session: Session, identity?: string) => void): Unsubscribe;
56
+ listen(decryptor: Uint8Array | DecryptFunction, nostrSubscribe: NostrSubscribe, onSession: (_session: Session, _identity?: string) => void): Unsubscribe;
57
57
  }
58
58
  //# sourceMappingURL=Invite.d.ts.map
@@ -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;IAGhC,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,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAwBzG;;OAEG;IACH,SAAS,IAAI,MAAM;IAYnB;;OAEG;IACH,MAAM,CAAC,IAAI,SAAoB;IAW/B,QAAQ,IAAI,aAAa;IAezB;;;;;;;;;;;;;;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,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;CA4CzJ"}
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)
@@ -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;IAuBtB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,sBAAsB;CAsB/B"}
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"}
@@ -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
- userId: string;
9
- private nostrSubscribe;
8
+ _userId: string;
9
+ private _nostrSubscribe;
10
10
  private deviceRecords;
11
11
  private isStale;
12
12
  private staleTimestamp?;
13
- constructor(userId: string, nostrSubscribe: NostrSubscribe);
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
@@ -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;IAMZ,MAAM,EAAE,MAAM;IACrB,OAAO,CAAC,cAAc;IANxB,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAS;gBAGvB,MAAM,EAAE,MAAM,EACb,cAAc,EAAE,cAAc;IAGxC;;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;CAOrB"}
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"}