save-forever-mcp 0.2.0 → 0.3.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.
- package/dist/{ccip-7N4DENAM.js → ccip-CNDQCMQK.js} +2 -2
- package/dist/chunk-JACDA5LQ.js +383 -0
- package/dist/{chunk-4UXTALEH.js → chunk-JKB3QFBD.js} +309 -319
- package/dist/{chunk-ZGDY5OSW.js → chunk-TGY4KIJJ.js} +2 -2
- package/dist/{secp256k1-JRPUSUH3.js → secp256k1-GO3WM2N3.js} +2 -2
- package/dist/server.js +1699 -14
- package/package.json +29 -29
- package/dist/chunk-5DKVHEO2.js +0 -138
package/package.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "save-forever-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for Save Forever: permanently archive an end-to-end-encrypted file on Arweave (paid per-use via x402, USDC on Base) and retrieve it — exposed as native agent tools for Claude Desktop, Cursor, and other MCP hosts.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"save-forever-mcp": "dist/server.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"dist",
|
|
11
|
-
"README.md"
|
|
12
|
-
],
|
|
13
|
-
"engines": {
|
|
14
|
-
"node": ">=20"
|
|
15
|
-
},
|
|
16
|
-
"keywords": [
|
|
17
|
-
"mcp",
|
|
18
|
-
"model-context-protocol",
|
|
19
|
-
"x402",
|
|
20
|
-
"arweave",
|
|
21
|
-
"archive",
|
|
22
|
-
"permanent-storage",
|
|
23
|
-
"encryption",
|
|
24
|
-
"agent",
|
|
25
|
-
"claude",
|
|
26
|
-
"base"
|
|
27
|
-
],
|
|
28
|
-
"license": "MIT"
|
|
29
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "save-forever-mcp",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "MCP server for Save Forever: permanently archive an end-to-end-encrypted file on Arweave (paid per-use via x402, USDC on Base) and retrieve it — exposed as native agent tools for Claude Desktop, Cursor, and other MCP hosts.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"save-forever-mcp": "dist/server.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=20"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"model-context-protocol",
|
|
19
|
+
"x402",
|
|
20
|
+
"arweave",
|
|
21
|
+
"archive",
|
|
22
|
+
"permanent-storage",
|
|
23
|
+
"encryption",
|
|
24
|
+
"agent",
|
|
25
|
+
"claude",
|
|
26
|
+
"base"
|
|
27
|
+
],
|
|
28
|
+
"license": "MIT"
|
|
29
|
+
}
|
package/dist/chunk-5DKVHEO2.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import * as nc from 'crypto';
|
|
3
|
-
|
|
4
|
-
var crypto = nc && typeof nc === "object" && "webcrypto" in nc ? nc.webcrypto : nc && typeof nc === "object" && "randomBytes" in nc ? nc : void 0;
|
|
5
|
-
|
|
6
|
-
// node_modules/@noble/hashes/esm/utils.js
|
|
7
|
-
function isBytes(a) {
|
|
8
|
-
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
|
|
9
|
-
}
|
|
10
|
-
function anumber(n) {
|
|
11
|
-
if (!Number.isSafeInteger(n) || n < 0)
|
|
12
|
-
throw new Error("positive integer expected, got " + n);
|
|
13
|
-
}
|
|
14
|
-
function abytes(b, ...lengths) {
|
|
15
|
-
if (!isBytes(b))
|
|
16
|
-
throw new Error("Uint8Array expected");
|
|
17
|
-
if (lengths.length > 0 && !lengths.includes(b.length))
|
|
18
|
-
throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length);
|
|
19
|
-
}
|
|
20
|
-
function ahash(h) {
|
|
21
|
-
if (typeof h !== "function" || typeof h.create !== "function")
|
|
22
|
-
throw new Error("Hash should be wrapped by utils.createHasher");
|
|
23
|
-
anumber(h.outputLen);
|
|
24
|
-
anumber(h.blockLen);
|
|
25
|
-
}
|
|
26
|
-
function aexists(instance, checkFinished = true) {
|
|
27
|
-
if (instance.destroyed)
|
|
28
|
-
throw new Error("Hash instance has been destroyed");
|
|
29
|
-
if (checkFinished && instance.finished)
|
|
30
|
-
throw new Error("Hash#digest() has already been called");
|
|
31
|
-
}
|
|
32
|
-
function aoutput(out, instance) {
|
|
33
|
-
abytes(out);
|
|
34
|
-
const min = instance.outputLen;
|
|
35
|
-
if (out.length < min) {
|
|
36
|
-
throw new Error("digestInto() expects output buffer of length at least " + min);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function u32(arr) {
|
|
40
|
-
return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));
|
|
41
|
-
}
|
|
42
|
-
function clean(...arrays) {
|
|
43
|
-
for (let i = 0; i < arrays.length; i++) {
|
|
44
|
-
arrays[i].fill(0);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
function createView(arr) {
|
|
48
|
-
return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
49
|
-
}
|
|
50
|
-
function rotr(word, shift) {
|
|
51
|
-
return word << 32 - shift | word >>> shift;
|
|
52
|
-
}
|
|
53
|
-
var isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();
|
|
54
|
-
function byteSwap(word) {
|
|
55
|
-
return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;
|
|
56
|
-
}
|
|
57
|
-
function byteSwap32(arr) {
|
|
58
|
-
for (let i = 0; i < arr.length; i++) {
|
|
59
|
-
arr[i] = byteSwap(arr[i]);
|
|
60
|
-
}
|
|
61
|
-
return arr;
|
|
62
|
-
}
|
|
63
|
-
var swap32IfBE = isLE ? (u) => u : byteSwap32;
|
|
64
|
-
function utf8ToBytes(str) {
|
|
65
|
-
if (typeof str !== "string")
|
|
66
|
-
throw new Error("string expected");
|
|
67
|
-
return new Uint8Array(new TextEncoder().encode(str));
|
|
68
|
-
}
|
|
69
|
-
function toBytes(data) {
|
|
70
|
-
if (typeof data === "string")
|
|
71
|
-
data = utf8ToBytes(data);
|
|
72
|
-
abytes(data);
|
|
73
|
-
return data;
|
|
74
|
-
}
|
|
75
|
-
function concatBytes(...arrays) {
|
|
76
|
-
let sum = 0;
|
|
77
|
-
for (let i = 0; i < arrays.length; i++) {
|
|
78
|
-
const a = arrays[i];
|
|
79
|
-
abytes(a);
|
|
80
|
-
sum += a.length;
|
|
81
|
-
}
|
|
82
|
-
const res = new Uint8Array(sum);
|
|
83
|
-
for (let i = 0, pad = 0; i < arrays.length; i++) {
|
|
84
|
-
const a = arrays[i];
|
|
85
|
-
res.set(a, pad);
|
|
86
|
-
pad += a.length;
|
|
87
|
-
}
|
|
88
|
-
return res;
|
|
89
|
-
}
|
|
90
|
-
var Hash = class {
|
|
91
|
-
};
|
|
92
|
-
function createHasher(hashCons) {
|
|
93
|
-
const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
|
|
94
|
-
const tmp = hashCons();
|
|
95
|
-
hashC.outputLen = tmp.outputLen;
|
|
96
|
-
hashC.blockLen = tmp.blockLen;
|
|
97
|
-
hashC.create = () => hashCons();
|
|
98
|
-
return hashC;
|
|
99
|
-
}
|
|
100
|
-
function randomBytes(bytesLength = 32) {
|
|
101
|
-
if (crypto && typeof crypto.getRandomValues === "function") {
|
|
102
|
-
return crypto.getRandomValues(new Uint8Array(bytesLength));
|
|
103
|
-
}
|
|
104
|
-
if (crypto && typeof crypto.randomBytes === "function") {
|
|
105
|
-
return Uint8Array.from(crypto.randomBytes(bytesLength));
|
|
106
|
-
}
|
|
107
|
-
throw new Error("crypto.getRandomValues must be defined");
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// node_modules/@noble/hashes/esm/_u64.js
|
|
111
|
-
var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
|
112
|
-
var _32n = /* @__PURE__ */ BigInt(32);
|
|
113
|
-
function fromBig(n, le = false) {
|
|
114
|
-
if (le)
|
|
115
|
-
return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) };
|
|
116
|
-
return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
|
|
117
|
-
}
|
|
118
|
-
function split(lst, le = false) {
|
|
119
|
-
const len = lst.length;
|
|
120
|
-
let Ah = new Uint32Array(len);
|
|
121
|
-
let Al = new Uint32Array(len);
|
|
122
|
-
for (let i = 0; i < len; i++) {
|
|
123
|
-
const { h, l } = fromBig(lst[i], le);
|
|
124
|
-
[Ah[i], Al[i]] = [h, l];
|
|
125
|
-
}
|
|
126
|
-
return [Ah, Al];
|
|
127
|
-
}
|
|
128
|
-
var rotlSH = (h, l, s) => h << s | l >>> 32 - s;
|
|
129
|
-
var rotlSL = (h, l, s) => l << s | h >>> 32 - s;
|
|
130
|
-
var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s;
|
|
131
|
-
var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s;
|
|
132
|
-
/*! Bundled license information:
|
|
133
|
-
|
|
134
|
-
@noble/hashes/esm/utils.js:
|
|
135
|
-
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
export { Hash, abytes, aexists, ahash, anumber, aoutput, clean, concatBytes, createHasher, createView, randomBytes, rotlBH, rotlBL, rotlSH, rotlSL, rotr, split, swap32IfBE, toBytes, u32 };
|