Compare commits

...

4 Commits

Author SHA1 Message Date
fiatjaf
d81a2444b3 release v1.12.1 2023-06-29 15:25:32 -03:00
Alex Gleason
7507943253 Fix nip27.matchAll crash on invalid nip19 2023-06-29 15:24:25 -03:00
PMK
b9a7f814aa Update Kind for ProfileBadge and BadgeDefinition 2023-06-20 15:40:55 -03:00
fiatjaf
0e364701da link to ndk and snort system. 2023-06-17 08:37:20 -03:00
5 changed files with 37 additions and 13 deletions

View File

@@ -4,6 +4,8 @@ Tools for developing [Nostr](https://github.com/fiatjaf/nostr) clients.
Only depends on _@scure_ and _@noble_ packages. Only depends on _@scure_ and _@noble_ packages.
This package is only providing lower-level functionality. If you want an easy-to-use fully-fledged solution that abstracts the hard parts of Nostr and makes decisions on your behalf, take a look at [NDK](https://github.com/nostr-dev-kit/ndk) and [@snort/system](https://www.npmjs.com/package/@snort/system).
## Installation ## Installation
```bash ```bash

View File

@@ -27,8 +27,8 @@ export enum Kind {
Zap = 9735, Zap = 9735,
RelayList = 10002, RelayList = 10002,
ClientAuth = 22242, ClientAuth = 22242,
BadgeDefinition = 30008, ProfileBadge = 30008,
ProfileBadge = 30009, BadgeDefinition = 30009,
Article = 30023 Article = 30023
} }

View File

@@ -29,6 +29,25 @@ test('matchAll', () => {
]) ])
}) })
test('matchAll with an invalid nip19', () => {
const result = matchAll(
'Hello npub129tvj896hqqkljerxkccpj9flshwnw999v9uwn9lfmwlj8vnzwgq9y5llnpub1rujdpkd8mwezrvpqd2rx2zphfaztqrtsfg6w3vdnlj!\n\nnostr:note1gmtnz6q2m55epmlpe3semjdcq987av3jvx4emmjsa8g3s9x7tg4sclreky'
)
expect([...result]).toEqual([
{
decoded: {
data: '46d731680add2990efe1cc619dc9b8014feeb23261ab9dee50e9d11814de5a2b',
type: 'note'
},
end: 187,
start: 118,
uri: 'nostr:note1gmtnz6q2m55epmlpe3semjdcq987av3jvx4emmjsa8g3s9x7tg4sclreky',
value: 'note1gmtnz6q2m55epmlpe3semjdcq987av3jvx4emmjsa8g3s9x7tg4sclreky'
}
])
})
test('replaceAll', () => { test('replaceAll', () => {
const content = const content =
'Hello nostr:npub108pv4cg5ag52nq082kd5leu9ffrn2gdg6g4xdwatn73y36uzplmq9uyev6!\n\nnostr:note1gmtnz6q2m55epmlpe3semjdcq987av3jvx4emmjsa8g3s9x7tg4sclreky' 'Hello nostr:npub108pv4cg5ag52nq082kd5leu9ffrn2gdg6g4xdwatn73y36uzplmq9uyev6!\n\nnostr:note1gmtnz6q2m55epmlpe3semjdcq987av3jvx4emmjsa8g3s9x7tg4sclreky'

View File

@@ -2,8 +2,7 @@ import {decode} from './nip19.ts'
import {NOSTR_URI_REGEX, type NostrURI} from './nip21.ts' import {NOSTR_URI_REGEX, type NostrURI} from './nip21.ts'
/** Regex to find NIP-21 URIs inside event content. */ /** Regex to find NIP-21 URIs inside event content. */
export const regex = () => export const regex = () => new RegExp(`\\b${NOSTR_URI_REGEX.source}\\b`, 'g')
new RegExp(`\\b${NOSTR_URI_REGEX.source}\\b`, 'g')
/** Match result for a Nostr URI in event content. */ /** Match result for a Nostr URI in event content. */
export interface NostrURIMatch extends NostrURI { export interface NostrURIMatch extends NostrURI {
@@ -18,6 +17,7 @@ export function * matchAll(content: string): Iterable<NostrURIMatch> {
const matches = content.matchAll(regex()) const matches = content.matchAll(regex())
for (const match of matches) { for (const match of matches) {
try {
const [uri, value] = match const [uri, value] = match
yield { yield {
@@ -27,6 +27,9 @@ export function * matchAll(content: string): Iterable<NostrURIMatch> {
start: match.index!, start: match.index!,
end: match.index! + uri.length end: match.index! + uri.length
} }
} catch (_e) {
// do nothing
}
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "nostr-tools", "name": "nostr-tools",
"version": "1.12.0", "version": "1.12.1",
"description": "Tools for making a Nostr client.", "description": "Tools for making a Nostr client.",
"repository": { "repository": {
"type": "git", "type": "git",