ns-auth-sdk 1.2.6 → 1.3.0
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/README.md +33 -16
- package/dist/index.cjs +1397 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +115 -16
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +289 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +232 -157
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1342 -1206
- package/dist/index.mjs.map +1 -1
- package/dist/utils-BR2TqhEA.cjs +3 -0
- package/dist/utils-BVvtCpMQ.mjs +3 -0
- package/dist/utils-CV_lg5Ir.mjs +492 -0
- package/dist/utils-CV_lg5Ir.mjs.map +1 -0
- package/dist/utils-CxLeFzNn.cjs +528 -0
- package/dist/utils-CxLeFzNn.cjs.map +1 -0
- package/package.json +18 -17
- package/dist/index.d.ts +0 -214
- package/dist/index.js +0 -1234
- package/dist/index.js.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,214 +1,289 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import * as zustand from 'zustand';
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import * as zustand0 from "zustand";
|
|
3
|
+
import { EventStore } from "applesauce-core";
|
|
5
4
|
|
|
5
|
+
//#region src/utils/types.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Type definitions for Nosskey SDK (PRF Direct Usage Only)
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Nostr event JSON
|
|
13
|
+
*/
|
|
14
|
+
interface NostrEvent$1 {
|
|
15
|
+
id?: string;
|
|
16
|
+
pubkey?: string;
|
|
17
|
+
created_at?: number;
|
|
18
|
+
kind: number;
|
|
19
|
+
tags?: string[][];
|
|
20
|
+
content: string;
|
|
21
|
+
sig?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Nostr key information (PRF)
|
|
25
|
+
* PWKBlob
|
|
26
|
+
*/
|
|
27
|
+
interface NostrKeyInfo {
|
|
28
|
+
credentialId: string;
|
|
29
|
+
pubkey: string;
|
|
30
|
+
salt: string;
|
|
31
|
+
username?: string;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/types/auth.d.ts
|
|
6
35
|
/**
|
|
7
36
|
* Authentication state interface
|
|
8
37
|
*/
|
|
9
38
|
interface AuthState {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
39
|
+
isAuthenticated: boolean;
|
|
40
|
+
publicKey: string | null;
|
|
41
|
+
keyInfo: NostrKeyInfo | null;
|
|
42
|
+
loginError: string | null;
|
|
43
|
+
setAuthenticated: (keyInfo: NostrKeyInfo | null) => void;
|
|
44
|
+
setLoginError: (error: string | null) => void;
|
|
45
|
+
logout: () => void;
|
|
17
46
|
}
|
|
18
47
|
/**
|
|
19
48
|
* Auth service configuration
|
|
20
49
|
*/
|
|
21
50
|
interface AuthServiceConfig {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
51
|
+
rpId?: string;
|
|
52
|
+
rpName?: string;
|
|
53
|
+
storageKey?: string;
|
|
54
|
+
cacheTimeoutMs?: number;
|
|
26
55
|
}
|
|
27
56
|
/**
|
|
28
57
|
* Relay service configuration
|
|
29
58
|
*/
|
|
30
59
|
interface RelayServiceConfig {
|
|
31
|
-
|
|
60
|
+
relayUrls?: string[];
|
|
32
61
|
}
|
|
33
|
-
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/services/auth.service.d.ts
|
|
34
64
|
/**
|
|
35
65
|
* Service wrapper around NosskeyManager
|
|
36
66
|
* Handles WebAuthn/Passkey integration with Nostr
|
|
37
67
|
*/
|
|
38
68
|
declare class AuthService {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
private manager;
|
|
70
|
+
private config;
|
|
71
|
+
constructor(config?: AuthServiceConfig);
|
|
72
|
+
private getDefaultRpName;
|
|
73
|
+
/**
|
|
74
|
+
* Initialize the NosskeyManager instance
|
|
75
|
+
*/
|
|
76
|
+
private getManager;
|
|
77
|
+
/**
|
|
78
|
+
* Create a new passkey
|
|
79
|
+
* Uses platform authenticator only (Touch ID, Face ID, Windows Hello)
|
|
80
|
+
*/
|
|
81
|
+
createPasskey(username?: string): Promise<Uint8Array>;
|
|
82
|
+
/**
|
|
83
|
+
* Create a new Nostr key from a credential ID
|
|
84
|
+
*/
|
|
85
|
+
createNostrKey(credentialId?: Uint8Array): Promise<NostrKeyInfo>;
|
|
86
|
+
/**
|
|
87
|
+
* Get the current public key
|
|
88
|
+
*/
|
|
89
|
+
getPublicKey(): Promise<string>;
|
|
90
|
+
/**
|
|
91
|
+
* Sign a Nostr event
|
|
92
|
+
*/
|
|
93
|
+
signEvent(event: NostrEvent$1): Promise<NostrEvent$1>;
|
|
94
|
+
/**
|
|
95
|
+
* Get current key info
|
|
96
|
+
*/
|
|
97
|
+
getCurrentKeyInfo(): NostrKeyInfo | null;
|
|
98
|
+
/**
|
|
99
|
+
* Set current key info
|
|
100
|
+
*/
|
|
101
|
+
setCurrentKeyInfo(keyInfo: NostrKeyInfo): void;
|
|
102
|
+
/**
|
|
103
|
+
* Check if key info exists
|
|
104
|
+
*/
|
|
105
|
+
hasKeyInfo(): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Clear stored key info
|
|
108
|
+
*/
|
|
109
|
+
clearStoredKeyInfo(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Check if PRF is supported
|
|
112
|
+
*/
|
|
113
|
+
isPrfSupported(): Promise<boolean>;
|
|
84
114
|
}
|
|
85
|
-
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/types/nostr.d.ts
|
|
86
117
|
/**
|
|
87
118
|
* Nostr event types
|
|
88
119
|
*/
|
|
89
120
|
interface NostrEvent {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
121
|
+
id?: string;
|
|
122
|
+
pubkey?: string;
|
|
123
|
+
created_at?: number;
|
|
124
|
+
kind: number;
|
|
125
|
+
tags?: string[][];
|
|
126
|
+
content: string;
|
|
127
|
+
sig?: string;
|
|
97
128
|
}
|
|
98
129
|
/**
|
|
99
130
|
* Profile metadata (Kind 0)
|
|
100
131
|
*/
|
|
101
132
|
interface ProfileMetadata {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
133
|
+
name?: string;
|
|
134
|
+
display_name?: string;
|
|
135
|
+
about?: string;
|
|
136
|
+
picture?: string;
|
|
137
|
+
website?: string;
|
|
138
|
+
[key: string]: unknown;
|
|
108
139
|
}
|
|
109
140
|
/**
|
|
110
141
|
* Follow list entry (from Kind 3 tags)
|
|
111
142
|
*/
|
|
112
143
|
interface FollowEntry {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
144
|
+
pubkey: string;
|
|
145
|
+
relay?: string;
|
|
146
|
+
petname?: string;
|
|
116
147
|
}
|
|
117
|
-
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/services/relay.service.d.ts
|
|
118
150
|
/**
|
|
119
151
|
* Service for communicating with Nostr relays using applesauce-core
|
|
120
152
|
*/
|
|
121
153
|
declare class RelayService {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
154
|
+
private eventStore;
|
|
155
|
+
private relayUrls;
|
|
156
|
+
private defaultRelays;
|
|
157
|
+
private readonly maxProfileContentSize;
|
|
158
|
+
private readonly minProfileQueryIntervalMs;
|
|
159
|
+
private readonly minPublishIntervalMs;
|
|
160
|
+
private readonly lastActionAt;
|
|
161
|
+
constructor(config?: RelayServiceConfig);
|
|
162
|
+
/**
|
|
163
|
+
* Initialize with applesauce EventStore
|
|
164
|
+
*/
|
|
165
|
+
initialize(eventStore: EventStore): void;
|
|
166
|
+
/**
|
|
167
|
+
* Set relay URLs
|
|
168
|
+
*/
|
|
169
|
+
setRelays(urls: string[]): void;
|
|
170
|
+
/**
|
|
171
|
+
* Get current relay URLs
|
|
172
|
+
*/
|
|
173
|
+
getRelays(): string[];
|
|
174
|
+
/**
|
|
175
|
+
* Publish an event to relays
|
|
176
|
+
*/
|
|
177
|
+
publishEvent(event: NostrEvent, timeoutMs?: number): Promise<boolean>;
|
|
178
|
+
/**
|
|
179
|
+
* Fetch a profile (Kind 0 event)
|
|
180
|
+
*/
|
|
181
|
+
fetchProfile(pubkey: string): Promise<ProfileMetadata | null>;
|
|
182
|
+
/**
|
|
183
|
+
* Fetch role tag from profile event (Kind 0)
|
|
184
|
+
*/
|
|
185
|
+
fetchProfileRoleTag(pubkey: string): Promise<string | null>;
|
|
186
|
+
/**
|
|
187
|
+
* Fetch a follow list (Kind 3 event)
|
|
188
|
+
*/
|
|
189
|
+
fetchFollowList(pubkey: string): Promise<FollowEntry[]>;
|
|
190
|
+
/**
|
|
191
|
+
* Fetch multiple profiles in batch
|
|
192
|
+
*/
|
|
193
|
+
fetchMultipleProfiles(pubkeys: string[]): Promise<Map<string, ProfileMetadata>>;
|
|
194
|
+
/**
|
|
195
|
+
* Query kind 0 events (profiles) by pubkey
|
|
196
|
+
* If pubkeys array is empty, fetches recent kind 0 events
|
|
197
|
+
*/
|
|
198
|
+
queryProfiles(pubkeys?: string[], limit?: number): Promise<Map<string, ProfileMetadata>>;
|
|
199
|
+
/**
|
|
200
|
+
* Publish or update a kind 3 event (follow list/contacts)
|
|
201
|
+
*/
|
|
202
|
+
publishFollowList(pubkey: string, followList: FollowEntry[], signEvent: (event: NostrEvent) => Promise<NostrEvent>): Promise<boolean>;
|
|
203
|
+
private validateRelayUrls;
|
|
204
|
+
private parseProfileMetadata;
|
|
205
|
+
private enforceRateLimit;
|
|
163
206
|
}
|
|
164
|
-
|
|
207
|
+
//#endregion
|
|
208
|
+
//#region src/components/auth/LoginButton.d.ts
|
|
165
209
|
interface LoginButtonProps {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
210
|
+
authService: AuthService;
|
|
211
|
+
setAuthenticated: AuthState['setAuthenticated'];
|
|
212
|
+
setLoginError: AuthState['setLoginError'];
|
|
213
|
+
onSuccess?: () => void;
|
|
170
214
|
}
|
|
171
|
-
declare function LoginButton({
|
|
172
|
-
|
|
215
|
+
declare function LoginButton({
|
|
216
|
+
authService,
|
|
217
|
+
setAuthenticated,
|
|
218
|
+
setLoginError,
|
|
219
|
+
onSuccess
|
|
220
|
+
}: LoginButtonProps): react_jsx_runtime0.JSX.Element;
|
|
221
|
+
//#endregion
|
|
222
|
+
//#region src/components/auth/RegistrationFlow.d.ts
|
|
173
223
|
interface RegistrationFlowProps {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
224
|
+
authService: AuthService;
|
|
225
|
+
setAuthenticated: AuthState['setAuthenticated'];
|
|
226
|
+
onSuccess?: () => void;
|
|
177
227
|
}
|
|
178
|
-
declare function RegistrationFlow({
|
|
179
|
-
|
|
228
|
+
declare function RegistrationFlow({
|
|
229
|
+
authService,
|
|
230
|
+
setAuthenticated,
|
|
231
|
+
onSuccess
|
|
232
|
+
}: RegistrationFlowProps): react_jsx_runtime0.JSX.Element;
|
|
233
|
+
//#endregion
|
|
234
|
+
//#region src/components/membership/MembershipPage.d.ts
|
|
180
235
|
interface MembershipPageProps {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
236
|
+
authService: AuthService;
|
|
237
|
+
relayService: RelayService;
|
|
238
|
+
publicKey: string | null;
|
|
239
|
+
onUnauthenticated?: () => void;
|
|
185
240
|
}
|
|
186
|
-
declare function MembershipPage({
|
|
187
|
-
|
|
241
|
+
declare function MembershipPage({
|
|
242
|
+
authService,
|
|
243
|
+
relayService,
|
|
244
|
+
publicKey,
|
|
245
|
+
onUnauthenticated
|
|
246
|
+
}: MembershipPageProps): react_jsx_runtime0.JSX.Element;
|
|
247
|
+
//#endregion
|
|
248
|
+
//#region src/components/membership/BarcodeScanner.d.ts
|
|
188
249
|
interface BarcodeScannerProps {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
250
|
+
/** Called when a code is successfully read */
|
|
251
|
+
onDecode: (value: string) => void;
|
|
252
|
+
/** Optional flag to hide the scanner */
|
|
253
|
+
active?: boolean;
|
|
193
254
|
}
|
|
194
|
-
declare const BarcodeScanner: ({
|
|
195
|
-
|
|
255
|
+
declare const BarcodeScanner: ({
|
|
256
|
+
onDecode,
|
|
257
|
+
active
|
|
258
|
+
}: BarcodeScannerProps) => react_jsx_runtime0.JSX.Element | null;
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region src/components/profile/ProfilePage.d.ts
|
|
196
261
|
interface ProfilePageProps {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
262
|
+
authService: AuthService;
|
|
263
|
+
relayService: RelayService;
|
|
264
|
+
publicKey: string | null;
|
|
265
|
+
onUnauthenticated?: () => void;
|
|
266
|
+
onSuccess?: () => void;
|
|
267
|
+
onRoleSuggestion?: (about: string) => Promise<string | null>;
|
|
203
268
|
}
|
|
204
|
-
declare function ProfilePage({
|
|
205
|
-
|
|
269
|
+
declare function ProfilePage({
|
|
270
|
+
authService,
|
|
271
|
+
relayService,
|
|
272
|
+
publicKey,
|
|
273
|
+
onUnauthenticated,
|
|
274
|
+
onSuccess,
|
|
275
|
+
onRoleSuggestion
|
|
276
|
+
}: ProfilePageProps): react_jsx_runtime0.JSX.Element;
|
|
277
|
+
//#endregion
|
|
278
|
+
//#region src/hooks/useAuth.d.ts
|
|
206
279
|
/**
|
|
207
280
|
* Hook to initialize auth state on app load
|
|
208
281
|
*/
|
|
209
282
|
declare function useAuthInit(authService: AuthService, setAuthenticated: AuthState['setAuthenticated']): void;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
declare const
|
|
213
|
-
|
|
283
|
+
//#endregion
|
|
284
|
+
//#region src/store/authStore.d.ts
|
|
285
|
+
declare const createAuthStore: () => zustand0.UseBoundStore<zustand0.StoreApi<AuthState>>;
|
|
286
|
+
declare const useAuthStore: zustand0.UseBoundStore<zustand0.StoreApi<AuthState>>;
|
|
287
|
+
//#endregion
|
|
214
288
|
export { AuthService, type AuthServiceConfig, type AuthState, BarcodeScanner, type FollowEntry, LoginButton, MembershipPage, type NostrEvent, type ProfileMetadata, ProfilePage, RegistrationFlow, RelayService, type RelayServiceConfig, createAuthStore, useAuthInit, useAuthStore };
|
|
289
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/utils/types.ts","../src/types/auth.ts","../src/services/auth.service.ts","../src/types/nostr.ts","../src/services/relay.service.ts","../src/components/auth/LoginButton.tsx","../src/components/auth/RegistrationFlow.tsx","../src/components/membership/MembershipPage.tsx","../src/components/membership/BarcodeScanner.tsx","../src/components/profile/ProfilePage.tsx","../src/hooks/useAuth.ts","../src/store/authStore.ts"],"sourcesContent":[],"mappings":"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"}
|