@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.
- package/README.md +290 -0
- package/dist/browser/index.js +8444 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/index.min.js +12 -0
- package/dist/browser/index.min.js.map +1 -0
- package/dist/browser/index.umd.js +8524 -0
- package/dist/browser/index.umd.js.map +1 -0
- package/dist/browser/index.umd.min.js +12 -0
- package/dist/browser/index.umd.min.js.map +1 -0
- package/dist/cjs/NostrKeyManager.js +265 -0
- package/dist/cjs/NostrKeyManager.js.map +1 -0
- package/dist/cjs/client/NostrClient.js +518 -0
- package/dist/cjs/client/NostrClient.js.map +1 -0
- package/dist/cjs/client/NostrEventListener.js +31 -0
- package/dist/cjs/client/NostrEventListener.js.map +1 -0
- package/dist/cjs/client/WebSocketAdapter.js +90 -0
- package/dist/cjs/client/WebSocketAdapter.js.map +1 -0
- package/dist/cjs/client/index.js +18 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/crypto/bech32.js +201 -0
- package/dist/cjs/crypto/bech32.js.map +1 -0
- package/dist/cjs/crypto/index.js +49 -0
- package/dist/cjs/crypto/index.js.map +1 -0
- package/dist/cjs/crypto/nip04.js +327 -0
- package/dist/cjs/crypto/nip04.js.map +1 -0
- package/dist/cjs/crypto/schnorr.js +101 -0
- package/dist/cjs/crypto/schnorr.js.map +1 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nametag/NametagBinding.js +196 -0
- package/dist/cjs/nametag/NametagBinding.js.map +1 -0
- package/dist/cjs/nametag/NametagUtils.js +156 -0
- package/dist/cjs/nametag/NametagUtils.js.map +1 -0
- package/dist/cjs/nametag/index.js +47 -0
- package/dist/cjs/nametag/index.js.map +1 -0
- package/dist/cjs/protocol/Event.js +209 -0
- package/dist/cjs/protocol/Event.js.map +1 -0
- package/dist/cjs/protocol/EventKinds.js +126 -0
- package/dist/cjs/protocol/EventKinds.js.map +1 -0
- package/dist/cjs/protocol/Filter.js +202 -0
- package/dist/cjs/protocol/Filter.js.map +1 -0
- package/dist/cjs/protocol/index.js +50 -0
- package/dist/cjs/protocol/index.js.map +1 -0
- package/dist/cjs/token/TokenTransferProtocol.js +196 -0
- package/dist/cjs/token/TokenTransferProtocol.js.map +1 -0
- package/dist/cjs/token/index.js +45 -0
- package/dist/cjs/token/index.js.map +1 -0
- package/dist/esm/NostrKeyManager.js +228 -0
- package/dist/esm/NostrKeyManager.js.map +1 -0
- package/dist/esm/client/NostrClient.js +481 -0
- package/dist/esm/client/NostrClient.js.map +1 -0
- package/dist/esm/client/NostrEventListener.js +27 -0
- package/dist/esm/client/NostrEventListener.js.map +1 -0
- package/dist/esm/client/WebSocketAdapter.js +52 -0
- package/dist/esm/client/WebSocketAdapter.js.map +1 -0
- package/dist/esm/client/index.js +7 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/crypto/bech32.js +193 -0
- package/dist/esm/crypto/bech32.js.map +1 -0
- package/dist/esm/crypto/index.js +10 -0
- package/dist/esm/crypto/index.js.map +1 -0
- package/dist/esm/crypto/nip04.js +286 -0
- package/dist/esm/crypto/nip04.js.map +1 -0
- package/dist/esm/crypto/schnorr.js +93 -0
- package/dist/esm/crypto/schnorr.js.map +1 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nametag/NametagBinding.js +155 -0
- package/dist/esm/nametag/NametagBinding.js.map +1 -0
- package/dist/esm/nametag/NametagUtils.js +149 -0
- package/dist/esm/nametag/NametagUtils.js.map +1 -0
- package/dist/esm/nametag/index.js +8 -0
- package/dist/esm/nametag/index.js.map +1 -0
- package/dist/esm/protocol/Event.js +172 -0
- package/dist/esm/protocol/Event.js.map +1 -0
- package/dist/esm/protocol/EventKinds.js +119 -0
- package/dist/esm/protocol/EventKinds.js.map +1 -0
- package/dist/esm/protocol/Filter.js +197 -0
- package/dist/esm/protocol/Filter.js.map +1 -0
- package/dist/esm/protocol/index.js +8 -0
- package/dist/esm/protocol/index.js.map +1 -0
- package/dist/esm/token/TokenTransferProtocol.js +154 -0
- package/dist/esm/token/TokenTransferProtocol.js.map +1 -0
- package/dist/esm/token/index.js +6 -0
- package/dist/esm/token/index.js.map +1 -0
- package/dist/types/NostrKeyManager.d.ts +150 -0
- package/dist/types/NostrKeyManager.d.ts.map +1 -0
- package/dist/types/client/NostrClient.d.ts +154 -0
- package/dist/types/client/NostrClient.d.ts.map +1 -0
- package/dist/types/client/NostrEventListener.d.ts +40 -0
- package/dist/types/client/NostrEventListener.d.ts.map +1 -0
- package/dist/types/client/WebSocketAdapter.d.ts +55 -0
- package/dist/types/client/WebSocketAdapter.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +9 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/crypto/bech32.d.ts +51 -0
- package/dist/types/crypto/bech32.d.ts.map +1 -0
- package/dist/types/crypto/index.d.ts +10 -0
- package/dist/types/crypto/index.d.ts.map +1 -0
- package/dist/types/crypto/nip04.d.ts +56 -0
- package/dist/types/crypto/nip04.d.ts.map +1 -0
- package/dist/types/crypto/schnorr.d.ts +47 -0
- package/dist/types/crypto/schnorr.d.ts.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/nametag/NametagBinding.d.ts +68 -0
- package/dist/types/nametag/NametagBinding.d.ts.map +1 -0
- package/dist/types/nametag/NametagUtils.d.ts +44 -0
- package/dist/types/nametag/NametagUtils.d.ts.map +1 -0
- package/dist/types/nametag/index.d.ts +8 -0
- package/dist/types/nametag/index.d.ts.map +1 -0
- package/dist/types/protocol/Event.d.ts +112 -0
- package/dist/types/protocol/Event.d.ts.map +1 -0
- package/dist/types/protocol/EventKinds.d.ts +62 -0
- package/dist/types/protocol/EventKinds.d.ts.map +1 -0
- package/dist/types/protocol/Filter.d.ts +146 -0
- package/dist/types/protocol/Filter.d.ts.map +1 -0
- package/dist/types/protocol/index.d.ts +10 -0
- package/dist/types/protocol/index.d.ts.map +1 -0
- package/dist/types/token/TokenTransferProtocol.d.ts +67 -0
- package/dist/types/token/TokenTransferProtocol.d.ts.map +1 -0
- package/dist/types/token/index.d.ts +6 -0
- package/dist/types/token/index.d.ts.map +1 -0
- 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"}
|