working rss feed to nostr publish
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Pieter Wuille
|
||||
Copyright (c) 2018 bitcoinjs contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# bech32
|
||||
[](http://travis-ci.org/bitcoinjs/bech32)
|
||||
[](https://www.npmjs.org/package/bech32)
|
||||
|
||||
A [BIP173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki)/[BIP350](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki) compatible Bech32/Bech32m encoding/decoding library.
|
||||
|
||||
|
||||
## Example
|
||||
``` javascript
|
||||
let { bech32, bech32m } = require('bech32')
|
||||
|
||||
bech32.decode('abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw')
|
||||
// => {
|
||||
// prefix: 'abcdef',
|
||||
// words: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
|
||||
// }
|
||||
bech32m.decode('abcdef1l7aum6echk45nj3s0wdvt2fg8x9yrzpqzd3ryx')
|
||||
// => {
|
||||
// prefix: 'abcdef',
|
||||
// words: [31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]
|
||||
// }
|
||||
|
||||
// toWords etc. are available on both bech32 and bech32m objects
|
||||
let words = bech32.toWords(Buffer.from('foobar', 'utf8'))
|
||||
bech32.encode('foo', words)
|
||||
// => 'foo1vehk7cnpwgry9h96'
|
||||
bech32m.encode('foo', words)
|
||||
// => 'foo1vehk7cnpwgkc4mqc'
|
||||
```
|
||||
|
||||
|
||||
### Advanced
|
||||
BIP173 enforces a limitation of 90 characters, if extend the `LIMIT` parameter beyond this, be aware that the [effectiveness of checksum decreases as the length increases](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#checksum-design).
|
||||
|
||||
It is highly recommended **NOT** exceed 1023 characters, as the module could only guarantee detecting 1 error.
|
||||
|
||||
|
||||
## Credits
|
||||
- [Peter Wuille](https://github.com/sipa/bech32) for the reference JavaScript implementation, and for authoring the Bech32 [BIP173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki) and Bech32m [BIP350](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki).
|
||||
|
||||
|
||||
## License [MIT](LICENSE)
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
declare function toWords(bytes: ArrayLike<number>): number[];
|
||||
declare function fromWordsUnsafe(words: ArrayLike<number>): number[] | undefined;
|
||||
declare function fromWords(words: ArrayLike<number>): number[];
|
||||
export declare const bech32: BechLib;
|
||||
export declare const bech32m: BechLib;
|
||||
export interface Decoded {
|
||||
prefix: string;
|
||||
words: number[];
|
||||
}
|
||||
export interface BechLib {
|
||||
decodeUnsafe: (str: string, LIMIT?: number | undefined) => Decoded | undefined;
|
||||
decode: (str: string, LIMIT?: number | undefined) => Decoded;
|
||||
encode: (prefix: string, words: ArrayLike<number>, LIMIT?: number | undefined) => string;
|
||||
toWords: typeof toWords;
|
||||
fromWordsUnsafe: typeof fromWordsUnsafe;
|
||||
fromWords: typeof fromWords;
|
||||
}
|
||||
export {};
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
'use strict';
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.bech32m = exports.bech32 = void 0;
|
||||
const ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';
|
||||
const ALPHABET_MAP = {};
|
||||
for (let z = 0; z < ALPHABET.length; z++) {
|
||||
const x = ALPHABET.charAt(z);
|
||||
ALPHABET_MAP[x] = z;
|
||||
}
|
||||
function polymodStep(pre) {
|
||||
const b = pre >> 25;
|
||||
return (((pre & 0x1ffffff) << 5) ^
|
||||
(-((b >> 0) & 1) & 0x3b6a57b2) ^
|
||||
(-((b >> 1) & 1) & 0x26508e6d) ^
|
||||
(-((b >> 2) & 1) & 0x1ea119fa) ^
|
||||
(-((b >> 3) & 1) & 0x3d4233dd) ^
|
||||
(-((b >> 4) & 1) & 0x2a1462b3));
|
||||
}
|
||||
function prefixChk(prefix) {
|
||||
let chk = 1;
|
||||
for (let i = 0; i < prefix.length; ++i) {
|
||||
const c = prefix.charCodeAt(i);
|
||||
if (c < 33 || c > 126)
|
||||
return 'Invalid prefix (' + prefix + ')';
|
||||
chk = polymodStep(chk) ^ (c >> 5);
|
||||
}
|
||||
chk = polymodStep(chk);
|
||||
for (let i = 0; i < prefix.length; ++i) {
|
||||
const v = prefix.charCodeAt(i);
|
||||
chk = polymodStep(chk) ^ (v & 0x1f);
|
||||
}
|
||||
return chk;
|
||||
}
|
||||
function convert(data, inBits, outBits, pad) {
|
||||
let value = 0;
|
||||
let bits = 0;
|
||||
const maxV = (1 << outBits) - 1;
|
||||
const result = [];
|
||||
for (let i = 0; i < data.length; ++i) {
|
||||
value = (value << inBits) | data[i];
|
||||
bits += inBits;
|
||||
while (bits >= outBits) {
|
||||
bits -= outBits;
|
||||
result.push((value >> bits) & maxV);
|
||||
}
|
||||
}
|
||||
if (pad) {
|
||||
if (bits > 0) {
|
||||
result.push((value << (outBits - bits)) & maxV);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bits >= inBits)
|
||||
return 'Excess padding';
|
||||
if ((value << (outBits - bits)) & maxV)
|
||||
return 'Non-zero padding';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function toWords(bytes) {
|
||||
return convert(bytes, 8, 5, true);
|
||||
}
|
||||
function fromWordsUnsafe(words) {
|
||||
const res = convert(words, 5, 8, false);
|
||||
if (Array.isArray(res))
|
||||
return res;
|
||||
}
|
||||
function fromWords(words) {
|
||||
const res = convert(words, 5, 8, false);
|
||||
if (Array.isArray(res))
|
||||
return res;
|
||||
throw new Error(res);
|
||||
}
|
||||
function getLibraryFromEncoding(encoding) {
|
||||
let ENCODING_CONST;
|
||||
if (encoding === 'bech32') {
|
||||
ENCODING_CONST = 1;
|
||||
}
|
||||
else {
|
||||
ENCODING_CONST = 0x2bc830a3;
|
||||
}
|
||||
function encode(prefix, words, LIMIT) {
|
||||
LIMIT = LIMIT || 90;
|
||||
if (prefix.length + 7 + words.length > LIMIT)
|
||||
throw new TypeError('Exceeds length limit');
|
||||
prefix = prefix.toLowerCase();
|
||||
// determine chk mod
|
||||
let chk = prefixChk(prefix);
|
||||
if (typeof chk === 'string')
|
||||
throw new Error(chk);
|
||||
let result = prefix + '1';
|
||||
for (let i = 0; i < words.length; ++i) {
|
||||
const x = words[i];
|
||||
if (x >> 5 !== 0)
|
||||
throw new Error('Non 5-bit word');
|
||||
chk = polymodStep(chk) ^ x;
|
||||
result += ALPHABET.charAt(x);
|
||||
}
|
||||
for (let i = 0; i < 6; ++i) {
|
||||
chk = polymodStep(chk);
|
||||
}
|
||||
chk ^= ENCODING_CONST;
|
||||
for (let i = 0; i < 6; ++i) {
|
||||
const v = (chk >> ((5 - i) * 5)) & 0x1f;
|
||||
result += ALPHABET.charAt(v);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function __decode(str, LIMIT) {
|
||||
LIMIT = LIMIT || 90;
|
||||
if (str.length < 8)
|
||||
return str + ' too short';
|
||||
if (str.length > LIMIT)
|
||||
return 'Exceeds length limit';
|
||||
// don't allow mixed case
|
||||
const lowered = str.toLowerCase();
|
||||
const uppered = str.toUpperCase();
|
||||
if (str !== lowered && str !== uppered)
|
||||
return 'Mixed-case string ' + str;
|
||||
str = lowered;
|
||||
const split = str.lastIndexOf('1');
|
||||
if (split === -1)
|
||||
return 'No separator character for ' + str;
|
||||
if (split === 0)
|
||||
return 'Missing prefix for ' + str;
|
||||
const prefix = str.slice(0, split);
|
||||
const wordChars = str.slice(split + 1);
|
||||
if (wordChars.length < 6)
|
||||
return 'Data too short';
|
||||
let chk = prefixChk(prefix);
|
||||
if (typeof chk === 'string')
|
||||
return chk;
|
||||
const words = [];
|
||||
for (let i = 0; i < wordChars.length; ++i) {
|
||||
const c = wordChars.charAt(i);
|
||||
const v = ALPHABET_MAP[c];
|
||||
if (v === undefined)
|
||||
return 'Unknown character ' + c;
|
||||
chk = polymodStep(chk) ^ v;
|
||||
// not in the checksum?
|
||||
if (i + 6 >= wordChars.length)
|
||||
continue;
|
||||
words.push(v);
|
||||
}
|
||||
if (chk !== ENCODING_CONST)
|
||||
return 'Invalid checksum for ' + str;
|
||||
return { prefix, words };
|
||||
}
|
||||
function decodeUnsafe(str, LIMIT) {
|
||||
const res = __decode(str, LIMIT);
|
||||
if (typeof res === 'object')
|
||||
return res;
|
||||
}
|
||||
function decode(str, LIMIT) {
|
||||
const res = __decode(str, LIMIT);
|
||||
if (typeof res === 'object')
|
||||
return res;
|
||||
throw new Error(res);
|
||||
}
|
||||
return {
|
||||
decodeUnsafe,
|
||||
decode,
|
||||
encode,
|
||||
toWords,
|
||||
fromWordsUnsafe,
|
||||
fromWords,
|
||||
};
|
||||
}
|
||||
exports.bech32 = getLibraryFromEncoding('bech32');
|
||||
exports.bech32m = getLibraryFromEncoding('bech32m');
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"name": "bech32",
|
||||
"version": "2.0.0",
|
||||
"description": "Bech32 encoding / decoding",
|
||||
"keywords": [
|
||||
"base32",
|
||||
"bech32",
|
||||
"bech32m",
|
||||
"bitcoin",
|
||||
"crypto",
|
||||
"crytography",
|
||||
"decode",
|
||||
"decoding",
|
||||
"encode",
|
||||
"encoding"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
"dist/index.js",
|
||||
"dist/index.d.ts"
|
||||
],
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.0.14",
|
||||
"@types/tape": "^4.13.0",
|
||||
"nyc": "^15.0.0",
|
||||
"prettier": "^2.0.5",
|
||||
"rimraf": "^3.0.2",
|
||||
"tap-dot": "*",
|
||||
"tape": "^4.13.2",
|
||||
"tslint": "^6.1.3",
|
||||
"typescript": "^3.9.5"
|
||||
},
|
||||
"repository": {
|
||||
"url": "http://github.com/bitcoinjs/bech32",
|
||||
"type": "git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "npm run clean && tsc -d",
|
||||
"clean": "rimraf dist",
|
||||
"coverage": "nyc -x dist/test/*.js --check-coverage --branches 90 --functions 90 tape dist/test/*.js",
|
||||
"format": "npm run prettier -- --write",
|
||||
"format:ci": "npm run prettier -- --check",
|
||||
"gitdiff:ci": "npm run build && git diff --exit-code",
|
||||
"lint": "tslint -p tsconfig.json -c tslint.json",
|
||||
"prettier": "prettier --print-width 100 --single-quote --trailing-comma=all \"**/!(*.d).ts\"",
|
||||
"test": "tape dist/test/*.js | tap-dot"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user