@konemono/nostr-login 1.7.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.
Files changed (43) hide show
  1. package/.prettierrc.json +13 -0
  2. package/README.md +167 -0
  3. package/dist/const/index.d.ts +1 -0
  4. package/dist/iife-module.d.ts +1 -0
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.esm.js +18 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/modules/AuthNostrService.d.ts +84 -0
  9. package/dist/modules/BannerManager.d.ts +20 -0
  10. package/dist/modules/ModalManager.d.ts +25 -0
  11. package/dist/modules/Nip46.d.ts +56 -0
  12. package/dist/modules/Nostr.d.ts +34 -0
  13. package/dist/modules/NostrExtensionService.d.ts +17 -0
  14. package/dist/modules/NostrParams.d.ts +8 -0
  15. package/dist/modules/Popup.d.ts +7 -0
  16. package/dist/modules/ProcessManager.d.ts +10 -0
  17. package/dist/modules/Signer.d.ts +9 -0
  18. package/dist/modules/index.d.ts +8 -0
  19. package/dist/types.d.ts +72 -0
  20. package/dist/unpkg.js +17 -0
  21. package/dist/utils/index.d.ts +27 -0
  22. package/dist/utils/nip44.d.ts +9 -0
  23. package/index.html +30 -0
  24. package/package.json +28 -0
  25. package/rollup.config.js +55 -0
  26. package/src/const/index.ts +1 -0
  27. package/src/iife-module.ts +81 -0
  28. package/src/index.ts +347 -0
  29. package/src/modules/AuthNostrService.ts +756 -0
  30. package/src/modules/BannerManager.ts +146 -0
  31. package/src/modules/ModalManager.ts +635 -0
  32. package/src/modules/Nip46.ts +441 -0
  33. package/src/modules/Nostr.ts +107 -0
  34. package/src/modules/NostrExtensionService.ts +99 -0
  35. package/src/modules/NostrParams.ts +18 -0
  36. package/src/modules/Popup.ts +27 -0
  37. package/src/modules/ProcessManager.ts +67 -0
  38. package/src/modules/Signer.ts +25 -0
  39. package/src/modules/index.ts +8 -0
  40. package/src/types.ts +124 -0
  41. package/src/utils/index.ts +326 -0
  42. package/src/utils/nip44.ts +185 -0
  43. package/tsconfig.json +15 -0
@@ -0,0 +1,84 @@
1
+ import { ConnectionString, Info } from 'nostr-login-components';
2
+ import { NostrParams } from './';
3
+ import { EventEmitter } from 'tseep';
4
+ import { Signer } from './Nostr';
5
+ declare class AuthNostrService extends EventEmitter implements Signer {
6
+ private ndk;
7
+ private profileNdk;
8
+ private signer;
9
+ private localSigner;
10
+ private params;
11
+ private signerPromise?;
12
+ private signerErrCallback?;
13
+ private readyPromise?;
14
+ private readyCallback?;
15
+ private nip44Codec;
16
+ private nostrConnectKey;
17
+ private nostrConnectSecret;
18
+ private iframe?;
19
+ private starterReady?;
20
+ nip04: {
21
+ encrypt: (pubkey: string, plaintext: string) => Promise<string>;
22
+ decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
23
+ };
24
+ nip44: {
25
+ encrypt: (pubkey: string, plaintext: string) => Promise<string>;
26
+ decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
27
+ };
28
+ constructor(params: NostrParams);
29
+ isIframe(): boolean;
30
+ waitReady(): Promise<void>;
31
+ cancelNostrConnect(): void;
32
+ nostrConnect(relay?: string, { domain, link, iframeUrl, importConnect, }?: {
33
+ domain?: string;
34
+ link?: string;
35
+ importConnect?: boolean;
36
+ iframeUrl?: string;
37
+ }): Promise<Info>;
38
+ createNostrConnect(relay?: string): Promise<string>;
39
+ getNostrConnectServices(): Promise<[string, ConnectionString[]]>;
40
+ localSignup(name: string, sk?: string): Promise<void>;
41
+ setLocal(info: Info, signup?: boolean): Promise<void>;
42
+ prepareImportUrl(url: string): string;
43
+ importAndConnect(cs: ConnectionString): Promise<void>;
44
+ setReadOnly(pubkey: string): void;
45
+ setExtension(pubkey: string): void;
46
+ setOTP(pubkey: string, data: string): void;
47
+ setConnect(info: Info): Promise<void>;
48
+ createAccount(nip05: string): Promise<{
49
+ bunkerUrl: string;
50
+ sk: string | undefined;
51
+ }>;
52
+ private releaseSigner;
53
+ logout(keepSigner?: boolean): Promise<void>;
54
+ private setUserInfo;
55
+ exportKeys(): "" | `nsec1${string}`;
56
+ private onAuth;
57
+ private createIframe;
58
+ sendNeedAuth(): Promise<void>;
59
+ isAuthing(): boolean;
60
+ startAuth(): Promise<void>;
61
+ endAuth(): Promise<void>;
62
+ resetAuth(): void;
63
+ private listen;
64
+ connect(info: Info, perms?: string): Promise<void>;
65
+ initSigner(info: Info, { listen, connect, eventToAddAccount }?: {
66
+ listen?: boolean | undefined;
67
+ connect?: boolean | undefined;
68
+ eventToAddAccount?: boolean | undefined;
69
+ }): Promise<void>;
70
+ authNip46(type: 'login' | 'signup', { name, bunkerUrl, sk, domain, iframeUrl }: {
71
+ name: string;
72
+ bunkerUrl: string;
73
+ sk?: string;
74
+ domain?: string;
75
+ iframeUrl?: string;
76
+ }): Promise<void>;
77
+ signEvent(event: any): Promise<any>;
78
+ private codec_call;
79
+ encrypt04(pubkey: string, plaintext: string): Promise<string>;
80
+ decrypt04(pubkey: string, ciphertext: string): Promise<string>;
81
+ encrypt44(pubkey: string, plaintext: string): Promise<string>;
82
+ decrypt44(pubkey: string, ciphertext: string): Promise<string>;
83
+ }
84
+ export default AuthNostrService;
@@ -0,0 +1,20 @@
1
+ import { NostrLoginOptions } from '../types';
2
+ import { NostrParams } from '.';
3
+ import { Info } from 'nostr-login-components';
4
+ import { EventEmitter } from 'tseep';
5
+ declare class BannerManager extends EventEmitter {
6
+ private banner;
7
+ private iframeReady?;
8
+ private params;
9
+ constructor(params: NostrParams);
10
+ onAuthUrl(url: string, iframeUrl: string): void;
11
+ onIframeRestart(iframeUrl: string): void;
12
+ onUserInfo(info: Info | null): void;
13
+ onCallTimeout(): void;
14
+ onCallStart(): void;
15
+ onCallEnd(): Promise<void>;
16
+ onUpdateAccounts(accounts: Info[]): void;
17
+ onDarkMode(dark: boolean): void;
18
+ launchAuthBanner(opt: NostrLoginOptions): void;
19
+ }
20
+ export default BannerManager;
@@ -0,0 +1,25 @@
1
+ import { NostrLoginOptions } from '../types';
2
+ import { AuthNostrService, NostrExtensionService, NostrParams } from '.';
3
+ import { EventEmitter } from 'tseep';
4
+ import { Info, RecentType } from 'nostr-login-components';
5
+ declare class ModalManager extends EventEmitter {
6
+ private modal;
7
+ private params;
8
+ private extensionService;
9
+ private authNostrService;
10
+ private launcherPromise?;
11
+ private accounts;
12
+ private recents;
13
+ private opt?;
14
+ constructor(params: NostrParams, authNostrService: AuthNostrService, extensionManager: NostrExtensionService);
15
+ waitReady(): Promise<void>;
16
+ launch(opt: NostrLoginOptions): Promise<void>;
17
+ showIframeUrl(url: string): Promise<void>;
18
+ connectModals(defaultOpt: NostrLoginOptions): void;
19
+ onAuthUrl(url: string): void;
20
+ onIframeUrl(url: string): void;
21
+ onCallEnd(): void;
22
+ onUpdateAccounts(accounts: Info[], recents: RecentType[]): void;
23
+ onDarkMode(dark: boolean): void;
24
+ }
25
+ export default ModalManager;
@@ -0,0 +1,56 @@
1
+ import NDK, { NDKEvent, NDKFilter, NDKNip46Signer, NDKNostrRpc, NDKRpcRequest, NDKRpcResponse, NDKSubscription } from '@nostr-dev-kit/ndk';
2
+ import { PrivateKeySigner } from './Signer';
3
+ declare class NostrRpc extends NDKNostrRpc {
4
+ protected _ndk: NDK;
5
+ protected _signer: PrivateKeySigner;
6
+ protected requests: Set<string>;
7
+ private sub?;
8
+ protected _useNip44: boolean;
9
+ constructor(ndk: NDK, signer: PrivateKeySigner);
10
+ subscribe(filter: NDKFilter): Promise<NDKSubscription>;
11
+ stop(): void;
12
+ setUseNip44(useNip44: boolean): void;
13
+ private isNip04;
14
+ parseEvent(event: NDKEvent): Promise<NDKRpcRequest | NDKRpcResponse>;
15
+ parseNostrConnectReply(reply: any, secret: string): Promise<string>;
16
+ listen(nostrConnectSecret: string): Promise<string>;
17
+ connect(pubkey: string, token?: string, perms?: string): Promise<void>;
18
+ protected getId(): string;
19
+ sendRequest(remotePubkey: string, method: string, params?: string[], kind?: number, cb?: (res: NDKRpcResponse) => void): Promise<NDKRpcResponse>;
20
+ protected setResponseHandler(id: string, cb?: (res: NDKRpcResponse) => void): Promise<NDKRpcResponse>;
21
+ protected createRequestEvent(id: string, remotePubkey: string, method: string, params?: string[], kind?: number): Promise<NDKEvent>;
22
+ }
23
+ export declare class IframeNostrRpc extends NostrRpc {
24
+ private peerOrigin?;
25
+ private iframePort?;
26
+ private iframeRequests;
27
+ constructor(ndk: NDK, localSigner: PrivateKeySigner, iframePeerOrigin?: string);
28
+ subscribe(filter: NDKFilter): Promise<NDKSubscription>;
29
+ setWorkerIframePort(port: MessagePort): void;
30
+ sendRequest(remotePubkey: string, method: string, params?: string[], kind?: number, cb?: (res: NDKRpcResponse) => void): Promise<NDKRpcResponse>;
31
+ }
32
+ export declare class ReadyListener {
33
+ origin: string;
34
+ messages: string[];
35
+ promise: Promise<any>;
36
+ constructor(messages: string[], origin: string);
37
+ wait(): Promise<any>;
38
+ }
39
+ export declare class Nip46Signer extends NDKNip46Signer {
40
+ private _userPubkey;
41
+ private _rpc;
42
+ constructor(ndk: NDK, localSigner: PrivateKeySigner, signerPubkey: string, iframeOrigin?: string);
43
+ get userPubkey(): string;
44
+ private setSignerPubkey;
45
+ initUserPubkey(hintPubkey?: string): Promise<void>;
46
+ listen(nostrConnectSecret: string): Promise<void>;
47
+ connect(token?: string, perms?: string): Promise<void>;
48
+ setListenReply(reply: any, nostrConnectSecret: string): Promise<void>;
49
+ createAccount2({ bunkerPubkey, name, domain, perms }: {
50
+ bunkerPubkey: string;
51
+ name: string;
52
+ domain: string;
53
+ perms?: string;
54
+ }): Promise<string>;
55
+ }
56
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Info } from 'nostr-login-components';
2
+ export interface Signer {
3
+ signEvent: (event: any) => Promise<any>;
4
+ nip04: {
5
+ encrypt: (pubkey: string, plaintext: string) => Promise<string>;
6
+ decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
7
+ };
8
+ nip44: {
9
+ encrypt: (pubkey: string, plaintext: string) => Promise<string>;
10
+ decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
11
+ };
12
+ }
13
+ export interface NostrObjectParams {
14
+ waitReady(): Promise<void>;
15
+ getUserInfo(): Info | null;
16
+ launch(): Promise<void>;
17
+ getSigner(): Signer;
18
+ wait<T>(cb: () => Promise<T>): Promise<T>;
19
+ }
20
+ declare class Nostr {
21
+ #private;
22
+ private nip04;
23
+ private nip44;
24
+ constructor(params: NostrObjectParams);
25
+ private ensureAuth;
26
+ getPublicKey(): Promise<string>;
27
+ signEvent(event: any): Promise<any>;
28
+ getRelays(): Promise<{}>;
29
+ encrypt04(pubkey: string, plaintext: string): Promise<string>;
30
+ decrypt04(pubkey: string, ciphertext: string): Promise<string>;
31
+ encrypt44(pubkey: string, plaintext: string): Promise<string>;
32
+ decrypt44(pubkey: string, ciphertext: string): Promise<string>;
33
+ }
34
+ export default Nostr;
@@ -0,0 +1,17 @@
1
+ import { Nostr, NostrParams } from './';
2
+ import { EventEmitter } from 'tseep';
3
+ declare class NostrExtensionService extends EventEmitter {
4
+ private params;
5
+ private nostrExtension;
6
+ constructor(params: NostrParams);
7
+ startCheckingExtension(nostr: Nostr): void;
8
+ private checkExtension;
9
+ private initExtension;
10
+ private setExtensionReadPubkey;
11
+ trySetExtensionForPubkey(expectedPubkey: string): Promise<void>;
12
+ setExtension(): Promise<void>;
13
+ unsetExtension(nostr: Nostr): void;
14
+ getExtension(): any;
15
+ hasExtension(): boolean;
16
+ }
17
+ export default NostrExtensionService;
@@ -0,0 +1,8 @@
1
+ import { Info } from 'nostr-login-components';
2
+ import { NostrLoginOptions } from '../types';
3
+ declare class NostrParams {
4
+ userInfo: Info | null;
5
+ optionsModal: NostrLoginOptions;
6
+ constructor();
7
+ }
8
+ export default NostrParams;
@@ -0,0 +1,7 @@
1
+ declare class Popup {
2
+ private popup;
3
+ constructor();
4
+ openPopup(url: string): void;
5
+ closePopup(): void;
6
+ }
7
+ export default Popup;
@@ -0,0 +1,10 @@
1
+ import { EventEmitter } from 'tseep';
2
+ declare class ProcessManager extends EventEmitter {
3
+ private callCount;
4
+ private callTimer;
5
+ constructor();
6
+ onAuthUrl(): void;
7
+ onIframeUrl(): void;
8
+ wait<T>(cb: () => Promise<T>): Promise<T>;
9
+ }
10
+ export default ProcessManager;
@@ -0,0 +1,9 @@
1
+ import { NDKPrivateKeySigner, NDKUser } from '@nostr-dev-kit/ndk';
2
+ export declare class PrivateKeySigner extends NDKPrivateKeySigner {
3
+ private nip44;
4
+ private _pubkey;
5
+ constructor(privateKey: string);
6
+ get pubkey(): string;
7
+ encryptNip44(recipient: NDKUser, value: string): Promise<string>;
8
+ decryptNip44(sender: NDKUser, value: string): Promise<string>;
9
+ }
@@ -0,0 +1,8 @@
1
+ export { default as BannerManager } from './BannerManager';
2
+ export { default as AuthNostrService } from './AuthNostrService';
3
+ export { default as ModalManager } from './ModalManager';
4
+ export { default as Nostr } from './Nostr';
5
+ export { default as NostrExtensionService } from './NostrExtensionService';
6
+ export { default as NostrParams } from './NostrParams';
7
+ export { default as Popup } from './Popup';
8
+ export { default as ProcessManager } from './ProcessManager';
@@ -0,0 +1,72 @@
1
+ import { Info, AuthMethod, ConnectionString, RecentType, BannerNotify } from 'nostr-login-components';
2
+ export interface NostrLoginAuthOptions {
3
+ localNsec?: string;
4
+ relays?: string[];
5
+ type: 'login' | 'signup' | 'logout';
6
+ method?: AuthMethod;
7
+ pubkey?: string;
8
+ otpData?: string;
9
+ name?: string;
10
+ }
11
+ export type StartScreens = 'welcome' | 'welcome-login' | 'welcome-signup' | 'signup' | 'local-signup' | 'login' | 'otp' | 'connect' | 'login-bunker-url' | 'login-read-only' | 'connection-string' | 'switch-account' | 'import';
12
+ export interface NostrLoginOptions {
13
+ theme?: string;
14
+ startScreen?: StartScreens;
15
+ bunkers?: string;
16
+ onAuth?: (npub: string, options: NostrLoginAuthOptions) => void;
17
+ perms?: string;
18
+ darkMode?: boolean;
19
+ noBanner?: boolean;
20
+ devOverrideBunkerOrigin?: string;
21
+ localSignup?: boolean;
22
+ methods?: AuthMethod[];
23
+ otpRequestUrl?: string;
24
+ otpReplyUrl?: string;
25
+ title?: string;
26
+ description?: string;
27
+ signupRelays?: string;
28
+ outboxRelays?: string[];
29
+ dev?: boolean;
30
+ signupNstart?: boolean;
31
+ followNpubs?: string;
32
+ customNostrConnect?: boolean;
33
+ }
34
+ export interface IBanner {
35
+ userInfo?: Info | null;
36
+ titleBanner?: string;
37
+ isLoading?: boolean;
38
+ listNotifies?: string[];
39
+ accounts?: Info[];
40
+ isOpen?: boolean;
41
+ darkMode?: boolean;
42
+ notify?: BannerNotify;
43
+ }
44
+ export type TypeBanner = IBanner & HTMLElement;
45
+ export interface IModal {
46
+ authUrl?: string;
47
+ iframeUrl?: string;
48
+ isLoading?: boolean;
49
+ isOTP?: boolean;
50
+ isLoadingExtension?: boolean;
51
+ localSignup?: boolean;
52
+ signupNjump?: boolean;
53
+ njumpIframe?: string;
54
+ authMethods?: AuthMethod[];
55
+ hasExtension?: boolean;
56
+ hasOTP?: boolean;
57
+ error?: string;
58
+ signupNameIsAvailable?: string | boolean;
59
+ loginIsGood?: string | boolean;
60
+ recents?: RecentType[];
61
+ accounts?: Info[];
62
+ darkMode?: boolean;
63
+ welcomeTitle?: string;
64
+ welcomeDescription?: string;
65
+ connectionString?: string;
66
+ connectionStringServices?: ConnectionString[];
67
+ }
68
+ export type TypeModal = IModal & HTMLElement;
69
+ export interface Response {
70
+ result?: string;
71
+ error?: string;
72
+ }