signet-protocol 1.0.0 → 1.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.
Files changed (71) hide show
  1. package/README.md +19 -2
  2. package/dist/badge.d.ts +3 -1
  3. package/dist/badge.d.ts.map +1 -1
  4. package/dist/badge.js +8 -0
  5. package/dist/badge.js.map +1 -1
  6. package/dist/cold-call.d.ts +2 -2
  7. package/dist/cold-call.d.ts.map +1 -1
  8. package/dist/cold-call.js +15 -12
  9. package/dist/cold-call.js.map +1 -1
  10. package/dist/constants.d.ts +16 -2
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +17 -3
  13. package/dist/constants.js.map +1 -1
  14. package/dist/credentials.d.ts +4 -0
  15. package/dist/credentials.d.ts.map +1 -1
  16. package/dist/credentials.js +41 -4
  17. package/dist/credentials.js.map +1 -1
  18. package/dist/index.d.ts +10 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +17 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/migration.d.ts +39 -0
  23. package/dist/migration.d.ts.map +1 -0
  24. package/dist/migration.js +95 -0
  25. package/dist/migration.js.map +1 -0
  26. package/dist/presentation.d.ts +50 -0
  27. package/dist/presentation.d.ts.map +1 -0
  28. package/dist/presentation.js +126 -0
  29. package/dist/presentation.js.map +1 -0
  30. package/dist/qr-router.d.ts +64 -0
  31. package/dist/qr-router.d.ts.map +1 -0
  32. package/dist/qr-router.js +274 -0
  33. package/dist/qr-router.js.map +1 -0
  34. package/dist/relay-events.d.ts +43 -0
  35. package/dist/relay-events.d.ts.map +1 -0
  36. package/dist/relay-events.js +64 -0
  37. package/dist/relay-events.js.map +1 -0
  38. package/dist/signet-me.d.ts +30 -0
  39. package/dist/signet-me.d.ts.map +1 -0
  40. package/dist/signet-me.js +55 -0
  41. package/dist/signet-me.js.map +1 -0
  42. package/dist/signing-backend.d.ts +25 -0
  43. package/dist/signing-backend.d.ts.map +1 -0
  44. package/dist/signing-backend.js +10 -0
  45. package/dist/signing-backend.js.map +1 -0
  46. package/dist/trust-score.d.ts.map +1 -1
  47. package/dist/trust-score.js +30 -24
  48. package/dist/trust-score.js.map +1 -1
  49. package/dist/url-auth.d.ts +29 -0
  50. package/dist/url-auth.d.ts.map +1 -0
  51. package/dist/url-auth.js +109 -0
  52. package/dist/url-auth.js.map +1 -0
  53. package/dist/venue-entry.d.ts +23 -0
  54. package/dist/venue-entry.d.ts.map +1 -0
  55. package/dist/venue-entry.js +39 -0
  56. package/dist/venue-entry.js.map +1 -0
  57. package/package.json +1 -1
  58. package/src/badge.ts +11 -1
  59. package/src/cold-call.ts +16 -12
  60. package/src/constants.ts +18 -3
  61. package/src/credentials.ts +44 -4
  62. package/src/index.ts +63 -0
  63. package/src/migration.ts +110 -0
  64. package/src/presentation.ts +165 -0
  65. package/src/qr-router.ts +280 -0
  66. package/src/relay-events.ts +98 -0
  67. package/src/signet-me.ts +104 -0
  68. package/src/signing-backend.ts +29 -0
  69. package/src/trust-score.ts +30 -24
  70. package/src/url-auth.ts +115 -0
  71. package/src/venue-entry.ts +49 -0
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export type { CryptoAlgorithm, SignetTier, VerificationType, VerificationScope, VerificationMethod, VouchMethod, EnforcementLevel, ChallengeReason, BondAction, RevocationScope, EntityType, EntityMode, UnsignedEvent, NostrEvent, CredentialParams, VouchParams, PolicyParams, PolicyCheckResult, VerifierParams, ChallengeParams, RevocationParams, TrustSignal, TrustScoreBreakdown, MerkleProof, SelectiveDisclosure, ParsedCredential, ParsedVouch, ParsedPolicy, ParsedVerifier, ParsedChallenge, ParsedRevocation, ParsedDelegation, ParsedIdentityBridge, TwoCredentialResult, CredentialChain, GuardianDelegationParams, GuardianDelegationScope, SimpleEntityType, BitcoinAddressType, BondProof, BondStatus, BondVerificationResult, BIP322Verifier, } from './types.js';
2
2
  export { ENTITY_DISPLAY_LABELS } from './types.js';
3
- export { ATTESTATION_KIND, APP_DATA_KIND, ATTESTATION_TYPES, SIGNET_KINDS, SIGNET_LABEL, DEFAULT_VOUCH_THRESHOLD, DEFAULT_VOUCHER_MIN_TIER, DEFAULT_CREDENTIAL_EXPIRY_SECONDS, DEFAULT_REVOCATION_THRESHOLD, VERIFIER_ACTIVATION, TRUST_WEIGHTS, MAX_TRUST_SCORE, SIGNAL_PRIORITY, MIN_BRIDGE_RING_SIZE, ENTITY_TYPES, DELEGATION_CONSTRAINTS, ENTITY_LABELS, DEFAULT_CRYPTO_ALGORITHM, BOND_DOMAIN_SEPARATOR, DEFAULT_BOND_MAX_AGE_SECS, VALID_BOND_ADDRESS_TYPES, } from './constants.js';
3
+ export { ATTESTATION_KIND, APP_DATA_KIND, ATTESTATION_TYPES, SIGNET_KINDS, SIGNET_LABEL, DEFAULT_VOUCH_THRESHOLD, DEFAULT_VOUCHER_MIN_TIER, DEFAULT_CREDENTIAL_EXPIRY_SECONDS, DEFAULT_REVOCATION_THRESHOLD, VERIFIER_ACTIVATION, TRUST_WEIGHTS, TRUST_CAPS, MAX_TRUST_SCORE, SIGNAL_PRIORITY, MIN_BRIDGE_RING_SIZE, ENTITY_TYPES, DELEGATION_CONSTRAINTS, ENTITY_LABELS, DEFAULT_CRYPTO_ALGORITHM, BOND_DOMAIN_SEPARATOR, DEFAULT_BOND_MAX_AGE_SECS, VALID_BOND_ADDRESS_TYPES, } from './constants.js';
4
4
  export { generateKeyPair, getPublicKey, signEvent, verifyEvent, getEventId, hash, hashString, } from './crypto.js';
5
- export { buildCredentialEvent, createSelfDeclaredCredential, createPeerVouchedCredential, createProfessionalCredential, createChildSafetyCredential, verifyCredential, isCredentialExpired, parseCredential, createRingProtectedCredential, createRingProtectedChildCredential, verifyRingProtectedContent, renewCredential, needsRenewal, createTwoCredentialCeremony, supersedeCredential, resolveCredentialChain, isSuperseded, computeNullifier, checkNullifierDuplicate, buildNullifierChainTag, computeNullifierFamily, buildNullifierFamilyTags, checkNullifierFamilyDuplicate, createGuardianDelegation, } from './credentials.js';
5
+ export { buildCredentialEvent, createSelfDeclaredCredential, createPeerVouchedCredential, createProfessionalCredential, createChildSafetyCredential, verifyCredential, isCredentialExpired, parseCredential, createRingProtectedCredential, createRingProtectedChildCredential, verifyRingProtectedContent, renewCredential, needsRenewal, createTwoCredentialCeremony, computeAge, supersedeCredential, resolveCredentialChain, isSuperseded, computeNullifier, checkNullifierDuplicate, buildNullifierChainTag, computeNullifierFamily, buildNullifierFamilyTags, checkNullifierFamilyDuplicate, createGuardianDelegation, } from './credentials.js';
6
6
  export type { RingProtectedContent, DocumentDescriptor, NullifierFamily } from './credentials.js';
7
7
  export { buildVouchEvent, createVouch, parseVouch, countQualifyingVouches, hasEnoughVouches, getVouchers, } from './vouches.js';
8
8
  export { buildPolicyEvent, createPolicy, parsePolicy, checkPolicyCompliance, PolicyChecker, } from './policies.js';
@@ -52,4 +52,12 @@ export { SIGNET_EPOCH_SECONDS, SIGNET_WORD_COUNT, SIGNET_TOLERANCE, MAX_WORD_COU
52
52
  export type { SignetWordsConfig } from './signet-words.js';
53
53
  export { fetchInstitutionKeys, generateSessionCode, deriveColdCallWords, initiateColdCallVerification, completeColdCallVerification, type ColdCallSession, } from './cold-call.js';
54
54
  export type { InstitutionKeys, InstitutionPubkey } from './types.js';
55
+ export { parseVerifyRequest, buildVerifyResponse, credentialSatisfiesRequest, VALID_AGE_RANGES, type VerifyRequest, type VerifyResponse, } from './presentation.js';
56
+ export { routeQR, QR_MAX_PAYLOAD_SIZE, type QRAction, type AuthRequest, type LoginRequest, } from './qr-router.js';
57
+ export { parseUrlAuthParams, buildAuthCallbackUrl, buildAuthDeniedUrl, getUrlAuthSiteName, } from './url-auth.js';
58
+ export { buildVerifyEventTemplate, buildRejectionEventTemplate, buildAuthResponseEventTemplate, type AuthResponse, } from './relay-events.js';
59
+ export { getSignetMeDisplay, verifySignetMe, SIGNET_ME_ROTATION_SECONDS, SIGNET_ME_TOLERANCE, type SignetMeDisplay, } from './signet-me.js';
60
+ export { buildVenueEntryEventTemplate, VENUE_ENTRY_KIND, } from './venue-entry.js';
61
+ export type { SigningBackend, SigningMode } from './signing-backend.js';
62
+ export { createMigrationEvent, parseMigrationEvent, followMigrationChain, } from './migration.js';
55
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // Entity display labels (value export from types)
4
4
  export { ENTITY_DISPLAY_LABELS } from './types.js';
5
5
  // Constants
6
- export { ATTESTATION_KIND, APP_DATA_KIND, ATTESTATION_TYPES, SIGNET_KINDS, SIGNET_LABEL, DEFAULT_VOUCH_THRESHOLD, DEFAULT_VOUCHER_MIN_TIER, DEFAULT_CREDENTIAL_EXPIRY_SECONDS, DEFAULT_REVOCATION_THRESHOLD, VERIFIER_ACTIVATION, TRUST_WEIGHTS, MAX_TRUST_SCORE, SIGNAL_PRIORITY, MIN_BRIDGE_RING_SIZE, ENTITY_TYPES, DELEGATION_CONSTRAINTS, ENTITY_LABELS, DEFAULT_CRYPTO_ALGORITHM,
6
+ export { ATTESTATION_KIND, APP_DATA_KIND, ATTESTATION_TYPES, SIGNET_KINDS, SIGNET_LABEL, DEFAULT_VOUCH_THRESHOLD, DEFAULT_VOUCHER_MIN_TIER, DEFAULT_CREDENTIAL_EXPIRY_SECONDS, DEFAULT_REVOCATION_THRESHOLD, VERIFIER_ACTIVATION, TRUST_WEIGHTS, TRUST_CAPS, MAX_TRUST_SCORE, SIGNAL_PRIORITY, MIN_BRIDGE_RING_SIZE, ENTITY_TYPES, DELEGATION_CONSTRAINTS, ENTITY_LABELS, DEFAULT_CRYPTO_ALGORITHM,
7
7
  // Bond constants
8
8
  BOND_DOMAIN_SEPARATOR, DEFAULT_BOND_MAX_AGE_SECS, VALID_BOND_ADDRESS_TYPES, } from './constants.js';
9
9
  // Crypto
@@ -16,6 +16,8 @@ createRingProtectedCredential, createRingProtectedChildCredential, verifyRingPro
16
16
  renewCredential, needsRenewal,
17
17
  // Two-credential ceremony
18
18
  createTwoCredentialCeremony,
19
+ // Age computation
20
+ computeAge,
19
21
  // Credential chains
20
22
  supersedeCredential, resolveCredentialChain, isSuperseded,
21
23
  // Nullifier utilities
@@ -83,4 +85,18 @@ export { computeBadge, getTrustLevel, meetsMinimumTier, filterEventsForPubkey, b
83
85
  export { SIGNET_EPOCH_SECONDS, SIGNET_WORD_COUNT, SIGNET_TOLERANCE, MAX_WORD_COUNT, SIGNET_WORDLIST, getEpoch, deriveWords, getSignetWords, verifySignetWords, formatSignetWords, getSignetDisplay, } from './signet-words.js';
84
86
  // Cold-Call Verification (institutional caller verification via .well-known/signet.json + ephemeral ECDH)
85
87
  export { fetchInstitutionKeys, generateSessionCode, deriveColdCallWords, initiateColdCallVerification, completeColdCallVerification, } from './cold-call.js';
88
+ // Presentation Protocol (verification requests/responses)
89
+ export { parseVerifyRequest, buildVerifyResponse, credentialSatisfiesRequest, VALID_AGE_RANGES, } from './presentation.js';
90
+ // QR Router (QR code type detection and routing)
91
+ export { routeQR, QR_MAX_PAYLOAD_SIZE, } from './qr-router.js';
92
+ // URL Auth (Sign in with Signet redirect flow)
93
+ export { parseUrlAuthParams, buildAuthCallbackUrl, buildAuthDeniedUrl, getUrlAuthSiteName, } from './url-auth.js';
94
+ // Relay Event Builders (unsigned kind 29999 event templates)
95
+ export { buildVerifyEventTemplate, buildRejectionEventTemplate, buildAuthResponseEventTemplate, } from './relay-events.js';
96
+ // Signet Me (directional verification words)
97
+ export { getSignetMeDisplay, verifySignetMe, SIGNET_ME_ROTATION_SECONDS, SIGNET_ME_TOLERANCE, } from './signet-me.js';
98
+ // Venue Entry (kind 21235 event builder)
99
+ export { buildVenueEntryEventTemplate, VENUE_ENTRY_KIND, } from './venue-entry.js';
100
+ // Migration (kind 31000, type: migration — see spec/protocol.md §21.4.3)
101
+ export { createMigrationEvent, parseMigrationEvent, followMigrationChain, } from './migration.js';
86
102
  //# 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { NostrEvent } from './types.js';
2
+ /**
3
+ * Create and sign a migration event (kind 31000, type: migration).
4
+ *
5
+ * The event is signed by the old private key, proving the old identity
6
+ * authorised the migration to the new pubkey.
7
+ *
8
+ * @param oldPrivateKey - Private key of the old (migrating-away) identity
9
+ * @param newPubkey - x-only hex pubkey of the new (receiving) identity
10
+ * @returns Signed kind 31000 migration event
11
+ */
12
+ export declare function createMigrationEvent(oldPrivateKey: string, newPubkey: string): Promise<NostrEvent>;
13
+ /**
14
+ * Parse a migration event, returning the old and new pubkeys.
15
+ *
16
+ * @param event - The event to parse
17
+ * @returns `{ oldPubkey, newPubkey }` or `null` if the event is not a valid migration event
18
+ */
19
+ export declare function parseMigrationEvent(event: NostrEvent): {
20
+ oldPubkey: string;
21
+ newPubkey: string;
22
+ } | null;
23
+ /**
24
+ * Follow a chain of migration events to find the current active pubkey.
25
+ *
26
+ * Given a starting pubkey and a set of events, this function follows migration
27
+ * events to their conclusion. If pubkey A migrated to B, and B migrated to C,
28
+ * the function returns C.
29
+ *
30
+ * Cycle detection is enforced via a visited set. If a cycle is detected or the
31
+ * chain exceeds MAX_CHAIN_DEPTH hops, the last successfully reached pubkey is
32
+ * returned rather than throwing.
33
+ *
34
+ * @param pubkey - Starting pubkey to follow
35
+ * @param events - Pool of events to search for migration records
36
+ * @returns The current (final) active pubkey after following all migrations
37
+ */
38
+ export declare function followMigrationChain(pubkey: string, events: NostrEvent[]): string;
39
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,GAChB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAwBjF"}
@@ -0,0 +1,95 @@
1
+ // Migration Event (kind 31000, type: migration)
2
+ // Allows an identity to publish a signed record linking an old pubkey to a new pubkey.
3
+ // The event is signed by the OLD private key, proving the old identity authorised the migration.
4
+ // See spec/protocol.md §21.4.3 for the full migration lifecycle.
5
+ import { createAttestation } from 'nostr-attestations';
6
+ import { ATTESTATION_KIND } from './constants.js';
7
+ import { signEvent, getPublicKey } from './crypto.js';
8
+ import { getTagValue } from './validation.js';
9
+ /** Maximum number of hops followed when resolving a migration chain (matches credential chain depth) */
10
+ const MAX_CHAIN_DEPTH = 100;
11
+ /** The attestation type identifier for migration events */
12
+ const MIGRATION_TYPE = 'migration';
13
+ /**
14
+ * Create and sign a migration event (kind 31000, type: migration).
15
+ *
16
+ * The event is signed by the old private key, proving the old identity
17
+ * authorised the migration to the new pubkey.
18
+ *
19
+ * @param oldPrivateKey - Private key of the old (migrating-away) identity
20
+ * @param newPubkey - x-only hex pubkey of the new (receiving) identity
21
+ * @returns Signed kind 31000 migration event
22
+ */
23
+ export async function createMigrationEvent(oldPrivateKey, newPubkey) {
24
+ const oldPubkey = getPublicKey(oldPrivateKey);
25
+ const template = createAttestation({
26
+ type: MIGRATION_TYPE,
27
+ identifier: oldPubkey,
28
+ subject: newPubkey,
29
+ content: '',
30
+ });
31
+ const unsigned = {
32
+ ...template,
33
+ pubkey: oldPubkey,
34
+ created_at: Math.floor(Date.now() / 1000),
35
+ };
36
+ return signEvent(unsigned, oldPrivateKey);
37
+ }
38
+ /**
39
+ * Parse a migration event, returning the old and new pubkeys.
40
+ *
41
+ * @param event - The event to parse
42
+ * @returns `{ oldPubkey, newPubkey }` or `null` if the event is not a valid migration event
43
+ */
44
+ export function parseMigrationEvent(event) {
45
+ if (event.kind !== ATTESTATION_KIND)
46
+ return null;
47
+ if (getTagValue(event, 'type') !== MIGRATION_TYPE)
48
+ return null;
49
+ const newPubkey = getTagValue(event, 'p');
50
+ if (!newPubkey)
51
+ return null;
52
+ // The signer of the migration event is the old identity
53
+ const oldPubkey = event.pubkey;
54
+ return { oldPubkey, newPubkey };
55
+ }
56
+ /**
57
+ * Follow a chain of migration events to find the current active pubkey.
58
+ *
59
+ * Given a starting pubkey and a set of events, this function follows migration
60
+ * events to their conclusion. If pubkey A migrated to B, and B migrated to C,
61
+ * the function returns C.
62
+ *
63
+ * Cycle detection is enforced via a visited set. If a cycle is detected or the
64
+ * chain exceeds MAX_CHAIN_DEPTH hops, the last successfully reached pubkey is
65
+ * returned rather than throwing.
66
+ *
67
+ * @param pubkey - Starting pubkey to follow
68
+ * @param events - Pool of events to search for migration records
69
+ * @returns The current (final) active pubkey after following all migrations
70
+ */
71
+ export function followMigrationChain(pubkey, events) {
72
+ // Build a map from old pubkey → new pubkey using valid migration events
73
+ const migrations = new Map();
74
+ for (const event of events) {
75
+ const parsed = parseMigrationEvent(event);
76
+ if (parsed) {
77
+ // Only record the first migration found for each old pubkey
78
+ if (!migrations.has(parsed.oldPubkey)) {
79
+ migrations.set(parsed.oldPubkey, parsed.newPubkey);
80
+ }
81
+ }
82
+ }
83
+ const visited = new Set();
84
+ let current = pubkey;
85
+ while (migrations.has(current)) {
86
+ if (visited.has(current))
87
+ break; // cycle detected
88
+ if (visited.size >= MAX_CHAIN_DEPTH)
89
+ break; // depth limit reached
90
+ visited.add(current);
91
+ current = migrations.get(current);
92
+ }
93
+ return current;
94
+ }
95
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,uFAAuF;AACvF,iGAAiG;AACjG,iEAAiE;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,wGAAwG;AACxG,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,2DAA2D;AAC3D,MAAM,cAAc,GAAG,WAAW,CAAC;AAEnC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,SAAiB;IAEjB,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG;QACf,GAAG,QAAQ;QACX,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;KAC1C,CAAC;IAEF,OAAO,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAiB;IAEjB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,wDAAwD;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAE/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,MAAoB;IACvE,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,4DAA4D;YAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,OAAO,GAAG,MAAM,CAAC;IAErB,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,MAAM,CAAU,iBAAiB;QAC3D,IAAI,OAAO,CAAC,IAAI,IAAI,eAAe;YAAE,MAAM,CAAC,sBAAsB;QAClE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Signet Credential Presentation Protocol
3
+ *
4
+ * Types and validation for age verification requests/responses.
5
+ * This module defines the wire protocol — transport (BroadcastChannel,
6
+ * relay publish) is handled by the consuming application.
7
+ */
8
+ /** Valid age range values for verification requests. */
9
+ export declare const VALID_AGE_RANGES: readonly ["0-3", "4-7", "8-12", "13-17", "18+"];
10
+ export interface VerifyRequest {
11
+ type: 'signet-verify-request';
12
+ requestId: string;
13
+ requiredAgeRange: string;
14
+ callbackUrl?: string;
15
+ relayUrl?: string;
16
+ origin?: string;
17
+ /** Session pubkey (hex) for NIP-17 gift-wrap encryption. If absent, response is cleartext. */
18
+ sessionPubkey?: string;
19
+ timestamp: number;
20
+ }
21
+ export interface VerifyResponse {
22
+ type: 'signet-verify-response';
23
+ requestId: string;
24
+ credential: {
25
+ id: string;
26
+ kind: number;
27
+ pubkey: string;
28
+ tags: string[][];
29
+ content: string;
30
+ sig: string;
31
+ created_at: number;
32
+ };
33
+ subjectPubkey: string;
34
+ }
35
+ /**
36
+ * Parse a verification request from a QR code payload or JSON string.
37
+ * Returns null for invalid or expired requests.
38
+ */
39
+ export declare function parseVerifyRequest(data: string): VerifyRequest | null;
40
+ /**
41
+ * Build a verification response.
42
+ */
43
+ export declare function buildVerifyResponse(requestId: string, credential: VerifyResponse['credential'], subjectPubkey: string): VerifyResponse;
44
+ /**
45
+ * Check if a credential's tags satisfy a verification request's age range.
46
+ * If the credential has a ZK age proof (zk-age tag), verifies the proof.
47
+ * Legacy credentials without proofs are accepted during migration.
48
+ */
49
+ export declare function credentialSatisfiesRequest(credentialTags: string[][], requiredAgeRange: string, credentialContent?: string, subjectPubkey?: string): boolean;
50
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,iDAAkD,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAoErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC,EACxC,aAAa,EAAE,MAAM,GACpB,cAAc,CAOhB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,MAAM,EAAE,EAAE,EAC1B,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAwBT"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Signet Credential Presentation Protocol
3
+ *
4
+ * Types and validation for age verification requests/responses.
5
+ * This module defines the wire protocol — transport (BroadcastChannel,
6
+ * relay publish) is handled by the consuming application.
7
+ */
8
+ import { verifyAgeRangeProof } from './range-proof.js';
9
+ /** Valid age range values for verification requests. */
10
+ export const VALID_AGE_RANGES = ['0-3', '4-7', '8-12', '13-17', '18+'];
11
+ /**
12
+ * Parse a verification request from a QR code payload or JSON string.
13
+ * Returns null for invalid or expired requests.
14
+ */
15
+ export function parseVerifyRequest(data) {
16
+ try {
17
+ let parsed;
18
+ try {
19
+ parsed = JSON.parse(data);
20
+ }
21
+ catch {
22
+ // Try base64 decode (from signet:verify: prefix)
23
+ const base64 = data.startsWith('signet:verify:') ? data.slice(14) : data;
24
+ parsed = JSON.parse(atob(base64));
25
+ }
26
+ if (typeof parsed !== 'object' || parsed === null)
27
+ return null;
28
+ const obj = parsed;
29
+ if (obj.type !== 'signet-verify-request')
30
+ return null;
31
+ if (typeof obj.requestId !== 'string')
32
+ return null;
33
+ if (typeof obj.requiredAgeRange !== 'string')
34
+ return null;
35
+ const requestId = obj.requestId;
36
+ const requiredAgeRange = obj.requiredAgeRange;
37
+ if (typeof obj.timestamp !== 'number')
38
+ return null;
39
+ const timestamp = obj.timestamp;
40
+ // Validate timestamp is within 5 minutes of now
41
+ if (Math.abs(Date.now() / 1000 - timestamp) > 300)
42
+ return null;
43
+ // Validate requestId is a 32-char hex string
44
+ if (!/^[0-9a-f]{32}$/i.test(requestId))
45
+ return null;
46
+ // Validate requiredAgeRange is in the allowed set
47
+ if (!VALID_AGE_RANGES.includes(requiredAgeRange))
48
+ return null;
49
+ // Cap and validate URL fields
50
+ const callbackUrl = typeof obj.callbackUrl === 'string' ? obj.callbackUrl.slice(0, 1024) : undefined;
51
+ const relayUrl = typeof obj.relayUrl === 'string' ? obj.relayUrl.slice(0, 1024) : undefined;
52
+ // Validate callbackUrl scheme: must be https:// or http://localhost
53
+ if (callbackUrl !== undefined && !/^https:\/\//i.test(callbackUrl) && !/^http:\/\/(localhost|127\.0\.0\.1)([:\/]|$)/i.test(callbackUrl)) {
54
+ return null;
55
+ }
56
+ // Validate relayUrl: wss:// or ws://localhost
57
+ if (relayUrl !== undefined && !/^wss:\/\//i.test(relayUrl) && !/^ws:\/\/(localhost|127\.0\.0\.1)([:\/]|$)/i.test(relayUrl))
58
+ return null;
59
+ const origin = typeof obj.origin === 'string' ? obj.origin.slice(0, 1024) : undefined;
60
+ // Validate origin scheme if present
61
+ if (origin !== undefined) {
62
+ if (!/^https:\/\//i.test(origin) && !/^http:\/\/(localhost|127\.0\.0\.1)([:\/]|$)/i.test(origin))
63
+ return null;
64
+ }
65
+ // Extract session pubkey for NIP-17 gift wrapping (optional, 64-char hex)
66
+ const sessionPubkey = typeof obj.sessionPubkey === 'string' && /^[0-9a-f]{64}$/i.test(obj.sessionPubkey)
67
+ ? obj.sessionPubkey
68
+ : undefined;
69
+ return {
70
+ type: 'signet-verify-request',
71
+ requestId,
72
+ requiredAgeRange,
73
+ callbackUrl,
74
+ relayUrl,
75
+ origin,
76
+ sessionPubkey,
77
+ timestamp,
78
+ };
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ /**
85
+ * Build a verification response.
86
+ */
87
+ export function buildVerifyResponse(requestId, credential, subjectPubkey) {
88
+ return {
89
+ type: 'signet-verify-response',
90
+ requestId,
91
+ credential,
92
+ subjectPubkey,
93
+ };
94
+ }
95
+ /**
96
+ * Check if a credential's tags satisfy a verification request's age range.
97
+ * If the credential has a ZK age proof (zk-age tag), verifies the proof.
98
+ * Legacy credentials without proofs are accepted during migration.
99
+ */
100
+ export function credentialSatisfiesRequest(credentialTags, requiredAgeRange, credentialContent, subjectPubkey) {
101
+ const ageRange = credentialTags.find(t => t[0] === 'age-range')?.[1];
102
+ if (!ageRange)
103
+ return false;
104
+ // Age range must match
105
+ if (requiredAgeRange === '18+' && ageRange !== '18+')
106
+ return false;
107
+ if (requiredAgeRange !== '18+' && ageRange !== requiredAgeRange)
108
+ return false;
109
+ // If ZK proof is present, verify it
110
+ const hasZkAge = credentialTags.some(t => t[0] === 'zk-age' && t[1] === '1');
111
+ if (hasZkAge && credentialContent && subjectPubkey) {
112
+ try {
113
+ const content = JSON.parse(credentialContent);
114
+ if (content.rangeProof) {
115
+ if (!verifyAgeRangeProof(content.rangeProof, ageRange, subjectPubkey)) {
116
+ return false; // Proof invalid — reject even if tag matches
117
+ }
118
+ }
119
+ }
120
+ catch {
121
+ return false; // Malformed content — reject
122
+ }
123
+ }
124
+ return true;
125
+ }
126
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Universal QR Router — detects QR type and returns the appropriate action.
3
+ *
4
+ * Supported QR types:
5
+ * 1. signet-verify-request — age/credential verification
6
+ * 2. signet-auth-request — NIP-46 style login (prove pubkey ownership)
7
+ * 3. signet-login-request — combined auth + verification
8
+ * 4. nostr+connect:// — standard NIP-46 connection string
9
+ * 5. npub1... / nprofile1... — Nostr public key (add as contact)
10
+ * 6. Unknown — not recognised
11
+ */
12
+ import type { VerifyRequest } from './presentation.js';
13
+ export type QRAction = {
14
+ type: 'verify';
15
+ request: VerifyRequest;
16
+ } | {
17
+ type: 'auth';
18
+ request: AuthRequest;
19
+ } | {
20
+ type: 'login';
21
+ request: LoginRequest;
22
+ } | {
23
+ type: 'nostr-connect';
24
+ uri: string;
25
+ pubkey: string;
26
+ relay?: string;
27
+ } | {
28
+ type: 'contact';
29
+ npub: string;
30
+ } | {
31
+ type: 'unknown';
32
+ raw: string;
33
+ };
34
+ export interface AuthRequest {
35
+ type: 'signet-auth-request';
36
+ requestId: string;
37
+ challenge: string;
38
+ origin: string;
39
+ relay?: string;
40
+ callbackUrl?: string;
41
+ /** Session pubkey (hex) for NIP-17 gift-wrap encryption. If absent, response is cleartext. */
42
+ sessionPubkey?: string;
43
+ timestamp: number;
44
+ }
45
+ export interface LoginRequest {
46
+ type: 'signet-login-request';
47
+ requestId: string;
48
+ challenge: string;
49
+ requiredAgeRange?: string;
50
+ origin: string;
51
+ relay?: string;
52
+ callbackUrl?: string;
53
+ /** Session pubkey (hex) for NIP-17 gift-wrap encryption. If absent, response is cleartext. */
54
+ sessionPubkey?: string;
55
+ timestamp: number;
56
+ }
57
+ /** Maximum QR payload size in bytes. */
58
+ export declare const QR_MAX_PAYLOAD_SIZE = 8192;
59
+ /**
60
+ * Route a raw QR code string to the appropriate action.
61
+ * All parsing is defensive — unknown or malformed input returns { type: 'unknown' }.
62
+ */
63
+ export declare function routeQR(data: string): QRAction;
64
+ //# sourceMappingURL=qr-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-router.d.ts","sourceRoot":"","sources":["../src/qr-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAsFxC;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA4I9C"}