nostr-attestations 2.0.0 → 2.2.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 +27 -1
- package/dist/builders.d.ts.map +1 -1
- package/dist/builders.js +21 -7
- package/dist/builders.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +2 -0
- package/dist/parsers.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +22 -9
- package/dist/validators.js.map +1 -1
- package/dist/validity.d.ts +15 -0
- package/dist/validity.d.ts.map +1 -0
- package/dist/validity.js +43 -0
- package/dist/validity.js.map +1 -0
- package/package.json +5 -1
- package/vectors/attestations.json +217 -19
package/README.md
CHANGED
|
@@ -47,6 +47,31 @@ const event = createAttestation({
|
|
|
47
47
|
// type is inferred from the referenced assertion — no type tag needed
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
### Temporal Context
|
|
51
|
+
|
|
52
|
+
Record when the attested event actually happened, separate from when the attestation was published:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
const event = createAttestation({
|
|
56
|
+
type: TYPES.ENDORSEMENT,
|
|
57
|
+
subject: '<service-provider-pubkey>',
|
|
58
|
+
occurredAt: 1710900000, // service completed last Tuesday
|
|
59
|
+
summary: 'Completed frontend work ahead of schedule',
|
|
60
|
+
})
|
|
61
|
+
// created_at = when attestation published, occurred_at = when it happened
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### NIP-32 Labels
|
|
65
|
+
|
|
66
|
+
Typed attestations automatically include [NIP-32](https://github.com/nostr-protocol/nips/blob/master/32.md) namespace labels for relay-side discoverability:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
["L", "nip-va.type"]
|
|
70
|
+
["l", "credential", "nip-va.type"]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
This enables queries like `{"#l": ["credential"]}` across NIP-32-aware clients and relays.
|
|
74
|
+
|
|
50
75
|
## Why This?
|
|
51
76
|
|
|
52
77
|
Nostr has several ways to label or badge identities, but none designed for verifiable attestations. [NIP-58](https://github.com/nostr-protocol/nips/blob/master/58.md) badges are display-only — no expiry, no revocation, no structured claims. [NIP-85](https://github.com/nostr-protocol/nips/blob/master/85.md) covers social graph metrics, not arbitrary claims. [NIP-32](https://github.com/nostr-protocol/nips/blob/master/32.md) labels are lightweight but not individually replaceable per subject.
|
|
@@ -100,6 +125,7 @@ const attestation = parseAttestation(event)
|
|
|
100
125
|
// validTo: null, // validity window end
|
|
101
126
|
// request: null, // what prompted this attestation
|
|
102
127
|
// schema: null, // machine-readable schema URI
|
|
128
|
+
// occurredAt: null, // when the attested event happened
|
|
103
129
|
// revoked: false,
|
|
104
130
|
// reason: null,
|
|
105
131
|
// tags: [...],
|
|
@@ -152,7 +178,7 @@ const attestation = parseAttestation(event)
|
|
|
152
178
|
|
|
153
179
|
## Test Vectors
|
|
154
180
|
|
|
155
|
-
`vectors/attestations.json` contains
|
|
181
|
+
`vectors/attestations.json` contains 17 frozen conformance test vectors covering the full range of attestation types (credential, endorsement, vouch, verifier, provenance) and states (active, revoked, self-attestation). Any conformant implementation must produce identical parse results from these inputs. The vectors are pinned — if tests against them fail, the implementation is broken, not the vector.
|
|
156
182
|
|
|
157
183
|
## Attested on Nostr
|
|
158
184
|
|
package/dist/builders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEpF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEpF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAwH1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CA0CxE"}
|
package/dist/builders.js
CHANGED
|
@@ -15,6 +15,8 @@ export function createAttestation(params) {
|
|
|
15
15
|
if (hasType) {
|
|
16
16
|
if (params.type.includes(':'))
|
|
17
17
|
throw new Error('type must not contain colons');
|
|
18
|
+
if (params.type === 'assertion')
|
|
19
|
+
throw new Error('type value "assertion" is reserved');
|
|
18
20
|
}
|
|
19
21
|
if (hasAssertion) {
|
|
20
22
|
const a = params.assertion;
|
|
@@ -34,8 +36,12 @@ export function createAttestation(params) {
|
|
|
34
36
|
throw new Error('schema must not be empty');
|
|
35
37
|
}
|
|
36
38
|
const tags = [];
|
|
37
|
-
// d-tag construction
|
|
38
|
-
if (
|
|
39
|
+
// d-tag construction: assertion-first takes precedence
|
|
40
|
+
if (hasAssertion) {
|
|
41
|
+
const ref = params.assertion.id ?? params.assertion.address;
|
|
42
|
+
tags.push(['d', buildAssertionDTag(ref)]);
|
|
43
|
+
}
|
|
44
|
+
else if (hasType) {
|
|
39
45
|
const identifier = params.identifier ?? params.subject;
|
|
40
46
|
if (identifier) {
|
|
41
47
|
tags.push(['d', buildDTag(params.type, identifier)]);
|
|
@@ -43,12 +49,10 @@ export function createAttestation(params) {
|
|
|
43
49
|
else {
|
|
44
50
|
tags.push(['d', params.type]);
|
|
45
51
|
}
|
|
46
|
-
tags.push(['type', params.type]);
|
|
47
52
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
tags.push(['d', buildAssertionDTag(ref)]);
|
|
53
|
+
// type tag (present for both direct claims and hybrid attestations)
|
|
54
|
+
if (hasType) {
|
|
55
|
+
tags.push(['type', params.type]);
|
|
52
56
|
}
|
|
53
57
|
if (params.subject) {
|
|
54
58
|
tags.push(['p', params.subject]);
|
|
@@ -97,6 +101,16 @@ export function createAttestation(params) {
|
|
|
97
101
|
if (params.schema) {
|
|
98
102
|
tags.push(['schema', params.schema]);
|
|
99
103
|
}
|
|
104
|
+
if (params.occurredAt != null) {
|
|
105
|
+
if (!Number.isFinite(params.occurredAt))
|
|
106
|
+
throw new Error('occurredAt must be a finite number');
|
|
107
|
+
tags.push(['occurred_at', String(params.occurredAt)]);
|
|
108
|
+
}
|
|
109
|
+
// NIP-32 labels from type (not for assertion-only attestations)
|
|
110
|
+
if (hasType) {
|
|
111
|
+
tags.push(['L', 'nip-va.type']);
|
|
112
|
+
tags.push(['l', params.type, 'nip-va.type']);
|
|
113
|
+
}
|
|
100
114
|
if (params.tags) {
|
|
101
115
|
for (const tag of params.tags) {
|
|
102
116
|
tags.push(tag);
|
package/dist/builders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAA;IAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,IAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ export { createAttestation, createRevocation } from './builders.js';
|
|
|
3
3
|
export { parseAttestation, isRevoked } from './parsers.js';
|
|
4
4
|
export { validateAttestation } from './validators.js';
|
|
5
5
|
export { buildDTag, buildAssertionDTag, parseDTag, attestationFilter, revocationFilter } from './filters.js';
|
|
6
|
+
export { isValid } from './validity.js';
|
|
7
|
+
export type { ValidityResult } from './validity.js';
|
|
6
8
|
export type { AssertionRef, AttestationParams, RevocationParams, Attestation, ValidationResult, FilterParams, NostrFilter, NostrEvent, EventTemplate, } from './types.js';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE5G,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE5G,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export { createAttestation, createRevocation } from './builders.js';
|
|
|
3
3
|
export { parseAttestation, isRevoked } from './parsers.js';
|
|
4
4
|
export { validateAttestation } from './validators.js';
|
|
5
5
|
export { buildDTag, buildAssertionDTag, parseDTag, attestationFilter, revocationFilter } from './filters.js';
|
|
6
|
+
export { isValid } from './validity.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE5G,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/parsers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAUzD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAUzD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAuCtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGpD"}
|
package/dist/parsers.js
CHANGED
|
@@ -27,6 +27,7 @@ export function parseAttestation(event) {
|
|
|
27
27
|
const expirationStr = findTag(event.tags, 'expiration');
|
|
28
28
|
const validFromStr = findTag(event.tags, 'valid_from');
|
|
29
29
|
const validToStr = findTag(event.tags, 'valid_to');
|
|
30
|
+
const occurredAtStr = findTag(event.tags, 'occurred_at');
|
|
30
31
|
return {
|
|
31
32
|
kind: ATTESTATION_KIND,
|
|
32
33
|
type: type ?? TYPES.ASSERTION,
|
|
@@ -43,6 +44,7 @@ export function parseAttestation(event) {
|
|
|
43
44
|
validTo: validToStr ? Number(validToStr) : null,
|
|
44
45
|
request: findTag(event.tags, 'request'),
|
|
45
46
|
schema: findTag(event.tags, 'schema'),
|
|
47
|
+
occurredAt: occurredAtStr ? Number(occurredAtStr) : null,
|
|
46
48
|
revoked: findTag(event.tags, 'status') === 'revoked',
|
|
47
49
|
reason: findTag(event.tags, 'reason'),
|
|
48
50
|
tags: event.tags,
|
package/dist/parsers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAgB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,IAAI,CAAA;AACvF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEjD,wCAAwC;IACxC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACvD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export interface AttestationParams {
|
|
|
46
46
|
request?: string;
|
|
47
47
|
/** Machine-readable schema URI for regulatory mapping or application-profile identification. */
|
|
48
48
|
schema?: string;
|
|
49
|
+
/** Unix timestamp for when the attested event occurred (distinct from created_at). */
|
|
50
|
+
occurredAt?: number;
|
|
49
51
|
/** Additional application-specific tags. */
|
|
50
52
|
tags?: string[][];
|
|
51
53
|
/** Event content: empty string, human-readable text, or JSON. */
|
|
@@ -97,6 +99,8 @@ export interface Attestation {
|
|
|
97
99
|
request: string | null;
|
|
98
100
|
/** Machine-readable schema URI. */
|
|
99
101
|
schema: string | null;
|
|
102
|
+
/** When the attested event occurred (distinct from createdAt). */
|
|
103
|
+
occurredAt: number | null;
|
|
100
104
|
revoked: boolean;
|
|
101
105
|
reason: string | null;
|
|
102
106
|
/** All tags from the original event (for application-specific access). */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAwB9D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAwB9D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CA6FvE"}
|
package/dist/validators.js
CHANGED
|
@@ -46,21 +46,26 @@ export function validateAttestation(event) {
|
|
|
46
46
|
if (!type.trim()) {
|
|
47
47
|
errors.push('type tag must not be empty');
|
|
48
48
|
}
|
|
49
|
+
else if (type === 'assertion') {
|
|
50
|
+
errors.push('type value "assertion" is reserved');
|
|
51
|
+
}
|
|
49
52
|
else if (type.includes(':')) {
|
|
50
53
|
errors.push('type must not contain colons');
|
|
51
54
|
}
|
|
52
55
|
}
|
|
53
56
|
// d-tag consistency
|
|
54
|
-
if (dTag
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
if (dTag) {
|
|
58
|
+
if (hasAssertion) {
|
|
59
|
+
// Assertion takes precedence: d-tag must use assertion: prefix
|
|
60
|
+
if (!dTag.startsWith('assertion:')) {
|
|
61
|
+
errors.push('d tag must start with "assertion:" prefix when assertion reference is present');
|
|
62
|
+
}
|
|
58
63
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
else if (type && !type.includes(':')) {
|
|
65
|
+
// Direct claim: d-tag must start with type value
|
|
66
|
+
if (dTag !== type && !dTag.startsWith(`${type}:`)) {
|
|
67
|
+
errors.push(`d tag must start with type value "${type}"`);
|
|
68
|
+
}
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
// Assertion reference constraints
|
|
@@ -90,6 +95,14 @@ export function validateAttestation(event) {
|
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
}
|
|
98
|
+
// occurred_at validation
|
|
99
|
+
const occurredAtStr = findTag(event.tags, 'occurred_at');
|
|
100
|
+
if (occurredAtStr != null) {
|
|
101
|
+
const occurredAt = Number(occurredAtStr);
|
|
102
|
+
if (!Number.isFinite(occurredAt)) {
|
|
103
|
+
errors.push('occurred_at must be a valid timestamp');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
93
106
|
// schema validation
|
|
94
107
|
const schema = findTag(event.tags, 'schema');
|
|
95
108
|
if (schema != null && !schema.trim()) {
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC;;GAEG;AACH,SAAS,eAAe,CAAC,IAAgB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAA;AAC/E,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,MAAM,EAAE,CAAA;iBACrB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,MAAM,EAAE,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEhD,wCAAwC;IACxC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IACnE,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC;;GAEG;AACH,SAAS,eAAe,CAAC,IAAgB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAA;AAC/E,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,MAAM,EAAE,CAAA;iBACrB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,MAAM,EAAE,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEhD,wCAAwC;IACxC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IACnE,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC3C,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QACnD,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,YAAY,EAAE,CAAC;YACjB,+DAA+D;YAC/D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,iDAAiD;YACjD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,qCAAqC,IAAI,GAAG,CAAC,CAAA;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzD,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAClD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;YACtD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;gBACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;oBACvD,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IACxD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5C,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { NostrEvent } from './types.js';
|
|
2
|
+
export interface ValidityResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
reason?: 'revoked' | 'expired' | 'not-yet-active' | 'claim-expired';
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Check whether an attestation event is currently valid.
|
|
8
|
+
* Checks revocation, NIP-40 expiration, valid_from, and valid_to.
|
|
9
|
+
* Revocation always takes precedence.
|
|
10
|
+
*
|
|
11
|
+
* @param event - The attestation event to check
|
|
12
|
+
* @param now - Unix timestamp to check against (defaults to current time)
|
|
13
|
+
*/
|
|
14
|
+
export declare function isValid(event: NostrEvent, now?: number): ValidityResult;
|
|
15
|
+
//# sourceMappingURL=validity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validity.d.ts","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAA;CACpE;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,CAqCvE"}
|
package/dist/validity.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { findTag } from './helpers.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check whether an attestation event is currently valid.
|
|
4
|
+
* Checks revocation, NIP-40 expiration, valid_from, and valid_to.
|
|
5
|
+
* Revocation always takes precedence.
|
|
6
|
+
*
|
|
7
|
+
* @param event - The attestation event to check
|
|
8
|
+
* @param now - Unix timestamp to check against (defaults to current time)
|
|
9
|
+
*/
|
|
10
|
+
export function isValid(event, now) {
|
|
11
|
+
const ts = now ?? Math.floor(Date.now() / 1000);
|
|
12
|
+
// Revocation takes absolute precedence
|
|
13
|
+
const status = findTag(event.tags, 'status');
|
|
14
|
+
if (status === 'revoked') {
|
|
15
|
+
return { valid: false, reason: 'revoked' };
|
|
16
|
+
}
|
|
17
|
+
// NIP-40 expiration
|
|
18
|
+
const expirationStr = findTag(event.tags, 'expiration');
|
|
19
|
+
if (expirationStr != null) {
|
|
20
|
+
const expiration = Number(expirationStr);
|
|
21
|
+
if (Number.isFinite(expiration) && ts >= expiration) {
|
|
22
|
+
return { valid: false, reason: 'expired' };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Deferred activation (application-defined tag, checked as convenience)
|
|
26
|
+
const validFromStr = findTag(event.tags, 'valid_from');
|
|
27
|
+
if (validFromStr != null) {
|
|
28
|
+
const validFrom = Number(validFromStr);
|
|
29
|
+
if (Number.isFinite(validFrom) && ts < validFrom) {
|
|
30
|
+
return { valid: false, reason: 'not-yet-active' };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Claim validity window (application-defined tag, checked as convenience)
|
|
34
|
+
const validToStr = findTag(event.tags, 'valid_to');
|
|
35
|
+
if (validToStr != null) {
|
|
36
|
+
const validTo = Number(validToStr);
|
|
37
|
+
if (Number.isFinite(validTo) && ts >= validTo) {
|
|
38
|
+
return { valid: false, reason: 'claim-expired' };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { valid: true };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=validity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validity.js","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQtC;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,KAAiB,EAAE,GAAY;IACrD,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAE/C,uCAAuC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC5C,CAAC;IAED,oBAAoB;IACpB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACvD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;QACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACtD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;YACjD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;QACnD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAClD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAA;QAClD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nostr-attestations",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Builders, parsers, and validators for NIP-VA (kind 31000) Verifiable Attestation events on Nostr.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -72,5 +72,9 @@
|
|
|
72
72
|
"typescript": "^5.7.0",
|
|
73
73
|
"typescript-eslint": "^8.57.0",
|
|
74
74
|
"vitest": "^4.1.0"
|
|
75
|
+
},
|
|
76
|
+
"funding": {
|
|
77
|
+
"type": "lightning",
|
|
78
|
+
"url": "lightning:thedonkey@strike.me"
|
|
75
79
|
}
|
|
76
80
|
}
|
|
@@ -88,7 +88,8 @@
|
|
|
88
88
|
"assertionRelay": null,
|
|
89
89
|
"validTo": null,
|
|
90
90
|
"request": null,
|
|
91
|
-
"schema": null
|
|
91
|
+
"schema": null,
|
|
92
|
+
"occurredAt": null
|
|
92
93
|
},
|
|
93
94
|
"valid": true
|
|
94
95
|
},
|
|
@@ -149,7 +150,8 @@
|
|
|
149
150
|
"assertionRelay": null,
|
|
150
151
|
"validTo": null,
|
|
151
152
|
"request": null,
|
|
152
|
-
"schema": null
|
|
153
|
+
"schema": null,
|
|
154
|
+
"occurredAt": null
|
|
153
155
|
},
|
|
154
156
|
"valid": true
|
|
155
157
|
},
|
|
@@ -234,7 +236,8 @@
|
|
|
234
236
|
"assertionRelay": null,
|
|
235
237
|
"validTo": null,
|
|
236
238
|
"request": null,
|
|
237
|
-
"schema": null
|
|
239
|
+
"schema": null,
|
|
240
|
+
"occurredAt": null
|
|
238
241
|
},
|
|
239
242
|
"valid": true
|
|
240
243
|
},
|
|
@@ -319,7 +322,8 @@
|
|
|
319
322
|
"assertionRelay": null,
|
|
320
323
|
"validTo": null,
|
|
321
324
|
"request": null,
|
|
322
|
-
"schema": null
|
|
325
|
+
"schema": null,
|
|
326
|
+
"occurredAt": null
|
|
323
327
|
},
|
|
324
328
|
"valid": true
|
|
325
329
|
},
|
|
@@ -404,7 +408,8 @@
|
|
|
404
408
|
"assertionRelay": null,
|
|
405
409
|
"validTo": null,
|
|
406
410
|
"request": null,
|
|
407
|
-
"schema": null
|
|
411
|
+
"schema": null,
|
|
412
|
+
"occurredAt": null
|
|
408
413
|
},
|
|
409
414
|
"valid": true
|
|
410
415
|
},
|
|
@@ -489,7 +494,8 @@
|
|
|
489
494
|
"assertionRelay": null,
|
|
490
495
|
"validTo": null,
|
|
491
496
|
"request": null,
|
|
492
|
-
"schema": null
|
|
497
|
+
"schema": null,
|
|
498
|
+
"occurredAt": null
|
|
493
499
|
},
|
|
494
500
|
"valid": true
|
|
495
501
|
},
|
|
@@ -558,7 +564,8 @@
|
|
|
558
564
|
"assertionRelay": null,
|
|
559
565
|
"validTo": null,
|
|
560
566
|
"request": null,
|
|
561
|
-
"schema": null
|
|
567
|
+
"schema": null,
|
|
568
|
+
"occurredAt": null
|
|
562
569
|
},
|
|
563
570
|
"valid": true
|
|
564
571
|
},
|
|
@@ -637,7 +644,8 @@
|
|
|
637
644
|
"assertionRelay": null,
|
|
638
645
|
"validTo": null,
|
|
639
646
|
"request": null,
|
|
640
|
-
"schema": null
|
|
647
|
+
"schema": null,
|
|
648
|
+
"occurredAt": null
|
|
641
649
|
},
|
|
642
650
|
"valid": true
|
|
643
651
|
},
|
|
@@ -690,7 +698,8 @@
|
|
|
690
698
|
"assertionRelay": null,
|
|
691
699
|
"validTo": null,
|
|
692
700
|
"request": null,
|
|
693
|
-
"schema": null
|
|
701
|
+
"schema": null,
|
|
702
|
+
"occurredAt": null
|
|
694
703
|
},
|
|
695
704
|
"valid": true
|
|
696
705
|
},
|
|
@@ -751,7 +760,8 @@
|
|
|
751
760
|
"assertionRelay": null,
|
|
752
761
|
"validTo": null,
|
|
753
762
|
"request": null,
|
|
754
|
-
"schema": null
|
|
763
|
+
"schema": null,
|
|
764
|
+
"occurredAt": null
|
|
755
765
|
},
|
|
756
766
|
"valid": true
|
|
757
767
|
},
|
|
@@ -816,7 +826,8 @@
|
|
|
816
826
|
"def456"
|
|
817
827
|
]
|
|
818
828
|
],
|
|
819
|
-
"content": "I attest to this claim"
|
|
829
|
+
"content": "I attest to this claim",
|
|
830
|
+
"occurredAt": null
|
|
820
831
|
},
|
|
821
832
|
"valid": true
|
|
822
833
|
},
|
|
@@ -873,13 +884,14 @@
|
|
|
873
884
|
"assertion"
|
|
874
885
|
]
|
|
875
886
|
],
|
|
876
|
-
"content": ""
|
|
887
|
+
"content": "",
|
|
888
|
+
"occurredAt": null
|
|
877
889
|
},
|
|
878
890
|
"valid": true
|
|
879
891
|
},
|
|
880
892
|
{
|
|
881
893
|
"name": "assertion-with-type",
|
|
882
|
-
"description": "
|
|
894
|
+
"description": "Hybrid attestation: assertion reference AND explicit type; d-tag uses assertion: prefix",
|
|
883
895
|
"event": {
|
|
884
896
|
"kind": 31000,
|
|
885
897
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
@@ -887,7 +899,7 @@
|
|
|
887
899
|
"tags": [
|
|
888
900
|
[
|
|
889
901
|
"d",
|
|
890
|
-
"
|
|
902
|
+
"assertion:evt999"
|
|
891
903
|
],
|
|
892
904
|
[
|
|
893
905
|
"type",
|
|
@@ -913,7 +925,7 @@
|
|
|
913
925
|
"type": "credential",
|
|
914
926
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
915
927
|
"createdAt": 1700000000,
|
|
916
|
-
"identifier": "
|
|
928
|
+
"identifier": "evt999",
|
|
917
929
|
"subject": "def456",
|
|
918
930
|
"assertionId": "evt999",
|
|
919
931
|
"assertionAddress": null,
|
|
@@ -929,7 +941,7 @@
|
|
|
929
941
|
"tags": [
|
|
930
942
|
[
|
|
931
943
|
"d",
|
|
932
|
-
"
|
|
944
|
+
"assertion:evt999"
|
|
933
945
|
],
|
|
934
946
|
[
|
|
935
947
|
"type",
|
|
@@ -946,7 +958,8 @@
|
|
|
946
958
|
"assertion"
|
|
947
959
|
]
|
|
948
960
|
],
|
|
949
|
-
"content": ""
|
|
961
|
+
"content": "",
|
|
962
|
+
"occurredAt": null
|
|
950
963
|
},
|
|
951
964
|
"valid": true
|
|
952
965
|
},
|
|
@@ -1023,7 +1036,8 @@
|
|
|
1023
1036
|
"1735689600"
|
|
1024
1037
|
]
|
|
1025
1038
|
],
|
|
1026
|
-
"content": ""
|
|
1039
|
+
"content": "",
|
|
1040
|
+
"occurredAt": null
|
|
1027
1041
|
},
|
|
1028
1042
|
"valid": true
|
|
1029
1043
|
},
|
|
@@ -1092,7 +1106,8 @@
|
|
|
1092
1106
|
"https://signet.dev/schemas/credential-v1"
|
|
1093
1107
|
]
|
|
1094
1108
|
],
|
|
1095
|
-
"content": ""
|
|
1109
|
+
"content": "",
|
|
1110
|
+
"occurredAt": null
|
|
1096
1111
|
},
|
|
1097
1112
|
"valid": true
|
|
1098
1113
|
},
|
|
@@ -1161,6 +1176,189 @@
|
|
|
1161
1176
|
"31872:abc123:my-request"
|
|
1162
1177
|
]
|
|
1163
1178
|
],
|
|
1179
|
+
"content": "",
|
|
1180
|
+
"occurredAt": null
|
|
1181
|
+
},
|
|
1182
|
+
"valid": true
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"name": "hybrid-assertion-with-type",
|
|
1186
|
+
"description": "Hybrid: assertion e-tag reference AND explicit type tag; d-tag uses assertion: prefix; relay slot is empty string",
|
|
1187
|
+
"event": {
|
|
1188
|
+
"kind": 31000,
|
|
1189
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1190
|
+
"created_at": 1700000000,
|
|
1191
|
+
"tags": [
|
|
1192
|
+
["d", "assertion:evt999"],
|
|
1193
|
+
["type", "credential"],
|
|
1194
|
+
["e", "evt999", "", "assertion"],
|
|
1195
|
+
["p", "5555555555555555555555555555555555555555555555555555555555555555"],
|
|
1196
|
+
["summary", "Professional licence verified"]
|
|
1197
|
+
],
|
|
1198
|
+
"content": "",
|
|
1199
|
+
"id": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
1200
|
+
"sig": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
|
|
1201
|
+
},
|
|
1202
|
+
"expected": {
|
|
1203
|
+
"kind": 31000,
|
|
1204
|
+
"type": "credential",
|
|
1205
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1206
|
+
"createdAt": 1700000000,
|
|
1207
|
+
"identifier": "evt999",
|
|
1208
|
+
"subject": "5555555555555555555555555555555555555555555555555555555555555555",
|
|
1209
|
+
"assertionId": "evt999",
|
|
1210
|
+
"assertionAddress": null,
|
|
1211
|
+
"assertionRelay": null,
|
|
1212
|
+
"summary": "Professional licence verified",
|
|
1213
|
+
"expiration": null,
|
|
1214
|
+
"validFrom": null,
|
|
1215
|
+
"validTo": null,
|
|
1216
|
+
"request": null,
|
|
1217
|
+
"schema": null,
|
|
1218
|
+
"revoked": false,
|
|
1219
|
+
"reason": null,
|
|
1220
|
+
"tags": [
|
|
1221
|
+
["d", "assertion:evt999"],
|
|
1222
|
+
["type", "credential"],
|
|
1223
|
+
["e", "evt999", "", "assertion"],
|
|
1224
|
+
["p", "5555555555555555555555555555555555555555555555555555555555555555"],
|
|
1225
|
+
["summary", "Professional licence verified"]
|
|
1226
|
+
],
|
|
1227
|
+
"content": "",
|
|
1228
|
+
"occurredAt": null
|
|
1229
|
+
},
|
|
1230
|
+
"valid": true
|
|
1231
|
+
},
|
|
1232
|
+
{
|
|
1233
|
+
"name": "reserved-type-assertion-invalid",
|
|
1234
|
+
"description": "Type tag set to the reserved value 'assertion' — validator must reject",
|
|
1235
|
+
"event": {
|
|
1236
|
+
"kind": 31000,
|
|
1237
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1238
|
+
"created_at": 1700000000,
|
|
1239
|
+
"tags": [
|
|
1240
|
+
["d", "assertion:some-ref"],
|
|
1241
|
+
["type", "assertion"],
|
|
1242
|
+
["p", "5555555555555555555555555555555555555555555555555555555555555555"]
|
|
1243
|
+
],
|
|
1244
|
+
"content": "",
|
|
1245
|
+
"id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
|
1246
|
+
"sig": "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
|
|
1247
|
+
},
|
|
1248
|
+
"expected": {
|
|
1249
|
+
"kind": 31000,
|
|
1250
|
+
"type": "assertion",
|
|
1251
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1252
|
+
"createdAt": 1700000000,
|
|
1253
|
+
"identifier": "some-ref",
|
|
1254
|
+
"subject": "5555555555555555555555555555555555555555555555555555555555555555",
|
|
1255
|
+
"assertionId": null,
|
|
1256
|
+
"assertionAddress": null,
|
|
1257
|
+
"assertionRelay": null,
|
|
1258
|
+
"summary": null,
|
|
1259
|
+
"expiration": null,
|
|
1260
|
+
"validFrom": null,
|
|
1261
|
+
"validTo": null,
|
|
1262
|
+
"request": null,
|
|
1263
|
+
"schema": null,
|
|
1264
|
+
"revoked": false,
|
|
1265
|
+
"reason": null,
|
|
1266
|
+
"tags": [
|
|
1267
|
+
["d", "assertion:some-ref"],
|
|
1268
|
+
["type", "assertion"],
|
|
1269
|
+
["p", "5555555555555555555555555555555555555555555555555555555555555555"]
|
|
1270
|
+
],
|
|
1271
|
+
"content": "",
|
|
1272
|
+
"occurredAt": null
|
|
1273
|
+
},
|
|
1274
|
+
"valid": false
|
|
1275
|
+
},
|
|
1276
|
+
{
|
|
1277
|
+
"name": "self-attestation-with-pubkey-identifier",
|
|
1278
|
+
"description": "Self-declaration: publisher uses own pubkey as identifier, no p-tag",
|
|
1279
|
+
"event": {
|
|
1280
|
+
"kind": 31000,
|
|
1281
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1282
|
+
"created_at": 1700000000,
|
|
1283
|
+
"tags": [
|
|
1284
|
+
["d", "verifier:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
|
1285
|
+
["type", "verifier"]
|
|
1286
|
+
],
|
|
1287
|
+
"content": "",
|
|
1288
|
+
"id": "2222222222222222222222222222222222222222222222222222222222222222",
|
|
1289
|
+
"sig": "33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
|
|
1290
|
+
},
|
|
1291
|
+
"expected": {
|
|
1292
|
+
"kind": 31000,
|
|
1293
|
+
"type": "verifier",
|
|
1294
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1295
|
+
"createdAt": 1700000000,
|
|
1296
|
+
"identifier": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1297
|
+
"subject": null,
|
|
1298
|
+
"assertionId": null,
|
|
1299
|
+
"assertionAddress": null,
|
|
1300
|
+
"assertionRelay": null,
|
|
1301
|
+
"summary": null,
|
|
1302
|
+
"expiration": null,
|
|
1303
|
+
"validFrom": null,
|
|
1304
|
+
"validTo": null,
|
|
1305
|
+
"request": null,
|
|
1306
|
+
"schema": null,
|
|
1307
|
+
"revoked": false,
|
|
1308
|
+
"reason": null,
|
|
1309
|
+
"tags": [
|
|
1310
|
+
["d", "verifier:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
|
1311
|
+
["type", "verifier"]
|
|
1312
|
+
],
|
|
1313
|
+
"content": "",
|
|
1314
|
+
"occurredAt": null
|
|
1315
|
+
},
|
|
1316
|
+
"valid": true
|
|
1317
|
+
},
|
|
1318
|
+
{
|
|
1319
|
+
"name": "attestation-with-occurred-at",
|
|
1320
|
+
"description": "Service attestation with occurred_at timestamp distinct from created_at",
|
|
1321
|
+
"event": {
|
|
1322
|
+
"kind": 31000,
|
|
1323
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1324
|
+
"created_at": 1711000000,
|
|
1325
|
+
"tags": [
|
|
1326
|
+
["d", "endorsement:def456"],
|
|
1327
|
+
["type", "endorsement"],
|
|
1328
|
+
["p", "def456"],
|
|
1329
|
+
["occurred_at", "1710900000"],
|
|
1330
|
+
["summary", "Completed frontend work ahead of schedule"]
|
|
1331
|
+
],
|
|
1332
|
+
"content": "",
|
|
1333
|
+
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
1334
|
+
"sig": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
|
1335
|
+
},
|
|
1336
|
+
"expected": {
|
|
1337
|
+
"kind": 31000,
|
|
1338
|
+
"type": "endorsement",
|
|
1339
|
+
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
1340
|
+
"createdAt": 1711000000,
|
|
1341
|
+
"identifier": "def456",
|
|
1342
|
+
"subject": "def456",
|
|
1343
|
+
"assertionId": null,
|
|
1344
|
+
"assertionAddress": null,
|
|
1345
|
+
"assertionRelay": null,
|
|
1346
|
+
"summary": "Completed frontend work ahead of schedule",
|
|
1347
|
+
"expiration": null,
|
|
1348
|
+
"validFrom": null,
|
|
1349
|
+
"validTo": null,
|
|
1350
|
+
"request": null,
|
|
1351
|
+
"schema": null,
|
|
1352
|
+
"occurredAt": 1710900000,
|
|
1353
|
+
"revoked": false,
|
|
1354
|
+
"reason": null,
|
|
1355
|
+
"tags": [
|
|
1356
|
+
["d", "endorsement:def456"],
|
|
1357
|
+
["type", "endorsement"],
|
|
1358
|
+
["p", "def456"],
|
|
1359
|
+
["occurred_at", "1710900000"],
|
|
1360
|
+
["summary", "Completed frontend work ahead of schedule"]
|
|
1361
|
+
],
|
|
1164
1362
|
"content": ""
|
|
1165
1363
|
},
|
|
1166
1364
|
"valid": true
|