@atproto/syntax 0.3.0 → 0.3.1
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/CHANGELOG.md +6 -0
- package/dist/aturi_validation.js +4 -4
- package/dist/aturi_validation.js.map +1 -1
- package/dist/did.js +6 -6
- package/dist/did.js.map +1 -1
- package/dist/handle.js +1 -1
- package/dist/handle.js.map +1 -1
- package/dist/nsid.js +2 -2
- package/dist/nsid.js.map +1 -1
- package/dist/recordkey.js +1 -1
- package/dist/recordkey.js.map +1 -1
- package/dist/tid.js +1 -1
- package/dist/tid.js.map +1 -1
- package/package.json +3 -3
- package/src/aturi_validation.ts +4 -4
- package/src/did.ts +7 -7
- package/src/handle.ts +1 -1
- package/src/nsid.ts +2 -2
- package/src/recordkey.ts +1 -1
- package/src/tid.ts +1 -1
- package/tests/aturi.test.ts +1 -1
- package/tests/datetime.test.ts +3 -3
- package/tests/did.test.ts +2 -2
- package/tests/handle.test.ts +2 -2
- package/tests/nsid.test.ts +2 -2
- package/tests/recordkey.test.ts +2 -2
- package/tests/tid.test.ts +2 -2
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.tests.tsbuildinfo +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atproto/syntax
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2911](https://github.com/bluesky-social/atproto/pull/2911) [`bac9be2d3`](https://github.com/bluesky-social/atproto/commit/bac9be2d3ec904d1f984a871f43cf89aca17289d) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Improve performances of did validation
|
|
8
|
+
|
|
3
9
|
## 0.3.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/dist/aturi_validation.js
CHANGED
|
@@ -30,7 +30,7 @@ const ensureValidAtUri = (uri) => {
|
|
|
30
30
|
throw new Error('Disallowed characters in ATURI (ASCII)');
|
|
31
31
|
}
|
|
32
32
|
const parts = uri.split('/');
|
|
33
|
-
if (parts.length >= 3 && (parts[0]
|
|
33
|
+
if (parts.length >= 3 && (parts[0] !== 'at:' || parts[1].length !== 0)) {
|
|
34
34
|
throw new Error('ATURI must start with "at://"');
|
|
35
35
|
}
|
|
36
36
|
if (parts.length < 3) {
|
|
@@ -48,7 +48,7 @@ const ensureValidAtUri = (uri) => {
|
|
|
48
48
|
throw new Error('ATURI authority must be a valid handle or DID');
|
|
49
49
|
}
|
|
50
50
|
if (parts.length >= 4) {
|
|
51
|
-
if (parts[3].length
|
|
51
|
+
if (parts[3].length === 0) {
|
|
52
52
|
throw new Error('ATURI can not have a slash after authority without a path segment');
|
|
53
53
|
}
|
|
54
54
|
try {
|
|
@@ -59,7 +59,7 @@ const ensureValidAtUri = (uri) => {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
if (parts.length >= 5) {
|
|
62
|
-
if (parts[4].length
|
|
62
|
+
if (parts[4].length === 0) {
|
|
63
63
|
throw new Error('ATURI can not have a slash after collection, unless record key is provided');
|
|
64
64
|
}
|
|
65
65
|
// would validate rkey here, but there are basically no constraints!
|
|
@@ -71,7 +71,7 @@ const ensureValidAtUri = (uri) => {
|
|
|
71
71
|
throw new Error('ATURI fragment must be non-empty and start with slash');
|
|
72
72
|
}
|
|
73
73
|
if (fragmentPart != null) {
|
|
74
|
-
if (fragmentPart.length
|
|
74
|
+
if (fragmentPart.length === 0 || fragmentPart[0] !== '/') {
|
|
75
75
|
throw new Error('ATURI fragment must be non-empty and start with slash');
|
|
76
76
|
}
|
|
77
77
|
// NOTE: enforcing *some* checks here for sanity. Eg, at least no whitespace
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aturi_validation.js","sourceRoot":"","sources":["../src/aturi_validation.ts"],"names":[],"mappings":";;;AAAA,qCAAoE;AACpE,+BAA2D;AAC3D,iCAA8D;AAE9D,uCAAuC;AACvC,+DAA+D;AAC/D,oCAAoC;AACpC,6EAA6E;AAC7E,wBAAwB;AACxB,sDAAsD;AACtD,iFAAiF;AACjF,kEAAkE;AAClE,8EAA8E;AAC9E,+HAA+H;AAC/H,0CAA0C;AAC1C,0CAA0C;AAC1C,wGAAwG;AACjG,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9C,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACxC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEjB,wCAAwC;IACxC,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"aturi_validation.js","sourceRoot":"","sources":["../src/aturi_validation.ts"],"names":[],"mappings":"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"}
|
package/dist/did.js
CHANGED
|
@@ -15,18 +15,18 @@ exports.InvalidDidError = exports.ensureValidDidRegex = exports.ensureValidDid =
|
|
|
15
15
|
// - hard length limit of 8KBytes
|
|
16
16
|
// - not going to validate "percent encoding" here
|
|
17
17
|
const ensureValidDid = (did) => {
|
|
18
|
+
if (!did.startsWith('did:')) {
|
|
19
|
+
throw new InvalidDidError('DID requires "did:" prefix');
|
|
20
|
+
}
|
|
18
21
|
// check that all chars are boring ASCII
|
|
19
22
|
if (!/^[a-zA-Z0-9._:%-]*$/.test(did)) {
|
|
20
23
|
throw new InvalidDidError('Disallowed characters in DID (ASCII letters, digits, and a couple other characters only)');
|
|
21
24
|
}
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
25
|
+
const { length, 1: method } = did.split(':');
|
|
26
|
+
if (length < 3) {
|
|
24
27
|
throw new InvalidDidError('DID requires prefix, method, and method-specific content');
|
|
25
28
|
}
|
|
26
|
-
if (
|
|
27
|
-
throw new InvalidDidError('DID requires "did:" prefix');
|
|
28
|
-
}
|
|
29
|
-
if (!/^[a-z]+$/.test(parts[1])) {
|
|
29
|
+
if (!/^[a-z]+$/.test(method)) {
|
|
30
30
|
throw new InvalidDidError('DID method must be lower-case letters');
|
|
31
31
|
}
|
|
32
32
|
if (did.endsWith(':') || did.endsWith('%')) {
|
package/dist/did.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"did.js","sourceRoot":"","sources":["../src/did.ts"],"names":[],"mappings":";;;AAAA,8BAA8B;AAC9B,iEAAiE;AACjE,+CAA+C;AAC/C,2CAA2C;AAC3C,wEAAwE;AACxE,sFAAsF;AACtF,qFAAqF;AACrF,wHAAwH;AACxH,8GAA8G;AAC9G,6FAA6F;AAC7F,qGAAqG;AACrG,mCAAmC;AACnC,oDAAoD;AAC7C,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;IAClD,
|
|
1
|
+
{"version":3,"file":"did.js","sourceRoot":"","sources":["../src/did.ts"],"names":[],"mappings":";;;AAAA,8BAA8B;AAC9B,iEAAiE;AACjE,+CAA+C;AAC/C,2CAA2C;AAC3C,wEAAwE;AACxE,sFAAsF;AACtF,qFAAqF;AACrF,wHAAwH;AACxH,8GAA8G;AAC9G,6FAA6F;AAC7F,qGAAqG;AACrG,mCAAmC;AACnC,oDAAoD;AAC7C,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;IAClD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CAAC,4BAA4B,CAAC,CAAA;IACzD,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,CACvB,0FAA0F,CAC3F,CAAA;IACH,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CACvB,0DAA0D,CAC3D,CAAA;IACH,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CAAC,uCAAuC,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,eAAe,CAAC,iCAAiC,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC,CAAA;AA9BY,QAAA,cAAc,kBA8B1B;AAEM,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAQ,EAAE;IACvD,sEAAsE;IACtE,mDAAmD;IACnD,IAAI,CAAC,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,eAAe,CAAC,+BAA+B,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC,CAAA;AAVY,QAAA,mBAAmB,uBAU/B;AAED,MAAa,eAAgB,SAAQ,KAAK;CAAG;AAA7C,0CAA6C"}
|
package/dist/handle.js
CHANGED
|
@@ -61,7 +61,7 @@ const ensureValidHandle = (handle) => {
|
|
|
61
61
|
if (l.endsWith('-') || l.startsWith('-')) {
|
|
62
62
|
throw new InvalidHandleError('Handle parts can not start or end with hyphens');
|
|
63
63
|
}
|
|
64
|
-
if (i + 1
|
|
64
|
+
if (i + 1 === labels.length && !/^[a-zA-Z]/.test(l)) {
|
|
65
65
|
throw new InvalidHandleError('Handle final component (TLD) must start with ASCII letter');
|
|
66
66
|
}
|
|
67
67
|
}
|
package/dist/handle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../src/handle.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,gBAAgB,CAAA;AAE9C,yEAAyE;AACzE,+EAA+E;AAC/E,wBAAwB;AACxB,4EAA4E;AAC/D,QAAA,eAAe,GAAG;IAC7B,QAAQ;IACR,OAAO;IACP,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,MAAM;IACN,uDAAuD;IACvD,QAAQ;IACR,sEAAsE;IACtE,qEAAqE;CACtE,CAAA;AAED,kCAAkC;AAClC,oCAAoC;AACpC,4EAA4E;AAC5E,6EAA6E;AAC7E,kBAAkB;AAClB,uEAAuE;AACvE,0CAA0C;AAC1C,0DAA0D;AAC1D,oDAAoD;AACpD,oFAAoF;AACpF,wDAAwD;AACxD,uEAAuE;AACvE,wBAAwB;AACxB,mEAAmE;AACnE,iDAAiD;AACjD,mDAAmD;AACnD,yEAAyE;AACzE,wCAAwC;AACxC,gCAAgC;AACzB,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAQ,EAAE;IACxD,wCAAwC;IACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAC1B,+EAA+E,CAChF,CAAA;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC,oCAAoC,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC,wCAAwC,CAAC,CAAA;IACxE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,CACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../src/handle.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,gBAAgB,CAAA;AAE9C,yEAAyE;AACzE,+EAA+E;AAC/E,wBAAwB;AACxB,4EAA4E;AAC/D,QAAA,eAAe,GAAG;IAC7B,QAAQ;IACR,OAAO;IACP,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,MAAM;IACN,uDAAuD;IACvD,QAAQ;IACR,sEAAsE;IACtE,qEAAqE;CACtE,CAAA;AAED,kCAAkC;AAClC,oCAAoC;AACpC,4EAA4E;AAC5E,6EAA6E;AAC7E,kBAAkB;AAClB,uEAAuE;AACvE,0CAA0C;AAC1C,0DAA0D;AAC1D,oDAAoD;AACpD,oFAAoF;AACpF,wDAAwD;AACxD,uEAAuE;AACvE,wBAAwB;AACxB,mEAAmE;AACnE,iDAAiD;AACjD,mDAAmD;AACnD,yEAAyE;AACzE,wCAAwC;AACxC,gCAAgC;AACzB,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAQ,EAAE;IACxD,wCAAwC;IACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAC1B,+EAA+E,CAChF,CAAA;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC,oCAAoC,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC,wCAAwC,CAAC,CAAA;IACxE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,CACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,kBAAkB,CAC1B,2DAA2D,CAC5D,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAlCY,QAAA,iBAAiB,qBAkC7B;AAED,gDAAgD;AACzC,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAQ,EAAE;IAC7D,IACE,CAAC,4FAA4F,CAAC,IAAI,CAChG,MAAM,CACP,EACD,CAAC;QACD,MAAM,IAAI,kBAAkB,CAAC,kCAAkC,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC,oCAAoC,CAAC,CAAA;IACpE,CAAC;AACH,CAAC,CAAA;AAXY,QAAA,sBAAsB,0BAWlC;AAEM,MAAM,eAAe,GAAG,CAAC,MAAc,EAAU,EAAE;IACxD,OAAO,MAAM,CAAC,WAAW,EAAE,CAAA;AAC7B,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B;AAEM,MAAM,6BAA6B,GAAG,CAAC,MAAc,EAAU,EAAE;IACtE,MAAM,UAAU,GAAG,IAAA,uBAAe,EAAC,MAAM,CAAC,CAAA;IAC1C,IAAA,yBAAiB,EAAC,UAAU,CAAC,CAAA;IAC7B,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAJY,QAAA,6BAA6B,iCAIzC;AAEM,MAAM,aAAa,GAAG,CAAC,MAAc,EAAW,EAAE;IACvD,IAAI,CAAC;QACH,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;YACtC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAXY,QAAA,aAAa,iBAWzB;AAEM,MAAM,UAAU,GAAG,CAAC,MAAc,EAAW,EAAE;IACpD,OAAO,CAAC,uBAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAFY,QAAA,UAAU,cAEtB;AAED,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD;AAChD,MAAa,mBAAoB,SAAQ,KAAK;CAAG;AAAjD,kDAAiD;AACjD,MAAa,sBAAuB,SAAQ,KAAK;CAAG;AAApD,wDAAoD;AACpD,MAAa,qBAAsB,SAAQ,KAAK;CAAG;AAAnD,sDAAmD"}
|
package/dist/nsid.js
CHANGED
|
@@ -81,10 +81,10 @@ const ensureValidNsid = (nsid) => {
|
|
|
81
81
|
if (l.endsWith('-') || l.startsWith('-')) {
|
|
82
82
|
throw new InvalidNsidError('NSID parts can not start or end with hyphen');
|
|
83
83
|
}
|
|
84
|
-
if (/^[0-9]/.test(l) && i
|
|
84
|
+
if (/^[0-9]/.test(l) && i === 0) {
|
|
85
85
|
throw new InvalidNsidError('NSID first part may not start with a digit');
|
|
86
86
|
}
|
|
87
|
-
if (!/^[a-zA-Z]+$/.test(l) && i + 1
|
|
87
|
+
if (!/^[a-zA-Z]+$/.test(l) && i + 1 === labels.length) {
|
|
88
88
|
throw new InvalidNsidError('NSID name part must be only letters');
|
|
89
89
|
}
|
|
90
90
|
}
|
package/dist/nsid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nsid.js","sourceRoot":"","sources":["../src/nsid.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nsid.js","sourceRoot":"","sources":["../src/nsid.ts"],"names":[],"mappings":"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"}
|
package/dist/recordkey.js
CHANGED
|
@@ -9,7 +9,7 @@ const ensureValidRecordKey = (rkey) => {
|
|
|
9
9
|
if (!/^[a-zA-Z0-9_~.:-]{1,512}$/.test(rkey)) {
|
|
10
10
|
throw new InvalidRecordKeyError('record key syntax not valid (regex)');
|
|
11
11
|
}
|
|
12
|
-
if (rkey
|
|
12
|
+
if (rkey === '.' || rkey === '..')
|
|
13
13
|
throw new InvalidRecordKeyError('record key can not be "." or ".."');
|
|
14
14
|
};
|
|
15
15
|
exports.ensureValidRecordKey = ensureValidRecordKey;
|
package/dist/recordkey.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordkey.js","sourceRoot":"","sources":["../src/recordkey.ts"],"names":[],"mappings":";;;AAAO,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAQ,EAAE;IACzD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAAC,wCAAwC,CAAC,CAAA;IAC3E,CAAC;IACD,sEAAsE;IACtE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"recordkey.js","sourceRoot":"","sources":["../src/recordkey.ts"],"names":[],"mappings":";;;AAAO,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAQ,EAAE;IACzD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAAC,wCAAwC,CAAC,CAAA;IAC3E,CAAC;IACD,sEAAsE;IACtE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;QAC/B,MAAM,IAAI,qBAAqB,CAAC,mCAAmC,CAAC,CAAA;AACxE,CAAC,CAAA;AAVY,QAAA,oBAAoB,wBAUhC;AAEM,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;IACxD,IAAI,CAAC;QACH,IAAA,4BAAoB,EAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;YACzC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAXY,QAAA,gBAAgB,oBAW5B;AAED,MAAa,qBAAsB,SAAQ,KAAK;CAAG;AAAnD,sDAAmD"}
|
package/dist/tid.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InvalidTidError = exports.isValidTid = exports.ensureValidTid = void 0;
|
|
4
4
|
const ensureValidTid = (tid) => {
|
|
5
|
-
if (tid.length
|
|
5
|
+
if (tid.length !== 13) {
|
|
6
6
|
throw new InvalidTidError('TID must be 13 characters');
|
|
7
7
|
}
|
|
8
8
|
// simple regex to enforce most constraints via just regex and length.
|
package/dist/tid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;IAClD,IAAI,GAAG,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAA;IACxD,CAAC;IACD,sEAAsE;IACtE,IAAI,CAAC,4DAA4D,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,eAAe,CAAC,8BAA8B,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC,CAAA;AARY,QAAA,cAAc,kBAQ1B;AAEM,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE;IACjD,IAAI,CAAC;QACH,IAAA,sBAAc,EAAC,GAAG,CAAC,CAAA;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAXY,QAAA,UAAU,cAWtB;AAED,MAAa,eAAgB,SAAQ,KAAK;CAAG;AAA7C,0CAA6C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/syntax",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Validation for atproto identifiers and formats: DID, handle, NSID, AT URI, etc",
|
|
6
6
|
"keywords": [
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
},
|
|
18
18
|
"main": "dist/index.js",
|
|
19
19
|
"types": "dist/index.d.ts",
|
|
20
|
-
"dependencies": {},
|
|
21
20
|
"devDependencies": {
|
|
22
|
-
"jest": "^28.1.2"
|
|
21
|
+
"jest": "^28.1.2",
|
|
22
|
+
"typescript": "^5.6.3"
|
|
23
23
|
},
|
|
24
24
|
"browser": {
|
|
25
25
|
"dns/promises": false
|
package/src/aturi_validation.ts
CHANGED
|
@@ -30,7 +30,7 @@ export const ensureValidAtUri = (uri: string) => {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const parts = uri.split('/')
|
|
33
|
-
if (parts.length >= 3 && (parts[0]
|
|
33
|
+
if (parts.length >= 3 && (parts[0] !== 'at:' || parts[1].length !== 0)) {
|
|
34
34
|
throw new Error('ATURI must start with "at://"')
|
|
35
35
|
}
|
|
36
36
|
if (parts.length < 3) {
|
|
@@ -48,7 +48,7 @@ export const ensureValidAtUri = (uri: string) => {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
if (parts.length >= 4) {
|
|
51
|
-
if (parts[3].length
|
|
51
|
+
if (parts[3].length === 0) {
|
|
52
52
|
throw new Error(
|
|
53
53
|
'ATURI can not have a slash after authority without a path segment',
|
|
54
54
|
)
|
|
@@ -63,7 +63,7 @@ export const ensureValidAtUri = (uri: string) => {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
if (parts.length >= 5) {
|
|
66
|
-
if (parts[4].length
|
|
66
|
+
if (parts[4].length === 0) {
|
|
67
67
|
throw new Error(
|
|
68
68
|
'ATURI can not have a slash after collection, unless record key is provided',
|
|
69
69
|
)
|
|
@@ -82,7 +82,7 @@ export const ensureValidAtUri = (uri: string) => {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
if (fragmentPart != null) {
|
|
85
|
-
if (fragmentPart.length
|
|
85
|
+
if (fragmentPart.length === 0 || fragmentPart[0] !== '/') {
|
|
86
86
|
throw new Error('ATURI fragment must be non-empty and start with slash')
|
|
87
87
|
}
|
|
88
88
|
// NOTE: enforcing *some* checks here for sanity. Eg, at least no whitespace
|
package/src/did.ts
CHANGED
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
// - hard length limit of 8KBytes
|
|
13
13
|
// - not going to validate "percent encoding" here
|
|
14
14
|
export const ensureValidDid = (did: string): void => {
|
|
15
|
+
if (!did.startsWith('did:')) {
|
|
16
|
+
throw new InvalidDidError('DID requires "did:" prefix')
|
|
17
|
+
}
|
|
18
|
+
|
|
15
19
|
// check that all chars are boring ASCII
|
|
16
20
|
if (!/^[a-zA-Z0-9._:%-]*$/.test(did)) {
|
|
17
21
|
throw new InvalidDidError(
|
|
@@ -19,18 +23,14 @@ export const ensureValidDid = (did: string): void => {
|
|
|
19
23
|
)
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
26
|
+
const { length, 1: method } = did.split(':')
|
|
27
|
+
if (length < 3) {
|
|
24
28
|
throw new InvalidDidError(
|
|
25
29
|
'DID requires prefix, method, and method-specific content',
|
|
26
30
|
)
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
if (
|
|
30
|
-
throw new InvalidDidError('DID requires "did:" prefix')
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (!/^[a-z]+$/.test(parts[1])) {
|
|
33
|
+
if (!/^[a-z]+$/.test(method)) {
|
|
34
34
|
throw new InvalidDidError('DID method must be lower-case letters')
|
|
35
35
|
}
|
|
36
36
|
|
package/src/handle.ts
CHANGED
|
@@ -65,7 +65,7 @@ export const ensureValidHandle = (handle: string): void => {
|
|
|
65
65
|
'Handle parts can not start or end with hyphens',
|
|
66
66
|
)
|
|
67
67
|
}
|
|
68
|
-
if (i + 1
|
|
68
|
+
if (i + 1 === labels.length && !/^[a-zA-Z]/.test(l)) {
|
|
69
69
|
throw new InvalidHandleError(
|
|
70
70
|
'Handle final component (TLD) must start with ASCII letter',
|
|
71
71
|
)
|
package/src/nsid.ts
CHANGED
|
@@ -84,10 +84,10 @@ export const ensureValidNsid = (nsid: string): void => {
|
|
|
84
84
|
if (l.endsWith('-') || l.startsWith('-')) {
|
|
85
85
|
throw new InvalidNsidError('NSID parts can not start or end with hyphen')
|
|
86
86
|
}
|
|
87
|
-
if (/^[0-9]/.test(l) && i
|
|
87
|
+
if (/^[0-9]/.test(l) && i === 0) {
|
|
88
88
|
throw new InvalidNsidError('NSID first part may not start with a digit')
|
|
89
89
|
}
|
|
90
|
-
if (!/^[a-zA-Z]+$/.test(l) && i + 1
|
|
90
|
+
if (!/^[a-zA-Z]+$/.test(l) && i + 1 === labels.length) {
|
|
91
91
|
throw new InvalidNsidError('NSID name part must be only letters')
|
|
92
92
|
}
|
|
93
93
|
}
|
package/src/recordkey.ts
CHANGED
|
@@ -6,7 +6,7 @@ export const ensureValidRecordKey = (rkey: string): void => {
|
|
|
6
6
|
if (!/^[a-zA-Z0-9_~.:-]{1,512}$/.test(rkey)) {
|
|
7
7
|
throw new InvalidRecordKeyError('record key syntax not valid (regex)')
|
|
8
8
|
}
|
|
9
|
-
if (rkey
|
|
9
|
+
if (rkey === '.' || rkey === '..')
|
|
10
10
|
throw new InvalidRecordKeyError('record key can not be "." or ".."')
|
|
11
11
|
}
|
|
12
12
|
|
package/src/tid.ts
CHANGED
package/tests/aturi.test.ts
CHANGED
package/tests/datetime.test.ts
CHANGED
|
@@ -26,7 +26,7 @@ describe('datetime validation', () => {
|
|
|
26
26
|
terminal: false,
|
|
27
27
|
})
|
|
28
28
|
lineReader.on('line', (line) => {
|
|
29
|
-
if (line.startsWith('#') || line.length
|
|
29
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
30
30
|
return
|
|
31
31
|
}
|
|
32
32
|
if (!isValidDatetime(line)) {
|
|
@@ -44,7 +44,7 @@ describe('datetime validation', () => {
|
|
|
44
44
|
terminal: false,
|
|
45
45
|
})
|
|
46
46
|
lineReader.on('line', (line) => {
|
|
47
|
-
if (line.startsWith('#') || line.length
|
|
47
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
48
48
|
return
|
|
49
49
|
}
|
|
50
50
|
expectInvalid(line)
|
|
@@ -59,7 +59,7 @@ describe('datetime validation', () => {
|
|
|
59
59
|
terminal: false,
|
|
60
60
|
})
|
|
61
61
|
lineReader.on('line', (line) => {
|
|
62
|
-
if (line.startsWith('#') || line.length
|
|
62
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
63
63
|
return
|
|
64
64
|
}
|
|
65
65
|
expectInvalid(line)
|
package/tests/did.test.ts
CHANGED
|
@@ -75,7 +75,7 @@ describe('DID permissive validation', () => {
|
|
|
75
75
|
terminal: false,
|
|
76
76
|
})
|
|
77
77
|
lineReader.on('line', (line) => {
|
|
78
|
-
if (line.startsWith('#') || line.length
|
|
78
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
79
79
|
return
|
|
80
80
|
}
|
|
81
81
|
expectValid(line)
|
|
@@ -90,7 +90,7 @@ describe('DID permissive validation', () => {
|
|
|
90
90
|
terminal: false,
|
|
91
91
|
})
|
|
92
92
|
lineReader.on('line', (line) => {
|
|
93
|
-
if (line.startsWith('#') || line.length
|
|
93
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
94
94
|
return
|
|
95
95
|
}
|
|
96
96
|
expectInvalid(line)
|
package/tests/handle.test.ts
CHANGED
|
@@ -201,7 +201,7 @@ describe('handle validation', () => {
|
|
|
201
201
|
terminal: false,
|
|
202
202
|
})
|
|
203
203
|
lineReader.on('line', (line) => {
|
|
204
|
-
if (line.startsWith('#') || line.length
|
|
204
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
205
205
|
return
|
|
206
206
|
}
|
|
207
207
|
expectValid(line)
|
|
@@ -216,7 +216,7 @@ describe('handle validation', () => {
|
|
|
216
216
|
terminal: false,
|
|
217
217
|
})
|
|
218
218
|
lineReader.on('line', (line) => {
|
|
219
|
-
if (line.startsWith('#') || line.length
|
|
219
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
220
220
|
return
|
|
221
221
|
}
|
|
222
222
|
expectInvalid(line)
|
package/tests/nsid.test.ts
CHANGED
|
@@ -134,7 +134,7 @@ describe('NSID validation', () => {
|
|
|
134
134
|
terminal: false,
|
|
135
135
|
})
|
|
136
136
|
lineReader.on('line', (line) => {
|
|
137
|
-
if (line.startsWith('#') || line.length
|
|
137
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
138
138
|
return
|
|
139
139
|
}
|
|
140
140
|
expectValid(line)
|
|
@@ -149,7 +149,7 @@ describe('NSID validation', () => {
|
|
|
149
149
|
terminal: false,
|
|
150
150
|
})
|
|
151
151
|
lineReader.on('line', (line) => {
|
|
152
|
-
if (line.startsWith('#') || line.length
|
|
152
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
153
153
|
return
|
|
154
154
|
}
|
|
155
155
|
expectInvalid(line)
|
package/tests/recordkey.test.ts
CHANGED
|
@@ -18,7 +18,7 @@ describe('recordkey validation', () => {
|
|
|
18
18
|
terminal: false,
|
|
19
19
|
})
|
|
20
20
|
lineReader.on('line', (line) => {
|
|
21
|
-
if (line.startsWith('#') || line.length
|
|
21
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
22
22
|
return
|
|
23
23
|
}
|
|
24
24
|
expectValid(line)
|
|
@@ -33,7 +33,7 @@ describe('recordkey validation', () => {
|
|
|
33
33
|
terminal: false,
|
|
34
34
|
})
|
|
35
35
|
lineReader.on('line', (line) => {
|
|
36
|
-
if (line.startsWith('#') || line.length
|
|
36
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
37
37
|
return
|
|
38
38
|
}
|
|
39
39
|
expectInvalid(line)
|
package/tests/tid.test.ts
CHANGED
|
@@ -18,7 +18,7 @@ describe('tid validation', () => {
|
|
|
18
18
|
terminal: false,
|
|
19
19
|
})
|
|
20
20
|
lineReader.on('line', (line) => {
|
|
21
|
-
if (line.startsWith('#') || line.length
|
|
21
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
22
22
|
return
|
|
23
23
|
}
|
|
24
24
|
expectValid(line)
|
|
@@ -33,7 +33,7 @@ describe('tid validation', () => {
|
|
|
33
33
|
terminal: false,
|
|
34
34
|
})
|
|
35
35
|
lineReader.on('line', (line) => {
|
|
36
|
-
if (line.startsWith('#') || line.length
|
|
36
|
+
if (line.startsWith('#') || line.length === 0) {
|
|
37
37
|
return
|
|
38
38
|
}
|
|
39
39
|
expectInvalid(line)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["./src/aturi.ts","./src/aturi_validation.ts","./src/datetime.ts","./src/did.ts","./src/handle.ts","./src/index.ts","./src/nsid.ts","./src/recordkey.ts","./src/tid.ts"],"version":"5.6.3"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["./tests/aturi.test.ts","./tests/datetime.test.ts","./tests/did.test.ts","./tests/handle.test.ts","./tests/nsid.test.ts","./tests/recordkey.test.ts","./tests/tid.test.ts"],"version":"5.6.3"}
|