@unicitylabs/nostr-js-sdk 0.0.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.
Files changed (124) hide show
  1. package/README.md +290 -0
  2. package/dist/browser/index.js +8444 -0
  3. package/dist/browser/index.js.map +1 -0
  4. package/dist/browser/index.min.js +12 -0
  5. package/dist/browser/index.min.js.map +1 -0
  6. package/dist/browser/index.umd.js +8524 -0
  7. package/dist/browser/index.umd.js.map +1 -0
  8. package/dist/browser/index.umd.min.js +12 -0
  9. package/dist/browser/index.umd.min.js.map +1 -0
  10. package/dist/cjs/NostrKeyManager.js +265 -0
  11. package/dist/cjs/NostrKeyManager.js.map +1 -0
  12. package/dist/cjs/client/NostrClient.js +518 -0
  13. package/dist/cjs/client/NostrClient.js.map +1 -0
  14. package/dist/cjs/client/NostrEventListener.js +31 -0
  15. package/dist/cjs/client/NostrEventListener.js.map +1 -0
  16. package/dist/cjs/client/WebSocketAdapter.js +90 -0
  17. package/dist/cjs/client/WebSocketAdapter.js.map +1 -0
  18. package/dist/cjs/client/index.js +18 -0
  19. package/dist/cjs/client/index.js.map +1 -0
  20. package/dist/cjs/crypto/bech32.js +201 -0
  21. package/dist/cjs/crypto/bech32.js.map +1 -0
  22. package/dist/cjs/crypto/index.js +49 -0
  23. package/dist/cjs/crypto/index.js.map +1 -0
  24. package/dist/cjs/crypto/nip04.js +327 -0
  25. package/dist/cjs/crypto/nip04.js.map +1 -0
  26. package/dist/cjs/crypto/schnorr.js +101 -0
  27. package/dist/cjs/crypto/schnorr.js.map +1 -0
  28. package/dist/cjs/index.js +57 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/nametag/NametagBinding.js +196 -0
  31. package/dist/cjs/nametag/NametagBinding.js.map +1 -0
  32. package/dist/cjs/nametag/NametagUtils.js +156 -0
  33. package/dist/cjs/nametag/NametagUtils.js.map +1 -0
  34. package/dist/cjs/nametag/index.js +47 -0
  35. package/dist/cjs/nametag/index.js.map +1 -0
  36. package/dist/cjs/protocol/Event.js +209 -0
  37. package/dist/cjs/protocol/Event.js.map +1 -0
  38. package/dist/cjs/protocol/EventKinds.js +126 -0
  39. package/dist/cjs/protocol/EventKinds.js.map +1 -0
  40. package/dist/cjs/protocol/Filter.js +202 -0
  41. package/dist/cjs/protocol/Filter.js.map +1 -0
  42. package/dist/cjs/protocol/index.js +50 -0
  43. package/dist/cjs/protocol/index.js.map +1 -0
  44. package/dist/cjs/token/TokenTransferProtocol.js +196 -0
  45. package/dist/cjs/token/TokenTransferProtocol.js.map +1 -0
  46. package/dist/cjs/token/index.js +45 -0
  47. package/dist/cjs/token/index.js.map +1 -0
  48. package/dist/esm/NostrKeyManager.js +228 -0
  49. package/dist/esm/NostrKeyManager.js.map +1 -0
  50. package/dist/esm/client/NostrClient.js +481 -0
  51. package/dist/esm/client/NostrClient.js.map +1 -0
  52. package/dist/esm/client/NostrEventListener.js +27 -0
  53. package/dist/esm/client/NostrEventListener.js.map +1 -0
  54. package/dist/esm/client/WebSocketAdapter.js +52 -0
  55. package/dist/esm/client/WebSocketAdapter.js.map +1 -0
  56. package/dist/esm/client/index.js +7 -0
  57. package/dist/esm/client/index.js.map +1 -0
  58. package/dist/esm/crypto/bech32.js +193 -0
  59. package/dist/esm/crypto/bech32.js.map +1 -0
  60. package/dist/esm/crypto/index.js +10 -0
  61. package/dist/esm/crypto/index.js.map +1 -0
  62. package/dist/esm/crypto/nip04.js +286 -0
  63. package/dist/esm/crypto/nip04.js.map +1 -0
  64. package/dist/esm/crypto/schnorr.js +93 -0
  65. package/dist/esm/crypto/schnorr.js.map +1 -0
  66. package/dist/esm/index.js +32 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/nametag/NametagBinding.js +155 -0
  69. package/dist/esm/nametag/NametagBinding.js.map +1 -0
  70. package/dist/esm/nametag/NametagUtils.js +149 -0
  71. package/dist/esm/nametag/NametagUtils.js.map +1 -0
  72. package/dist/esm/nametag/index.js +8 -0
  73. package/dist/esm/nametag/index.js.map +1 -0
  74. package/dist/esm/protocol/Event.js +172 -0
  75. package/dist/esm/protocol/Event.js.map +1 -0
  76. package/dist/esm/protocol/EventKinds.js +119 -0
  77. package/dist/esm/protocol/EventKinds.js.map +1 -0
  78. package/dist/esm/protocol/Filter.js +197 -0
  79. package/dist/esm/protocol/Filter.js.map +1 -0
  80. package/dist/esm/protocol/index.js +8 -0
  81. package/dist/esm/protocol/index.js.map +1 -0
  82. package/dist/esm/token/TokenTransferProtocol.js +154 -0
  83. package/dist/esm/token/TokenTransferProtocol.js.map +1 -0
  84. package/dist/esm/token/index.js +6 -0
  85. package/dist/esm/token/index.js.map +1 -0
  86. package/dist/types/NostrKeyManager.d.ts +150 -0
  87. package/dist/types/NostrKeyManager.d.ts.map +1 -0
  88. package/dist/types/client/NostrClient.d.ts +154 -0
  89. package/dist/types/client/NostrClient.d.ts.map +1 -0
  90. package/dist/types/client/NostrEventListener.d.ts +40 -0
  91. package/dist/types/client/NostrEventListener.d.ts.map +1 -0
  92. package/dist/types/client/WebSocketAdapter.d.ts +55 -0
  93. package/dist/types/client/WebSocketAdapter.d.ts.map +1 -0
  94. package/dist/types/client/index.d.ts +9 -0
  95. package/dist/types/client/index.d.ts.map +1 -0
  96. package/dist/types/crypto/bech32.d.ts +51 -0
  97. package/dist/types/crypto/bech32.d.ts.map +1 -0
  98. package/dist/types/crypto/index.d.ts +10 -0
  99. package/dist/types/crypto/index.d.ts.map +1 -0
  100. package/dist/types/crypto/nip04.d.ts +56 -0
  101. package/dist/types/crypto/nip04.d.ts.map +1 -0
  102. package/dist/types/crypto/schnorr.d.ts +47 -0
  103. package/dist/types/crypto/schnorr.d.ts.map +1 -0
  104. package/dist/types/index.d.ts +31 -0
  105. package/dist/types/index.d.ts.map +1 -0
  106. package/dist/types/nametag/NametagBinding.d.ts +68 -0
  107. package/dist/types/nametag/NametagBinding.d.ts.map +1 -0
  108. package/dist/types/nametag/NametagUtils.d.ts +44 -0
  109. package/dist/types/nametag/NametagUtils.d.ts.map +1 -0
  110. package/dist/types/nametag/index.d.ts +8 -0
  111. package/dist/types/nametag/index.d.ts.map +1 -0
  112. package/dist/types/protocol/Event.d.ts +112 -0
  113. package/dist/types/protocol/Event.d.ts.map +1 -0
  114. package/dist/types/protocol/EventKinds.d.ts +62 -0
  115. package/dist/types/protocol/EventKinds.d.ts.map +1 -0
  116. package/dist/types/protocol/Filter.d.ts +146 -0
  117. package/dist/types/protocol/Filter.d.ts.map +1 -0
  118. package/dist/types/protocol/index.d.ts +10 -0
  119. package/dist/types/protocol/index.d.ts.map +1 -0
  120. package/dist/types/token/TokenTransferProtocol.d.ts +67 -0
  121. package/dist/types/token/TokenTransferProtocol.d.ts.map +1 -0
  122. package/dist/types/token/index.d.ts +6 -0
  123. package/dist/types/token/index.d.ts.map +1 -0
  124. package/package.json +89 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * BIP-340 Schnorr signature implementation using secp256k1.
4
+ * Uses @noble/curves for cryptographic operations.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getPublicKey = getPublicKey;
8
+ exports.getPublicKeyHex = getPublicKeyHex;
9
+ exports.sign = sign;
10
+ exports.signHex = signHex;
11
+ exports.verify = verify;
12
+ exports.verifyHex = verifyHex;
13
+ const secp256k1_1 = require("@noble/curves/secp256k1");
14
+ const utils_1 = require("@noble/hashes/utils");
15
+ /**
16
+ * Get the x-only public key from a private key (BIP-340)
17
+ * @param privateKey 32-byte private key
18
+ * @returns 32-byte x-only public key
19
+ */
20
+ function getPublicKey(privateKey) {
21
+ if (privateKey.length !== 32) {
22
+ throw new Error('Private key must be 32 bytes');
23
+ }
24
+ return secp256k1_1.schnorr.getPublicKey(privateKey);
25
+ }
26
+ /**
27
+ * Get the x-only public key from a hex-encoded private key
28
+ * @param privateKeyHex Hex-encoded private key
29
+ * @returns Hex-encoded x-only public key
30
+ */
31
+ function getPublicKeyHex(privateKeyHex) {
32
+ const privateKey = (0, utils_1.hexToBytes)(privateKeyHex);
33
+ const publicKey = getPublicKey(privateKey);
34
+ return (0, utils_1.bytesToHex)(publicKey);
35
+ }
36
+ /**
37
+ * Sign a message using BIP-340 Schnorr signature
38
+ * @param message 32-byte message hash to sign
39
+ * @param privateKey 32-byte private key
40
+ * @returns 64-byte Schnorr signature (R.x || s)
41
+ */
42
+ function sign(message, privateKey) {
43
+ if (message.length !== 32) {
44
+ throw new Error('Message must be 32 bytes');
45
+ }
46
+ if (privateKey.length !== 32) {
47
+ throw new Error('Private key must be 32 bytes');
48
+ }
49
+ return secp256k1_1.schnorr.sign(message, privateKey);
50
+ }
51
+ /**
52
+ * Sign a message and return hex-encoded signature
53
+ * @param message 32-byte message hash to sign
54
+ * @param privateKey 32-byte private key
55
+ * @returns Hex-encoded 64-byte Schnorr signature
56
+ */
57
+ function signHex(message, privateKey) {
58
+ return (0, utils_1.bytesToHex)(sign(message, privateKey));
59
+ }
60
+ /**
61
+ * Verify a BIP-340 Schnorr signature
62
+ * @param signature 64-byte Schnorr signature
63
+ * @param message 32-byte message hash
64
+ * @param publicKey 32-byte x-only public key
65
+ * @returns true if the signature is valid
66
+ */
67
+ function verify(signature, message, publicKey) {
68
+ if (signature.length !== 64) {
69
+ return false;
70
+ }
71
+ if (message.length !== 32) {
72
+ return false;
73
+ }
74
+ if (publicKey.length !== 32) {
75
+ return false;
76
+ }
77
+ try {
78
+ return secp256k1_1.schnorr.verify(signature, message, publicKey);
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ /**
85
+ * Verify a hex-encoded Schnorr signature
86
+ * @param signatureHex Hex-encoded 64-byte signature
87
+ * @param message 32-byte message hash
88
+ * @param publicKeyHex Hex-encoded 32-byte public key
89
+ * @returns true if the signature is valid
90
+ */
91
+ function verifyHex(signatureHex, message, publicKeyHex) {
92
+ try {
93
+ const signature = (0, utils_1.hexToBytes)(signatureHex);
94
+ const publicKey = (0, utils_1.hexToBytes)(publicKeyHex);
95
+ return verify(signature, message, publicKey);
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ //# sourceMappingURL=schnorr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schnorr.js","sourceRoot":"","sources":["../../../src/crypto/schnorr.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAUH,oCAKC;AAOD,0CAIC;AAQD,oBAQC;AAQD,0BAEC;AASD,wBAoBC;AASD,8BAYC;AApGD,uDAAkD;AAClD,+CAA6D;AAE7D;;;;GAIG;AACH,SAAgB,YAAY,CAAC,UAAsB;IACjD,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,mBAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,aAAqB;IACnD,MAAM,UAAU,GAAG,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,OAAmB,EAAE,UAAsB;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,mBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,OAAmB,EAAE,UAAsB;IACjE,OAAO,IAAA,kBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,MAAM,CACpB,SAAqB,EACrB,OAAmB,EACnB,SAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,mBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CACvB,YAAoB,EACpB,OAAmB,EACnB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Unicity Nostr SDK
4
+ *
5
+ * A TypeScript SDK for Nostr protocol with Unicity extensions.
6
+ * Works in both Node.js and browser environments.
7
+ *
8
+ * Features:
9
+ * - BIP-340 Schnorr signatures
10
+ * - NIP-04 encrypted direct messages with GZIP compression
11
+ * - Multi-relay WebSocket connections with auto-reconnection
12
+ * - Token transfers over Nostr
13
+ * - Privacy-preserving nametag bindings
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
29
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.TokenTransferProtocol = exports.NametagBinding = exports.NametagUtils = exports.EventKinds = exports.NIP04 = exports.SchnorrSigner = exports.Bech32 = exports.NostrKeyManager = void 0;
33
+ // Core key management
34
+ var NostrKeyManager_js_1 = require("./NostrKeyManager.js");
35
+ Object.defineProperty(exports, "NostrKeyManager", { enumerable: true, get: function () { return NostrKeyManager_js_1.NostrKeyManager; } });
36
+ // Crypto utilities
37
+ __exportStar(require("./crypto/index.js"), exports);
38
+ var index_js_1 = require("./crypto/index.js");
39
+ Object.defineProperty(exports, "Bech32", { enumerable: true, get: function () { return index_js_1.Bech32; } });
40
+ Object.defineProperty(exports, "SchnorrSigner", { enumerable: true, get: function () { return index_js_1.SchnorrSigner; } });
41
+ Object.defineProperty(exports, "NIP04", { enumerable: true, get: function () { return index_js_1.NIP04; } });
42
+ // Protocol types and classes
43
+ __exportStar(require("./protocol/index.js"), exports);
44
+ var index_js_2 = require("./protocol/index.js");
45
+ Object.defineProperty(exports, "EventKinds", { enumerable: true, get: function () { return index_js_2.EventKinds; } });
46
+ // Client
47
+ __exportStar(require("./client/index.js"), exports);
48
+ // Nametag utilities
49
+ __exportStar(require("./nametag/index.js"), exports);
50
+ var index_js_3 = require("./nametag/index.js");
51
+ Object.defineProperty(exports, "NametagUtils", { enumerable: true, get: function () { return index_js_3.NametagUtils; } });
52
+ Object.defineProperty(exports, "NametagBinding", { enumerable: true, get: function () { return index_js_3.NametagBinding; } });
53
+ // Token transfer
54
+ __exportStar(require("./token/index.js"), exports);
55
+ var index_js_4 = require("./token/index.js");
56
+ Object.defineProperty(exports, "TokenTransferProtocol", { enumerable: true, get: function () { return index_js_4.TokenTransferProtocol; } });
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;AAEH,sBAAsB;AACtB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,mBAAmB;AACnB,oDAAkC;AAClC,8CAI2B;AAHzB,kGAAA,MAAM,OAAA;AACN,yGAAA,aAAa,OAAA;AACb,iGAAA,KAAK,OAAA;AAGP,6BAA6B;AAC7B,sDAAoC;AACpC,gDAAiD;AAAxC,sGAAA,UAAU,OAAA;AAEnB,SAAS;AACT,oDAAkC;AAElC,oBAAoB;AACpB,qDAAmC;AACnC,+CAAkE;AAAzD,wGAAA,YAAY,OAAA;AAAE,0GAAA,cAAc,OAAA;AAErC,iBAAiB;AACjB,mDAAiC;AACjC,6CAAyD;AAAhD,iHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * NametagBinding - Create and parse nametag binding events.
4
+ * Uses kind 30078 (APP_DATA) for parameterized replaceable events.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.createBindingEvent = createBindingEvent;
41
+ exports.createNametagToPubkeyFilter = createNametagToPubkeyFilter;
42
+ exports.createPubkeyToNametagFilter = createPubkeyToNametagFilter;
43
+ exports.parseNametagHashFromEvent = parseNametagHashFromEvent;
44
+ exports.parseAddressFromEvent = parseAddressFromEvent;
45
+ exports.isValidBindingEvent = isValidBindingEvent;
46
+ const Event_js_1 = require("../protocol/Event.js");
47
+ const Filter_js_1 = require("../protocol/Filter.js");
48
+ const EventKinds = __importStar(require("../protocol/EventKinds.js"));
49
+ const NametagUtils = __importStar(require("./NametagUtils.js"));
50
+ /** Default country code for phone number normalization */
51
+ const DEFAULT_COUNTRY = 'US';
52
+ /**
53
+ * Create a nametag binding event.
54
+ *
55
+ * Event structure:
56
+ * - Kind: 30078 (APP_DATA - parameterized replaceable)
57
+ * - Tags:
58
+ * - ["d", "<hashed_nametag>"] - Required for parameterized replaceable
59
+ * - ["nametag", "<hashed_nametag>"] - Hashed for privacy
60
+ * - ["t", "<hashed_nametag>"] - Indexed tag for relay search
61
+ * - ["address", "<unicity_addr>"] - Unicity blockchain address
62
+ * - Content: JSON with nametag_hash, address, verified timestamp
63
+ *
64
+ * @param keyManager Key manager with signing keys
65
+ * @param nametagId Nametag identifier (phone number or username)
66
+ * @param unicityAddress Unicity blockchain address
67
+ * @param defaultCountry Default country code for phone normalization
68
+ * @returns Signed event
69
+ */
70
+ async function createBindingEvent(keyManager, nametagId, unicityAddress, defaultCountry = DEFAULT_COUNTRY) {
71
+ const hashedNametag = NametagUtils.hashNametag(nametagId, defaultCountry);
72
+ const content = {
73
+ nametag_hash: hashedNametag,
74
+ address: unicityAddress,
75
+ verified: Date.now(),
76
+ };
77
+ const event = Event_js_1.Event.create(keyManager, {
78
+ kind: EventKinds.APP_DATA,
79
+ tags: [
80
+ ['d', hashedNametag],
81
+ ['nametag', hashedNametag],
82
+ ['t', hashedNametag],
83
+ ['address', unicityAddress],
84
+ ],
85
+ content: JSON.stringify(content),
86
+ });
87
+ return event;
88
+ }
89
+ /**
90
+ * Create a filter to query pubkey by nametag.
91
+ * Query direction: nametag → pubkey
92
+ *
93
+ * @param nametagId Nametag identifier
94
+ * @param defaultCountry Default country code for phone normalization
95
+ * @returns Filter for nametag binding events
96
+ */
97
+ function createNametagToPubkeyFilter(nametagId, defaultCountry = DEFAULT_COUNTRY) {
98
+ const hashedNametag = NametagUtils.hashNametag(nametagId, defaultCountry);
99
+ return Filter_js_1.Filter.builder()
100
+ .kinds(EventKinds.APP_DATA)
101
+ .tTags(hashedNametag)
102
+ .build();
103
+ }
104
+ /**
105
+ * Create a filter to query nametags by pubkey.
106
+ * Query direction: pubkey → nametags
107
+ *
108
+ * @param nostrPubkey Nostr public key (hex)
109
+ * @returns Filter for nametag binding events
110
+ */
111
+ function createPubkeyToNametagFilter(nostrPubkey) {
112
+ return Filter_js_1.Filter.builder()
113
+ .kinds(EventKinds.APP_DATA)
114
+ .authors(nostrPubkey)
115
+ .limit(10)
116
+ .build();
117
+ }
118
+ /**
119
+ * Parse the hashed nametag from a binding event.
120
+ * Tries tags first, then content JSON.
121
+ *
122
+ * @param event Binding event
123
+ * @returns Hashed nametag, or undefined if not found
124
+ */
125
+ function parseNametagHashFromEvent(event) {
126
+ // Try "nametag" tag first
127
+ const fromTag = event.getTagValue('nametag');
128
+ if (fromTag) {
129
+ return fromTag;
130
+ }
131
+ // Try "d" tag
132
+ const fromDTag = event.getTagValue('d');
133
+ if (fromDTag) {
134
+ return fromDTag;
135
+ }
136
+ // Try content JSON
137
+ try {
138
+ const content = JSON.parse(event.content);
139
+ return content.nametag_hash;
140
+ }
141
+ catch {
142
+ return undefined;
143
+ }
144
+ }
145
+ /**
146
+ * Parse the Unicity address from a binding event.
147
+ * Tries tags first, then content JSON.
148
+ *
149
+ * @param event Binding event
150
+ * @returns Unicity address, or undefined if not found
151
+ */
152
+ function parseAddressFromEvent(event) {
153
+ // Try "address" tag first
154
+ const fromTag = event.getTagValue('address');
155
+ if (fromTag) {
156
+ return fromTag;
157
+ }
158
+ // Try content JSON
159
+ try {
160
+ const content = JSON.parse(event.content);
161
+ return content.address;
162
+ }
163
+ catch {
164
+ return undefined;
165
+ }
166
+ }
167
+ /**
168
+ * Verify that a binding event is valid.
169
+ * Checks signature and structure.
170
+ *
171
+ * @param event Event to verify
172
+ * @returns true if the binding event is valid
173
+ */
174
+ function isValidBindingEvent(event) {
175
+ // Check event kind
176
+ if (event.kind !== EventKinds.APP_DATA) {
177
+ return false;
178
+ }
179
+ // Check required tags
180
+ if (!event.hasTag('d')) {
181
+ return false;
182
+ }
183
+ // Check content structure
184
+ try {
185
+ const content = JSON.parse(event.content);
186
+ if (!content.nametag_hash || !content.address) {
187
+ return false;
188
+ }
189
+ }
190
+ catch {
191
+ return false;
192
+ }
193
+ // Verify signature
194
+ return event.verify();
195
+ }
196
+ //# sourceMappingURL=NametagBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NametagBinding.js","sourceRoot":"","sources":["../../../src/nametag/NametagBinding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * NametagUtils - Privacy-preserving nametag normalization and hashing.
4
+ * Supports phone number normalization to E.164 format.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.normalizeNametag = normalizeNametag;
8
+ exports.hashNametag = hashNametag;
9
+ exports.areSameNametag = areSameNametag;
10
+ exports.formatForDisplay = formatForDisplay;
11
+ exports.isPhoneNumber = isPhoneNumber;
12
+ const sha256_1 = require("@noble/hashes/sha256");
13
+ const utils_1 = require("@noble/hashes/utils");
14
+ const libphonenumber_js_1 = require("libphonenumber-js");
15
+ /** Salt prefix for nametag hashing */
16
+ const NAMETAG_SALT = 'unicity:nametag:';
17
+ /** Default country code for phone number normalization */
18
+ const DEFAULT_COUNTRY = 'US';
19
+ /**
20
+ * Compute SHA-256 hash of a string.
21
+ * @param input String to hash
22
+ * @returns Hex-encoded hash
23
+ */
24
+ function sha256Hex(input) {
25
+ const bytes = new TextEncoder().encode(input);
26
+ return (0, utils_1.bytesToHex)((0, sha256_1.sha256)(bytes));
27
+ }
28
+ /**
29
+ * Check if a string looks like a phone number.
30
+ * Heuristic: starts with + OR has >50% digits AND >= 7 digits total.
31
+ * @param str String to check
32
+ * @returns true if the string looks like a phone number
33
+ */
34
+ function isLikelyPhoneNumber(str) {
35
+ if (str.startsWith('+')) {
36
+ return true;
37
+ }
38
+ const digitsOnly = str.replace(/\D/g, '');
39
+ const digitCount = digitsOnly.length;
40
+ if (digitCount < 7) {
41
+ return false;
42
+ }
43
+ // Count non-digit characters (excluding common phone number chars)
44
+ const cleanedLength = str.replace(/[\s\-\(\)\.]/g, '').length;
45
+ const digitRatio = digitCount / cleanedLength;
46
+ return digitRatio > 0.5;
47
+ }
48
+ /**
49
+ * Normalize a phone number to E.164 format.
50
+ * @param phoneNumber Phone number string
51
+ * @param defaultCountry Default country code
52
+ * @returns E.164 formatted phone number, or null if invalid
53
+ */
54
+ function normalizePhoneNumber(phoneNumber, defaultCountry) {
55
+ try {
56
+ // Try to parse with default country
57
+ if ((0, libphonenumber_js_1.isValidPhoneNumber)(phoneNumber, defaultCountry)) {
58
+ const parsed = (0, libphonenumber_js_1.parsePhoneNumber)(phoneNumber, defaultCountry);
59
+ return parsed.format('E.164');
60
+ }
61
+ // Try without default country (for numbers with country code)
62
+ if ((0, libphonenumber_js_1.isValidPhoneNumber)(phoneNumber)) {
63
+ const parsed = (0, libphonenumber_js_1.parsePhoneNumber)(phoneNumber);
64
+ return parsed.format('E.164');
65
+ }
66
+ return null;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ /**
73
+ * Normalize a nametag for hashing.
74
+ * - If it looks like a phone number, normalize to E.164
75
+ * - Otherwise, lowercase and remove @unicity suffix
76
+ * @param nametag Nametag to normalize
77
+ * @param defaultCountry Default country code for phone normalization
78
+ * @returns Normalized nametag
79
+ */
80
+ function normalizeNametag(nametag, defaultCountry = DEFAULT_COUNTRY) {
81
+ const trimmed = nametag.trim();
82
+ if (isLikelyPhoneNumber(trimmed)) {
83
+ const normalized = normalizePhoneNumber(trimmed, defaultCountry);
84
+ if (normalized) {
85
+ return normalized;
86
+ }
87
+ // If phone normalization fails, fall through to standard normalization
88
+ }
89
+ // Standard normalization: lowercase, remove @unicity suffix
90
+ let normalized = trimmed.toLowerCase();
91
+ if (normalized.endsWith('@unicity')) {
92
+ normalized = normalized.slice(0, -8);
93
+ }
94
+ return normalized;
95
+ }
96
+ /**
97
+ * Hash a nametag with the standard salt.
98
+ * @param nametag Nametag to hash
99
+ * @param defaultCountry Default country code for phone normalization
100
+ * @returns Hex-encoded SHA-256 hash
101
+ */
102
+ function hashNametag(nametag, defaultCountry = DEFAULT_COUNTRY) {
103
+ const normalized = normalizeNametag(nametag, defaultCountry);
104
+ return sha256Hex(NAMETAG_SALT + normalized);
105
+ }
106
+ /**
107
+ * Compare two nametags for equality (handling format variations).
108
+ * @param tag1 First nametag
109
+ * @param tag2 Second nametag
110
+ * @param defaultCountry Default country code for phone normalization
111
+ * @returns true if the nametags represent the same identity
112
+ */
113
+ function areSameNametag(tag1, tag2, defaultCountry = DEFAULT_COUNTRY) {
114
+ const normalized1 = normalizeNametag(tag1, defaultCountry);
115
+ const normalized2 = normalizeNametag(tag2, defaultCountry);
116
+ return normalized1 === normalized2;
117
+ }
118
+ /**
119
+ * Format a nametag for display (privacy-preserving).
120
+ * For phone numbers, hides middle digits.
121
+ * @param nametag Nametag to format
122
+ * @param defaultCountry Default country code for phone normalization
123
+ * @returns Display-safe formatted nametag
124
+ */
125
+ function formatForDisplay(nametag, defaultCountry = DEFAULT_COUNTRY) {
126
+ const trimmed = nametag.trim();
127
+ if (isLikelyPhoneNumber(trimmed)) {
128
+ const normalized = normalizePhoneNumber(trimmed, defaultCountry);
129
+ if (normalized) {
130
+ // Hide middle digits: +1415***2671
131
+ const digits = normalized.slice(1); // Remove +
132
+ if (digits.length > 6) {
133
+ const start = digits.slice(0, 4);
134
+ const end = digits.slice(-4);
135
+ return '+' + start + '***' + end;
136
+ }
137
+ }
138
+ }
139
+ return normalizeNametag(nametag, defaultCountry);
140
+ }
141
+ /**
142
+ * Check if a string is a valid phone number.
143
+ * @param str String to check
144
+ * @param defaultCountry Default country code
145
+ * @returns true if the string is a valid phone number
146
+ */
147
+ function isPhoneNumber(str, defaultCountry = DEFAULT_COUNTRY) {
148
+ try {
149
+ return (0, libphonenumber_js_1.isValidPhoneNumber)(str, defaultCountry) ||
150
+ (0, libphonenumber_js_1.isValidPhoneNumber)(str);
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ //# sourceMappingURL=NametagUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NametagUtils.js","sourceRoot":"","sources":["../../../src/nametag/NametagUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Nametag module - Privacy-preserving identity bindings
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
39
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.NametagBinding = exports.NametagUtils = void 0;
43
+ exports.NametagUtils = __importStar(require("./NametagUtils.js"));
44
+ __exportStar(require("./NametagUtils.js"), exports);
45
+ exports.NametagBinding = __importStar(require("./NametagBinding.js"));
46
+ __exportStar(require("./NametagBinding.js"), exports);
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nametag/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,kEAAkD;AAClD,oDAAkC;AAClC,sEAAsD;AACtD,sDAAoC"}