chunktech 0.1.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.
@@ -0,0 +1,138 @@
1
+ /**
2
+ * ChunkTech - Type Definitions
3
+ */
4
+ import type { WalletClient, PublicClient, Hash, Chain } from 'viem';
5
+ export interface ChainConfig {
6
+ id: number;
7
+ name: string;
8
+ rpcUrl?: string;
9
+ }
10
+ export declare const SUPPORTED_CHAINS: Record<string, ChainConfig>;
11
+ export interface ChunkTechConfig {
12
+ /** Wallet client for signing transactions */
13
+ walletClient: WalletClient;
14
+ /** Public client for reading from chain (optional, created from walletClient if not provided) */
15
+ publicClient?: PublicClient;
16
+ /** Chain to use */
17
+ chain?: Chain;
18
+ /** Custom RPC URL */
19
+ rpcUrl?: string;
20
+ }
21
+ export interface ChunkMetadata {
22
+ /** Unique chunk set ID (hex) */
23
+ id: string;
24
+ /** 1-indexed chunk number */
25
+ part: number;
26
+ /** Total chunks in set */
27
+ total: number;
28
+ }
29
+ export interface Chunk extends ChunkMetadata {
30
+ /** Raw chunk data (Uint8Array) */
31
+ data: Uint8Array;
32
+ }
33
+ export interface ChunkedData {
34
+ /** Chunk set ID */
35
+ id: string;
36
+ /** Total number of chunks */
37
+ total: number;
38
+ /** Chunks ready to send */
39
+ chunks: Chunk[];
40
+ }
41
+ export interface UploadOptions {
42
+ /** Enable encryption (requires crypto module) */
43
+ encrypt?: boolean;
44
+ /** Encryption keys (required if encrypt: true) */
45
+ keys?: EncryptionKeys;
46
+ /** Recipients for encrypted data */
47
+ recipients?: Recipient[];
48
+ /** Progress callback */
49
+ onProgress?: (sent: number, total: number) => void;
50
+ /** Wait for confirmations (default: 1) */
51
+ confirmations?: number;
52
+ }
53
+ export interface UploadResult {
54
+ /** Unique chunk set ID */
55
+ chunkId: string;
56
+ /** Transaction hashes for each chunk */
57
+ txHashes: Hash[];
58
+ /** Total chunks sent */
59
+ totalChunks: number;
60
+ /** Total bytes uploaded */
61
+ totalBytes: number;
62
+ }
63
+ export interface DownloadOptions {
64
+ /** Decryption keys (required if data was encrypted) */
65
+ keys?: EncryptionKeys;
66
+ /** Your recipient ID (required if data was encrypted) */
67
+ recipientId?: string;
68
+ }
69
+ export interface DownloadResult {
70
+ /** Reassembled file data */
71
+ data: Uint8Array;
72
+ /** Chunk set ID */
73
+ chunkId: string;
74
+ /** Total chunks retrieved */
75
+ totalChunks: number;
76
+ }
77
+ export interface TxStatus {
78
+ /** Transaction hash */
79
+ hash: Hash;
80
+ /** Chunk part number */
81
+ part: number;
82
+ /** Transaction status */
83
+ status: 'pending' | 'confirmed' | 'failed';
84
+ /** Block number (if confirmed) */
85
+ blockNumber?: bigint;
86
+ /** Confirmations count */
87
+ confirmations?: number;
88
+ }
89
+ export interface TrackerOptions {
90
+ /** Required confirmations (default: 1) */
91
+ confirmations?: number;
92
+ /** Poll interval in ms (default: 2000) */
93
+ pollInterval?: number;
94
+ /** Timeout in ms (default: 300000 = 5 min) */
95
+ timeout?: number;
96
+ /** Status update callback */
97
+ onStatus?: (status: TxStatus) => void;
98
+ }
99
+ export interface KeyPair {
100
+ privateKey: Uint8Array;
101
+ publicKey: Uint8Array;
102
+ }
103
+ export interface KeyBundle {
104
+ identityKey: Uint8Array;
105
+ signedPreKey: Uint8Array;
106
+ }
107
+ export interface EncryptionKeys {
108
+ identity: KeyPair;
109
+ signedPreKey: KeyPair;
110
+ bundle: KeyBundle;
111
+ }
112
+ export interface Recipient {
113
+ id: string;
114
+ bundle: KeyBundle;
115
+ }
116
+ export interface EncryptedPayload {
117
+ version: number;
118
+ senderIdentityKey: string;
119
+ iv: string;
120
+ ciphertext: string;
121
+ authTag: string;
122
+ keys: WrappedKey[];
123
+ }
124
+ export interface WrappedKey {
125
+ recipientId: string;
126
+ recipientIdentityKey: string;
127
+ ephemeralKey: string;
128
+ wrappedKey: string;
129
+ iv: string;
130
+ authTag: string;
131
+ }
132
+ /** Maximum chunk size in bytes (33.3KB) */
133
+ export declare const MAX_CHUNK_SIZE = 33333;
134
+ /** Chunk data prefix for identification */
135
+ export declare const CHUNK_PREFIX = "data:chunk,";
136
+ /** Encrypted chunk prefix */
137
+ export declare const CHUNK_ENCRYPTED_PREFIX = "data:chunk-enc,";
138
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ChunkTech - Type Definitions
3
+ */
4
+ export const SUPPORTED_CHAINS = {
5
+ ethereum: { id: 1, name: 'Ethereum' },
6
+ base: { id: 8453, name: 'Base' },
7
+ arbitrum: { id: 42161, name: 'Arbitrum One' },
8
+ sepolia: { id: 11155111, name: 'Sepolia' },
9
+ baseSepolia: { id: 84532, name: 'Base Sepolia' },
10
+ arbitrumSepolia: { id: 421614, name: 'Arbitrum Sepolia' },
11
+ };
12
+ // ============================================================================
13
+ // Constants
14
+ // ============================================================================
15
+ /** Maximum chunk size in bytes (33.3KB) */
16
+ export const MAX_CHUNK_SIZE = 33333;
17
+ /** Chunk data prefix for identification */
18
+ export const CHUNK_PREFIX = 'data:chunk,';
19
+ /** Encrypted chunk prefix */
20
+ export const CHUNK_ENCRYPTED_PREFIX = 'data:chunk-enc,';
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC3D,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IACrC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAChC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE;IAC7C,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE;IAChD,eAAe,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;CAC1D,CAAC;AA+JF,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAE1C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "chunktech",
3
+ "version": "0.1.0",
4
+ "description": "On-chain file storage via chunked transactions for EVM chains",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "test": "node --experimental-vm-modules test/index.test.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "ethereum",
24
+ "base",
25
+ "arbitrum",
26
+ "blockchain",
27
+ "file-storage",
28
+ "chunking",
29
+ "calldata",
30
+ "on-chain"
31
+ ],
32
+ "author": "",
33
+ "license": "MIT",
34
+ "dependencies": {
35
+ "viem": "^2.21.0"
36
+ },
37
+ "optionalDependencies": {
38
+ "@noble/curves": "^1.6.0",
39
+ "@noble/hashes": "^1.5.0"
40
+ },
41
+ "devDependencies": {
42
+ "typescript": "^5.6.0"
43
+ },
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ }
47
+ }