@reifydb/auth-solana 0.5.5
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/dist/index.d.ts +9 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WalletConnector } from '@reifydb/auth';
|
|
2
|
+
export * from '@reifydb/auth';
|
|
3
|
+
|
|
4
|
+
declare function encode_base58(bytes: Uint8Array): string;
|
|
5
|
+
declare function is_base58(value: string): boolean;
|
|
6
|
+
|
|
7
|
+
declare function useSolanaWalletConnector(): WalletConnector;
|
|
8
|
+
|
|
9
|
+
export { encode_base58, is_base58, useSolanaWalletConnector };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// src/base58.ts
|
|
2
|
+
var ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
3
|
+
var ALPHABET_SET = new Set(ALPHABET);
|
|
4
|
+
function encode_base58(bytes) {
|
|
5
|
+
if (bytes.length === 0) return "";
|
|
6
|
+
let leading_zeros = 0;
|
|
7
|
+
while (leading_zeros < bytes.length && bytes[leading_zeros] === 0) {
|
|
8
|
+
leading_zeros += 1;
|
|
9
|
+
}
|
|
10
|
+
const digits = [];
|
|
11
|
+
for (let i = leading_zeros; i < bytes.length; i += 1) {
|
|
12
|
+
let carry = bytes[i];
|
|
13
|
+
for (let j = 0; j < digits.length; j += 1) {
|
|
14
|
+
carry += digits[j] * 256;
|
|
15
|
+
digits[j] = carry % 58;
|
|
16
|
+
carry = Math.floor(carry / 58);
|
|
17
|
+
}
|
|
18
|
+
while (carry > 0) {
|
|
19
|
+
digits.push(carry % 58);
|
|
20
|
+
carry = Math.floor(carry / 58);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
let out = "";
|
|
24
|
+
for (let i = 0; i < leading_zeros; i += 1) out += ALPHABET[0];
|
|
25
|
+
for (let i = digits.length - 1; i >= 0; i -= 1) out += ALPHABET[digits[i]];
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
function is_base58(value) {
|
|
29
|
+
if (value.length === 0) return false;
|
|
30
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
31
|
+
if (!ALPHABET_SET.has(value[i])) return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/solana-connector.ts
|
|
37
|
+
import { useMemo } from "react";
|
|
38
|
+
import { useWallet } from "@solana/wallet-adapter-react";
|
|
39
|
+
var SOLANA_WALLET_NAME_KEY = "walletName";
|
|
40
|
+
function read_has_selected_wallet() {
|
|
41
|
+
if (typeof window === "undefined") return false;
|
|
42
|
+
try {
|
|
43
|
+
return localStorage.getItem(SOLANA_WALLET_NAME_KEY) != null;
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function useSolanaWalletConnector() {
|
|
49
|
+
const { connected, connecting, publicKey, signMessage } = useWallet();
|
|
50
|
+
return useMemo(() => {
|
|
51
|
+
const pk = publicKey != null ? publicKey.toBase58() : null;
|
|
52
|
+
return {
|
|
53
|
+
connected,
|
|
54
|
+
connecting,
|
|
55
|
+
publicKey: pk,
|
|
56
|
+
hasSelectedWallet: read_has_selected_wallet(),
|
|
57
|
+
async signMessage(message) {
|
|
58
|
+
if (signMessage == null) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
"@reifydb/auth-solana: connected wallet does not support signMessage"
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return signMessage(message);
|
|
64
|
+
},
|
|
65
|
+
encodeSignature(bytes) {
|
|
66
|
+
return encode_base58(bytes);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}, [connected, connecting, publicKey, signMessage]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/index.ts
|
|
73
|
+
export * from "@reifydb/auth";
|
|
74
|
+
export {
|
|
75
|
+
encode_base58,
|
|
76
|
+
is_base58,
|
|
77
|
+
useSolanaWalletConnector
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/base58.ts","../src/solana-connector.ts","../src/index.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\n// Base58 alphabet used by Solana (Bitcoin's flavor, not the Flickr variant).\nconst ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nconst ALPHABET_SET = new Set(ALPHABET);\n\nexport function encode_base58(bytes: Uint8Array): string {\n if (bytes.length === 0) return \"\";\n\n // Count leading zero bytes; they become leading '1's in base58.\n let leading_zeros = 0;\n while (leading_zeros < bytes.length && bytes[leading_zeros] === 0) {\n leading_zeros += 1;\n }\n\n // Convert the rest to base58 by repeated division.\n const digits: number[] = [];\n for (let i = leading_zeros; i < bytes.length; i += 1) {\n let carry = bytes[i];\n for (let j = 0; j < digits.length; j += 1) {\n carry += digits[j] * 256;\n digits[j] = carry % 58;\n carry = Math.floor(carry / 58);\n }\n while (carry > 0) {\n digits.push(carry % 58);\n carry = Math.floor(carry / 58);\n }\n }\n\n let out = \"\";\n for (let i = 0; i < leading_zeros; i += 1) out += ALPHABET[0];\n for (let i = digits.length - 1; i >= 0; i -= 1) out += ALPHABET[digits[i]];\n return out;\n}\n\nexport function is_base58(value: string): boolean {\n if (value.length === 0) return false;\n for (let i = 0; i < value.length; i += 1) {\n if (!ALPHABET_SET.has(value[i])) return false;\n }\n return true;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useMemo } from \"react\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport type { WalletConnector } from \"@reifydb/auth\";\n\nimport { encode_base58 } from \"./base58\";\n\n// Solana wallet adapter stores the selected wallet name in this localStorage\n// key; presence implies an autoConnect attempt is pending after a refresh.\nconst SOLANA_WALLET_NAME_KEY = \"walletName\";\n\nfunction read_has_selected_wallet(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return localStorage.getItem(SOLANA_WALLET_NAME_KEY) != null;\n } catch {\n return false;\n }\n}\n\nexport function useSolanaWalletConnector(): WalletConnector {\n const { connected, connecting, publicKey, signMessage } = useWallet();\n\n return useMemo<WalletConnector>(() => {\n const pk = publicKey != null ? publicKey.toBase58() : null;\n return {\n connected,\n connecting,\n publicKey: pk,\n hasSelectedWallet: read_has_selected_wallet(),\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n if (signMessage == null) {\n throw new Error(\n \"@reifydb/auth-solana: connected wallet does not support signMessage\",\n );\n }\n return signMessage(message);\n },\n encodeSignature(bytes: Uint8Array): string {\n return encode_base58(bytes);\n },\n };\n }, [connected, connecting, publicKey, signMessage]);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport { encode_base58, is_base58 } from \"./base58\";\nexport { useSolanaWalletConnector } from \"./solana-connector\";\n\nexport * from \"@reifydb/auth\";\n"],"mappings":";AAIA,IAAM,WAAW;AACjB,IAAM,eAAe,IAAI,IAAI,QAAQ;AAE9B,SAAS,cAAc,OAA2B;AACvD,MAAI,MAAM,WAAW,EAAG,QAAO;AAG/B,MAAI,gBAAgB;AACpB,SAAO,gBAAgB,MAAM,UAAU,MAAM,aAAa,MAAM,GAAG;AACjE,qBAAiB;AAAA,EACnB;AAGA,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,eAAe,IAAI,MAAM,QAAQ,KAAK,GAAG;AACpD,QAAI,QAAQ,MAAM,CAAC;AACnB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,eAAS,OAAO,CAAC,IAAI;AACrB,aAAO,CAAC,IAAI,QAAQ;AACpB,cAAQ,KAAK,MAAM,QAAQ,EAAE;AAAA,IAC/B;AACA,WAAO,QAAQ,GAAG;AAChB,aAAO,KAAK,QAAQ,EAAE;AACtB,cAAQ,KAAK,MAAM,QAAQ,EAAE;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,eAAe,KAAK,EAAG,QAAO,SAAS,CAAC;AAC5D,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK,EAAG,QAAO,SAAS,OAAO,CAAC,CAAC;AACzE,SAAO;AACT;AAEO,SAAS,UAAU,OAAwB;AAChD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,QAAI,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC,EAAG,QAAO;AAAA,EAC1C;AACA,SAAO;AACT;;;ACxCA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAO1B,IAAM,yBAAyB;AAE/B,SAAS,2BAAoC;AAC3C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,WAAO,aAAa,QAAQ,sBAAsB,KAAK;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,2BAA4C;AAC1D,QAAM,EAAE,WAAW,YAAY,WAAW,YAAY,IAAI,UAAU;AAEpE,SAAO,QAAyB,MAAM;AACpC,UAAM,KAAK,aAAa,OAAO,UAAU,SAAS,IAAI;AACtD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,mBAAmB,yBAAyB;AAAA,MAC5C,MAAM,YAAY,SAA0C;AAC1D,YAAI,eAAe,MAAM;AACvB,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO,YAAY,OAAO;AAAA,MAC5B;AAAA,MACA,gBAAgB,OAA2B;AACzC,eAAO,cAAc,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,YAAY,WAAW,WAAW,CAAC;AACpD;;;ACvCA,cAAc;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@reifydb/auth-solana",
|
|
3
|
+
"version": "0.5.5",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@reifydb/auth": "0.5.5"
|
|
9
|
+
},
|
|
10
|
+
"peerDependencies": {
|
|
11
|
+
"react": ">=16.8.0",
|
|
12
|
+
"@solana/wallet-adapter-react": ">=0.15.0"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@solana/wallet-adapter-base": "^0.9.23",
|
|
16
|
+
"@solana/wallet-adapter-react": "^0.15.36",
|
|
17
|
+
"@solana/web3.js": "^1.95.0",
|
|
18
|
+
"@testing-library/react": "^16.3.0",
|
|
19
|
+
"@types/react": "^19.1.12",
|
|
20
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
21
|
+
"happy-dom": "^18.0.1",
|
|
22
|
+
"react": "^19.1.1",
|
|
23
|
+
"tsup": "^8.5.0",
|
|
24
|
+
"tweetnacl": "^1.0.3",
|
|
25
|
+
"typescript": "^5.9.2",
|
|
26
|
+
"vitest": "^3.2.4",
|
|
27
|
+
"@reifydb/core": "0.5.0"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=16.0.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"reifydb",
|
|
34
|
+
"auth",
|
|
35
|
+
"solana",
|
|
36
|
+
"wallet"
|
|
37
|
+
],
|
|
38
|
+
"files": [
|
|
39
|
+
"dist/",
|
|
40
|
+
"package.json",
|
|
41
|
+
"readme.md",
|
|
42
|
+
"license.md"
|
|
43
|
+
],
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public",
|
|
46
|
+
"linkWorkspacePackages": false
|
|
47
|
+
},
|
|
48
|
+
"license": "Apache-2.0",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/reifydb/reifydb.git",
|
|
52
|
+
"directory": "pkg/typescript/auth-solana"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://reifydb.com",
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/reifydb/reifydb/issues"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsup src/index.ts --dts --format esm --sourcemap",
|
|
60
|
+
"dev": "tsc --watch",
|
|
61
|
+
"test": "pnpm test:unit",
|
|
62
|
+
"test:unit": "vitest run --config vitest.unit.config.ts",
|
|
63
|
+
"test:unit:watch": "vitest --config vitest.unit.config.ts",
|
|
64
|
+
"test:integration": "vitest run --config vitest.config.ts",
|
|
65
|
+
"test:integration:watch": "vitest --config vitest.config.ts",
|
|
66
|
+
"pretest:integration": "pnpm build",
|
|
67
|
+
"publish:npm": "pnpm publish --access public --no-git-checks"
|
|
68
|
+
}
|
|
69
|
+
}
|