syntax: update to allow non-leading digits in NSID 'name' part (#3633)
* syntax: allow non-leading digits in NSID 'name' part * update (copied) interop tests * prettier
This commit is contained in:
parent
9332c0f315
commit
a07aca9737
@ -32,3 +32,4 @@ at://did:abc:123/io.nsid.someFunc/-
|
||||
at://did:abc:123/io.nsid.someFunc/_
|
||||
at://did:abc:123/io.nsid.someFunc/~
|
||||
at://did:abc:123/io.nsid.someFunc/...
|
||||
at://did:plc:asdf123/com.atproto.feed.postV2
|
||||
|
@ -3,15 +3,13 @@ com.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo
|
||||
com.example.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
|
||||
com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.foo
|
||||
|
||||
# invliad examples
|
||||
# invalid examples
|
||||
com.example.foo.*
|
||||
com.example.foo.blah*
|
||||
com.example.foo.*blah
|
||||
com.example.f00
|
||||
com.exa💩ple.thing
|
||||
a-0.b-1.c-3
|
||||
a-0.b-1.c-o
|
||||
a0.b1.c3
|
||||
1.0.0.127.record
|
||||
0two.example.foo
|
||||
example.com
|
||||
@ -29,4 +27,4 @@ com.atproto.feed.p*st
|
||||
com.atproto.feed.po#t
|
||||
com.atproto.feed.p!ot
|
||||
com.example-.foo
|
||||
|
||||
com.example.fooBar.2
|
||||
|
@ -5,6 +5,7 @@ com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle
|
||||
|
||||
# valid examples
|
||||
com.example.fooBar
|
||||
com.example.fooBarV2
|
||||
net.users.bob.ping
|
||||
a.b.c
|
||||
m.xn--masekowski-d0b.pl
|
||||
@ -18,6 +19,8 @@ test.12345.record
|
||||
a01.thing.record
|
||||
a.0.c
|
||||
xn--fiqs8s.xn--fiqa61au8b7zsevnm8ak20mc4a87e.record.two
|
||||
a0.b1.c3
|
||||
com.example.f00
|
||||
|
||||
# allows onion (Tor) NSIDs
|
||||
onion.expyuzz4wqqyqhjn.spec.getThing
|
||||
|
@ -87,8 +87,10 @@ export const ensureValidNsid = (nsid: string): void => {
|
||||
if (/^[0-9]/.test(l) && i === 0) {
|
||||
throw new InvalidNsidError('NSID first part may not start with a digit')
|
||||
}
|
||||
if (!/^[a-zA-Z]+$/.test(l) && i + 1 === labels.length) {
|
||||
throw new InvalidNsidError('NSID name part must be only letters')
|
||||
if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(l) && i + 1 === labels.length) {
|
||||
throw new InvalidNsidError(
|
||||
'NSID name part must be only letters and digits (and no leading digit)',
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -97,7 +99,7 @@ export const ensureValidNsidRegex = (nsid: string): void => {
|
||||
// simple regex to enforce most constraints via just regex and length.
|
||||
// hand wrote this regex based on above constraints
|
||||
if (
|
||||
!/^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z]{0,61}[a-zA-Z])?)$/.test(
|
||||
!/^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/.test(
|
||||
nsid,
|
||||
)
|
||||
) {
|
||||
|
@ -83,15 +83,15 @@ describe('NSID validation', () => {
|
||||
expectValid('a01.thing.record')
|
||||
expectValid('a.0.c')
|
||||
expectValid('xn--fiqs8s.xn--fiqa61au8b7zsevnm8ak20mc4a87e.record.two')
|
||||
expectValid('a0.b1.c3')
|
||||
expectValid('com.example.f00')
|
||||
|
||||
expectInvalid('com.example.foo.*')
|
||||
expectInvalid('com.example.foo.blah*')
|
||||
expectInvalid('com.example.foo.*blah')
|
||||
expectInvalid('com.example.f00')
|
||||
expectInvalid('com.exa💩ple.thing')
|
||||
expectInvalid('a-0.b-1.c-3')
|
||||
expectInvalid('a-0.b-1.c-o')
|
||||
expectInvalid('a0.b1.c3')
|
||||
expectInvalid('1.0.0.127.record')
|
||||
expectInvalid('0two.example.foo')
|
||||
expectInvalid('example.com')
|
||||
|
Loading…
x
Reference in New Issue
Block a user