toss-expo-sdk 1.0.1 → 1.0.2
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 +58 -56
- package/lib/module/client/NonceAccountManager.js +2 -2
- package/lib/module/client/NonceAccountManager.js.map +1 -1
- package/lib/module/examples/enhancedFeaturesFlow.js +233 -0
- package/lib/module/examples/enhancedFeaturesFlow.js.map +1 -0
- package/lib/module/examples/offlinePaymentFlow.js +27 -27
- package/lib/module/examples/offlinePaymentFlow.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/qr.js +2 -2
- package/lib/module/reconciliation.js +4 -4
- package/lib/module/reconciliation.js.map +1 -1
- package/lib/module/services/authService.js +3 -3
- package/lib/module/services/authService.js.map +1 -1
- package/lib/module/utils/compression.js +210 -0
- package/lib/module/utils/compression.js.map +1 -0
- package/lib/module/wifi.js +311 -0
- package/lib/module/wifi.js.map +1 -0
- package/lib/typescript/src/examples/enhancedFeaturesFlow.d.ts +45 -0
- package/lib/typescript/src/examples/enhancedFeaturesFlow.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/compression.d.ts +52 -0
- package/lib/typescript/src/utils/compression.d.ts.map +1 -0
- package/lib/typescript/src/wifi.d.ts +116 -0
- package/lib/typescript/src/wifi.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/client/NonceAccountManager.ts +2 -2
- package/src/examples/enhancedFeaturesFlow.ts +272 -0
- package/src/examples/offlinePaymentFlow.ts +27 -27
- package/src/index.tsx +12 -0
- package/src/qr.tsx +2 -2
- package/src/reconciliation.ts +4 -4
- package/src/services/authService.ts +3 -3
- package/src/utils/compression.ts +247 -0
- package/src/wifi.ts +401 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Compression Utilities for TOSS
|
|
5
|
+
*
|
|
6
|
+
* Implements safe, deterministic compression for metadata only.
|
|
7
|
+
* Transaction bytes are NEVER compressed to preserve determinism.
|
|
8
|
+
*
|
|
9
|
+
* Production-ready with official APIs.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { Buffer } from 'buffer';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Simple DEFLATE-based compression using native zlib
|
|
16
|
+
* (Available in Node.js and via polyfills in React Native)
|
|
17
|
+
*
|
|
18
|
+
* For metadata compression: memos, recipient names, etc.
|
|
19
|
+
* NOT for transaction signatures or amounts!
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Compress metadata safely
|
|
24
|
+
* Only compresses if compression saves >10% and data >200 bytes
|
|
25
|
+
*
|
|
26
|
+
* Safe for: memo text, user names, descriptions
|
|
27
|
+
* UNSAFE for: signatures, amounts, transaction data
|
|
28
|
+
*/
|
|
29
|
+
export async function compressMetadata(data) {
|
|
30
|
+
try {
|
|
31
|
+
const originalBuffer = Buffer.from(data, 'utf-8');
|
|
32
|
+
const originalSize = originalBuffer.length;
|
|
33
|
+
|
|
34
|
+
// Only compress if it's worth it
|
|
35
|
+
if (originalSize < 200) {
|
|
36
|
+
return {
|
|
37
|
+
compressed: false,
|
|
38
|
+
data: new Uint8Array(originalBuffer),
|
|
39
|
+
originalSize,
|
|
40
|
+
compressedSize: originalSize,
|
|
41
|
+
compressionRatio: 1.0
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Use native compression if available (Node.js)
|
|
46
|
+
// For React Native, this will use a polyfill
|
|
47
|
+
const zlib = await importZlib();
|
|
48
|
+
const compressed = await new Promise((resolve, reject) => {
|
|
49
|
+
zlib.deflate(originalBuffer, (err, result) => {
|
|
50
|
+
if (err) reject(err);else resolve(result);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
const compressedSize = compressed.length;
|
|
54
|
+
const compressionRatio = compressedSize / originalSize;
|
|
55
|
+
|
|
56
|
+
// Only use compression if it saves >10%
|
|
57
|
+
if (compressionRatio > 0.9) {
|
|
58
|
+
return {
|
|
59
|
+
compressed: false,
|
|
60
|
+
data: new Uint8Array(originalBuffer),
|
|
61
|
+
originalSize,
|
|
62
|
+
compressedSize: originalSize,
|
|
63
|
+
compressionRatio: 1.0
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
compressed: true,
|
|
68
|
+
data: new Uint8Array(compressed),
|
|
69
|
+
originalSize,
|
|
70
|
+
compressedSize,
|
|
71
|
+
compressionRatio
|
|
72
|
+
};
|
|
73
|
+
} catch (error) {
|
|
74
|
+
// Graceful fallback: if compression fails, return uncompressed
|
|
75
|
+
console.warn('Compression failed, returning uncompressed:', error);
|
|
76
|
+
const buffer = Buffer.from(data, 'utf-8');
|
|
77
|
+
return {
|
|
78
|
+
compressed: false,
|
|
79
|
+
data: new Uint8Array(buffer),
|
|
80
|
+
originalSize: buffer.length,
|
|
81
|
+
compressedSize: buffer.length,
|
|
82
|
+
compressionRatio: 1.0
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Decompress metadata
|
|
89
|
+
*/
|
|
90
|
+
export async function decompressMetadata(data) {
|
|
91
|
+
try {
|
|
92
|
+
const zlib = await importZlib();
|
|
93
|
+
const decompressed = await new Promise((resolve, reject) => {
|
|
94
|
+
zlib.inflate(Buffer.from(data), (err, result) => {
|
|
95
|
+
if (err) reject(err);else resolve(result);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
return decompressed.toString('utf-8');
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.warn('Decompression failed:', error);
|
|
101
|
+
// Assume data was not compressed
|
|
102
|
+
return Buffer.from(data).toString('utf-8');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Compress intent metadata for efficient transmission
|
|
108
|
+
* Returns the original intent with compressed metadata
|
|
109
|
+
*/
|
|
110
|
+
export async function compressIntentMetadata(intentMetadata) {
|
|
111
|
+
const compressed = {};
|
|
112
|
+
let totalOriginal = 0;
|
|
113
|
+
let totalCompressed = 0;
|
|
114
|
+
for (const [key, value] of Object.entries(intentMetadata)) {
|
|
115
|
+
if (typeof value === 'string') {
|
|
116
|
+
const result = await compressMetadata(value);
|
|
117
|
+
totalOriginal += result.originalSize;
|
|
118
|
+
totalCompressed += result.compressedSize;
|
|
119
|
+
if (result.compressed) {
|
|
120
|
+
compressed[key] = {
|
|
121
|
+
__compressed: true,
|
|
122
|
+
data: Array.from(result.data)
|
|
123
|
+
};
|
|
124
|
+
} else {
|
|
125
|
+
compressed[key] = value;
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
compressed[key] = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const savings = totalOriginal > 0 ? (totalOriginal - totalCompressed) / totalOriginal * 100 : 0;
|
|
132
|
+
return {
|
|
133
|
+
original: intentMetadata,
|
|
134
|
+
compressed,
|
|
135
|
+
savings: Math.round(savings)
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Decompress intent metadata
|
|
141
|
+
*/
|
|
142
|
+
export async function decompressIntentMetadata(compressedMetadata) {
|
|
143
|
+
const decompressed = {};
|
|
144
|
+
for (const [key, value] of Object.entries(compressedMetadata)) {
|
|
145
|
+
if (typeof value === 'object' && value !== null && value.__compressed === true) {
|
|
146
|
+
const buffer = new Uint8Array(value.data);
|
|
147
|
+
decompressed[key] = await decompressMetadata(buffer);
|
|
148
|
+
} else {
|
|
149
|
+
decompressed[key] = value;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return decompressed;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Lazy-load zlib to avoid breaking in environments without it
|
|
157
|
+
*/
|
|
158
|
+
async function importZlib() {
|
|
159
|
+
// In Node.js, use native zlib
|
|
160
|
+
if (typeof require !== 'undefined') {
|
|
161
|
+
try {
|
|
162
|
+
return require('zlib');
|
|
163
|
+
} catch {
|
|
164
|
+
// Fall through to polyfill
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// For React Native, try to use a polyfill
|
|
169
|
+
// This can be pako (pako-zlib) or similar
|
|
170
|
+
try {
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
172
|
+
const pako = await import('pako');
|
|
173
|
+
return {
|
|
174
|
+
deflate: (data, callback) => {
|
|
175
|
+
try {
|
|
176
|
+
const compressed = pako.deflate(data);
|
|
177
|
+
callback(null, Buffer.from(compressed));
|
|
178
|
+
} catch (err) {
|
|
179
|
+
callback(err);
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
inflate: (data, callback) => {
|
|
183
|
+
try {
|
|
184
|
+
const decompressed = pako.inflate(data);
|
|
185
|
+
callback(null, Buffer.from(decompressed));
|
|
186
|
+
} catch (err) {
|
|
187
|
+
callback(err);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
} catch {
|
|
192
|
+
throw new Error('Compression not available in this environment. Install pako or use Node.js.');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Calculate size savings for a metadata object
|
|
198
|
+
*/
|
|
199
|
+
export function estimateCompressionSavings(metadata) {
|
|
200
|
+
let totalSize = 0;
|
|
201
|
+
for (const value of Object.values(metadata)) {
|
|
202
|
+
if (typeof value === 'string') {
|
|
203
|
+
totalSize += value.length;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Conservative estimate: ~35% savings on text (typical for DEFLATE)
|
|
208
|
+
return Math.round(totalSize * 0.35);
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Buffer","compressMetadata","data","originalBuffer","from","originalSize","length","compressed","Uint8Array","compressedSize","compressionRatio","zlib","importZlib","Promise","resolve","reject","deflate","err","result","error","console","warn","buffer","decompressMetadata","decompressed","inflate","toString","compressIntentMetadata","intentMetadata","totalOriginal","totalCompressed","key","value","Object","entries","__compressed","Array","savings","original","Math","round","decompressIntentMetadata","compressedMetadata","require","pako","callback","Error","estimateCompressionSavings","metadata","totalSize","values"],"sourceRoot":"../../../src","sources":["utils/compression.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WiFi Direct Transport for TOSS
|
|
5
|
+
*
|
|
6
|
+
* Higher-bandwidth alternative to BLE for device-to-device communication
|
|
7
|
+
* Fallback to BLE if WiFi Direct unavailable
|
|
8
|
+
*
|
|
9
|
+
* Uses native React Native APIs for production-ready implementation
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { NativeModules, Platform } from 'react-native';
|
|
13
|
+
import { TossError } from "./errors.js";
|
|
14
|
+
const {
|
|
15
|
+
WiFiDirect
|
|
16
|
+
} = NativeModules;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* WiFi Direct connection state
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* WiFi Direct socket for data transmission
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* WiFi Direct Transport Handler
|
|
28
|
+
* Wrapper around native WiFi Direct capabilities
|
|
29
|
+
*
|
|
30
|
+
* Supports higher MTU (1200+ bytes) than BLE (480 bytes)
|
|
31
|
+
* Useful for batch transmission of intents
|
|
32
|
+
*/
|
|
33
|
+
export class WiFiDirectTransport {
|
|
34
|
+
connectedPeers = new Map();
|
|
35
|
+
SOCKET_TIMEOUT = 30000; // 30 seconds
|
|
36
|
+
WIFI_MTU = 1200; // Conservative MTU for WiFi packets
|
|
37
|
+
|
|
38
|
+
constructor(_platform = 'android') {
|
|
39
|
+
if (!WiFiDirect) {
|
|
40
|
+
console.warn('WiFi Direct not available in this environment (requires native module)');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Check if WiFi Direct is available on device
|
|
46
|
+
*/
|
|
47
|
+
async isAvailable() {
|
|
48
|
+
if (!WiFiDirect) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
if (Platform.OS === 'android') {
|
|
53
|
+
return await WiFiDirect.isAvailable();
|
|
54
|
+
}
|
|
55
|
+
// iOS uses different APIs (Bonjour, Multipeer Connectivity)
|
|
56
|
+
return true;
|
|
57
|
+
} catch (error) {
|
|
58
|
+
console.warn('Error checking WiFi Direct availability:', error);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Enable WiFi Direct on device
|
|
65
|
+
*/
|
|
66
|
+
async enable() {
|
|
67
|
+
if (!WiFiDirect) {
|
|
68
|
+
throw new TossError('WiFi Direct native module not available', 'WIFI_DIRECT_UNAVAILABLE');
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
if (Platform.OS === 'android') {
|
|
72
|
+
await WiFiDirect.enable();
|
|
73
|
+
}
|
|
74
|
+
} catch (error) {
|
|
75
|
+
throw new TossError(`Failed to enable WiFi Direct: ${error instanceof Error ? error.message : String(error)}`, 'WIFI_DIRECT_ERROR');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Discover nearby WiFi Direct peers
|
|
81
|
+
*/
|
|
82
|
+
async discoverPeers(timeoutSeconds = 10) {
|
|
83
|
+
if (!WiFiDirect) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const peers = await WiFiDirect.discoverPeers(timeoutSeconds * 1000);
|
|
88
|
+
return peers.map(p => ({
|
|
89
|
+
deviceName: p.deviceName,
|
|
90
|
+
deviceAddress: p.deviceAddress,
|
|
91
|
+
isGroupOwner: p.isGroupOwner,
|
|
92
|
+
signalStrength: p.signalStrength
|
|
93
|
+
}));
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.warn('Peer discovery failed:', error);
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Connect to a specific WiFi Direct peer
|
|
102
|
+
*/
|
|
103
|
+
async connectToPeer(deviceAddress) {
|
|
104
|
+
if (!WiFiDirect) {
|
|
105
|
+
throw new TossError('WiFi Direct not available', 'WIFI_DIRECT_UNAVAILABLE');
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const socket = {
|
|
109
|
+
peerId: deviceAddress,
|
|
110
|
+
connected: false,
|
|
111
|
+
bytesTransferred: 0,
|
|
112
|
+
lastActivityTime: Date.now()
|
|
113
|
+
};
|
|
114
|
+
await WiFiDirect.connect(deviceAddress);
|
|
115
|
+
socket.connected = true;
|
|
116
|
+
this.connectedPeers.set(deviceAddress, socket);
|
|
117
|
+
return socket;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
throw new TossError(`Failed to connect to WiFi Direct peer: ${error instanceof Error ? error.message : String(error)}`, 'WIFI_DIRECT_CONNECT_ERROR');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Send intent via WiFi Direct connection
|
|
125
|
+
* Uses larger MTU than BLE for efficiency
|
|
126
|
+
*/
|
|
127
|
+
async sendIntent(socket, intent) {
|
|
128
|
+
if (!socket.connected) {
|
|
129
|
+
throw new TossError('WiFi Direct socket not connected', 'WIFI_DIRECT_DISCONNECTED');
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const intentBuffer = Buffer.from(JSON.stringify(intent), 'utf-8');
|
|
133
|
+
const chunks = Math.ceil(intentBuffer.length / this.WIFI_MTU);
|
|
134
|
+
let totalTransferred = 0;
|
|
135
|
+
for (let i = 0; i < chunks; i++) {
|
|
136
|
+
const start = i * this.WIFI_MTU;
|
|
137
|
+
const end = Math.min(start + this.WIFI_MTU, intentBuffer.length);
|
|
138
|
+
const chunk = intentBuffer.slice(start, end);
|
|
139
|
+
|
|
140
|
+
// Send with simple header: chunk number + total chunks
|
|
141
|
+
const chunkHeader = Buffer.allocUnsafe(2);
|
|
142
|
+
chunkHeader.writeUInt8(i, 0);
|
|
143
|
+
chunkHeader.writeUInt8(chunks, 1);
|
|
144
|
+
const packet = Buffer.concat([chunkHeader, chunk]);
|
|
145
|
+
await WiFiDirect.sendData(socket.peerId, packet);
|
|
146
|
+
totalTransferred += chunk.length;
|
|
147
|
+
|
|
148
|
+
// Update socket stats
|
|
149
|
+
socket.bytesTransferred += chunk.length;
|
|
150
|
+
socket.lastActivityTime = Date.now();
|
|
151
|
+
|
|
152
|
+
// Small delay between chunks to avoid congestion
|
|
153
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
bytesTransferred: totalTransferred,
|
|
158
|
+
chunks
|
|
159
|
+
};
|
|
160
|
+
} catch (error) {
|
|
161
|
+
throw new TossError(`Failed to send intent via WiFi Direct: ${error instanceof Error ? error.message : String(error)}`, 'WIFI_DIRECT_SEND_ERROR');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Send offline transaction via WiFi Direct
|
|
167
|
+
*/
|
|
168
|
+
async sendOfflineTransaction(socket, transaction) {
|
|
169
|
+
const txBuffer = Buffer.from(JSON.stringify(transaction), 'utf-8');
|
|
170
|
+
const chunks = Math.ceil(txBuffer.length / this.WIFI_MTU);
|
|
171
|
+
let totalTransferred = 0;
|
|
172
|
+
for (let i = 0; i < chunks; i++) {
|
|
173
|
+
const start = i * this.WIFI_MTU;
|
|
174
|
+
const end = Math.min(start + this.WIFI_MTU, txBuffer.length);
|
|
175
|
+
const chunk = txBuffer.slice(start, end);
|
|
176
|
+
const chunkHeader = Buffer.allocUnsafe(2);
|
|
177
|
+
chunkHeader.writeUInt8(i, 0);
|
|
178
|
+
chunkHeader.writeUInt8(chunks, 1);
|
|
179
|
+
const packet = Buffer.concat([chunkHeader, chunk]);
|
|
180
|
+
await WiFiDirect.sendData(socket.peerId, packet);
|
|
181
|
+
totalTransferred += chunk.length;
|
|
182
|
+
socket.bytesTransferred += chunk.length;
|
|
183
|
+
socket.lastActivityTime = Date.now();
|
|
184
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
success: true,
|
|
188
|
+
bytesTransferred: totalTransferred,
|
|
189
|
+
chunks
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Receive data from WiFi Direct peer
|
|
195
|
+
*/
|
|
196
|
+
async receiveData(socket, expectedChunks) {
|
|
197
|
+
const chunks = [];
|
|
198
|
+
const receivedChunks = new Set();
|
|
199
|
+
try {
|
|
200
|
+
while (receivedChunks.size < expectedChunks) {
|
|
201
|
+
const packet = await WiFiDirect.receiveData(socket.peerId, 5000); // 5 second timeout
|
|
202
|
+
|
|
203
|
+
if (packet) {
|
|
204
|
+
const chunkNumber = packet[0];
|
|
205
|
+
// Header byte (not used in reassembly)
|
|
206
|
+
const chunkData = packet.slice(2);
|
|
207
|
+
chunks[chunkNumber] = chunkData;
|
|
208
|
+
receivedChunks.add(chunkNumber);
|
|
209
|
+
socket.lastActivityTime = Date.now();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Check timeout
|
|
213
|
+
if (Date.now() - socket.lastActivityTime > this.SOCKET_TIMEOUT) {
|
|
214
|
+
throw new TossError('WiFi Direct socket timeout', 'WIFI_DIRECT_TIMEOUT');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return Buffer.concat(chunks);
|
|
218
|
+
} catch (error) {
|
|
219
|
+
throw new TossError(`Failed to receive data via WiFi Direct: ${error instanceof Error ? error.message : String(error)}`, 'WIFI_DIRECT_RECEIVE_ERROR');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Disconnect from WiFi Direct peer
|
|
225
|
+
*/
|
|
226
|
+
async disconnect(peerId) {
|
|
227
|
+
try {
|
|
228
|
+
const socket = this.connectedPeers.get(peerId);
|
|
229
|
+
if (socket) {
|
|
230
|
+
socket.connected = false;
|
|
231
|
+
this.connectedPeers.delete(peerId);
|
|
232
|
+
}
|
|
233
|
+
if (WiFiDirect) {
|
|
234
|
+
await WiFiDirect.disconnect(peerId);
|
|
235
|
+
}
|
|
236
|
+
} catch (error) {
|
|
237
|
+
console.warn(`Error disconnecting from ${peerId}:`, error);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Get all connected peers
|
|
243
|
+
*/
|
|
244
|
+
getConnectedPeers() {
|
|
245
|
+
return Array.from(this.connectedPeers.values()).filter(socket => socket.connected);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Get MTU size for this transport
|
|
250
|
+
*/
|
|
251
|
+
getMTU() {
|
|
252
|
+
return this.WIFI_MTU;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Clean up expired connections
|
|
257
|
+
*/
|
|
258
|
+
cleanupExpiredConnections() {
|
|
259
|
+
const now = Date.now();
|
|
260
|
+
for (const [peerId, socket] of this.connectedPeers.entries()) {
|
|
261
|
+
if (now - socket.lastActivityTime > this.SOCKET_TIMEOUT) {
|
|
262
|
+
this.disconnect(peerId).catch(() => {});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Smart transport selector
|
|
270
|
+
* Automatically chooses best transport for given context
|
|
271
|
+
*/
|
|
272
|
+
export class SmartTransportSelector {
|
|
273
|
+
constructor() {
|
|
274
|
+
this.wifiDirect = new WiFiDirectTransport();
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Select best available transport for intent transmission
|
|
279
|
+
*
|
|
280
|
+
* Preference order:
|
|
281
|
+
* 1. WiFi Direct (fastest, 1200 MTU)
|
|
282
|
+
* 2. BLE (fallback, 480 MTU)
|
|
283
|
+
*/
|
|
284
|
+
async selectTransport() {
|
|
285
|
+
const wifiAvailable = await this.wifiDirect.isAvailable();
|
|
286
|
+
if (wifiAvailable) {
|
|
287
|
+
return 'wifi';
|
|
288
|
+
}
|
|
289
|
+
return 'ble';
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Check if WiFi Direct should be used
|
|
294
|
+
* Factors: availability, proximity, battery level
|
|
295
|
+
*/
|
|
296
|
+
async shouldUseWiFi(checkBattery = false) {
|
|
297
|
+
const available = await this.wifiDirect.isAvailable();
|
|
298
|
+
if (!available) {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Optional: check battery level
|
|
303
|
+
if (checkBattery) {
|
|
304
|
+
// In production, query Battery API
|
|
305
|
+
// For now, assume battery OK
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=wifi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","TossError","WiFiDirect","WiFiDirectTransport","connectedPeers","Map","SOCKET_TIMEOUT","WIFI_MTU","constructor","_platform","console","warn","isAvailable","OS","error","enable","Error","message","String","discoverPeers","timeoutSeconds","peers","map","p","deviceName","deviceAddress","isGroupOwner","signalStrength","connectToPeer","socket","peerId","connected","bytesTransferred","lastActivityTime","Date","now","connect","set","sendIntent","intent","intentBuffer","Buffer","from","JSON","stringify","chunks","Math","ceil","length","totalTransferred","i","start","end","min","chunk","slice","chunkHeader","allocUnsafe","writeUInt8","packet","concat","sendData","Promise","resolve","setTimeout","success","sendOfflineTransaction","transaction","txBuffer","receiveData","expectedChunks","receivedChunks","Set","size","chunkNumber","chunkData","add","disconnect","get","delete","getConnectedPeers","Array","values","filter","getMTU","cleanupExpiredConnections","entries","catch","SmartTransportSelector","wifiDirect","selectTransport","wifiAvailable","shouldUseWiFi","checkBattery","available"],"sourceRoot":"../../src","sources":["wifi.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Complete Example: Enhanced TOSS Flow with Compression, Incentives & WiFi
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates:
|
|
5
|
+
* 1. Compression of intent metadata
|
|
6
|
+
* 2. Smart transport selection (WiFi > BLE)
|
|
7
|
+
* 3. Relay incentive tracking
|
|
8
|
+
* 4. Mesh clustering for optimal routing
|
|
9
|
+
*/
|
|
10
|
+
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
11
|
+
/**
|
|
12
|
+
* Example 1: Metadata Compression Flow
|
|
13
|
+
*
|
|
14
|
+
* Compress large memo text before transmission
|
|
15
|
+
*/
|
|
16
|
+
export declare function exampleCompressedIntentFlow(sender: Keypair, recipient: PublicKey, amount: number, connection: Connection): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Example 2: Smart Transport Selection
|
|
19
|
+
*
|
|
20
|
+
* Automatically choose WiFi Direct if available, fallback to BLE
|
|
21
|
+
*/
|
|
22
|
+
export declare function exampleSmartTransportFlow(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Example 3: Relay Incentive Tracking
|
|
25
|
+
*
|
|
26
|
+
* Calculate and track rewards for devices relaying transactions
|
|
27
|
+
*/
|
|
28
|
+
export declare function exampleRelayIncentiveFlow(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Example 4: Mesh Clustering & Smart Routing
|
|
31
|
+
*
|
|
32
|
+
* Use signal strength to form clusters and find optimal paths
|
|
33
|
+
*/
|
|
34
|
+
export declare function exampleMeshClusteringFlow(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Example 5: Complete Production Flow
|
|
37
|
+
*
|
|
38
|
+
* Integrates compression + WiFi transport + incentives + optimal routing
|
|
39
|
+
*/
|
|
40
|
+
export declare function exampleCompleteEnhancedFlow(sender: Keypair, recipient: PublicKey, amount: number, connection: Connection, _feePayer: PublicKey): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Run all examples
|
|
43
|
+
*/
|
|
44
|
+
export declare function runAllExamples(connection: Connection): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=enhancedFeaturesFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancedFeaturesFlow.d.ts","sourceRoot":"","sources":["../../../../src/examples/enhancedFeaturesFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQjE;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsB/D;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B/D;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB/D;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Df;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1E"}
|
|
@@ -17,4 +17,6 @@ export { AuthService } from './services/authService';
|
|
|
17
17
|
export { syncToChain, checkSyncStatus, type SyncResult } from './sync';
|
|
18
18
|
export { reconcilePendingIntents, settleIntent, validateIntentOnchain, buildTransactionFromIntent, submitTransactionToChain, detectConflicts, getReconciliationState, type SettlementResult, type ReconciliationState, } from './reconciliation';
|
|
19
19
|
export { DeviceDiscoveryService, IntentExchangeProtocol, IntentRoutingService, MultiDeviceConflictResolver, deviceDiscovery, intentExchange, intentRouting, type PeerDevice, type IntentExchangeRequest, type IntentExchangeResponse, } from './discovery';
|
|
20
|
+
export { compressMetadata, decompressMetadata, compressIntentMetadata, decompressIntentMetadata, estimateCompressionSavings, } from './utils/compression';
|
|
21
|
+
export { WiFiDirectTransport, SmartTransportSelector } from './wifi';
|
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,gCAAgC,EAChC,iCAAiC,EACjC,eAAe,EACf,eAAe,GAChB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGvE,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,aAAa,EACb,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,gCAAgC,EAChC,iCAAiC,EACjC,eAAe,EACf,eAAe,GAChB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGvE,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,aAAa,EACb,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compression Utilities for TOSS
|
|
3
|
+
*
|
|
4
|
+
* Implements safe, deterministic compression for metadata only.
|
|
5
|
+
* Transaction bytes are NEVER compressed to preserve determinism.
|
|
6
|
+
*
|
|
7
|
+
* Production-ready with official APIs.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Simple DEFLATE-based compression using native zlib
|
|
11
|
+
* (Available in Node.js and via polyfills in React Native)
|
|
12
|
+
*
|
|
13
|
+
* For metadata compression: memos, recipient names, etc.
|
|
14
|
+
* NOT for transaction signatures or amounts!
|
|
15
|
+
*/
|
|
16
|
+
export interface CompressionResult {
|
|
17
|
+
compressed: boolean;
|
|
18
|
+
data: Uint8Array;
|
|
19
|
+
originalSize: number;
|
|
20
|
+
compressedSize: number;
|
|
21
|
+
compressionRatio: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compress metadata safely
|
|
25
|
+
* Only compresses if compression saves >10% and data >200 bytes
|
|
26
|
+
*
|
|
27
|
+
* Safe for: memo text, user names, descriptions
|
|
28
|
+
* UNSAFE for: signatures, amounts, transaction data
|
|
29
|
+
*/
|
|
30
|
+
export declare function compressMetadata(data: string): Promise<CompressionResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Decompress metadata
|
|
33
|
+
*/
|
|
34
|
+
export declare function decompressMetadata(data: Uint8Array): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Compress intent metadata for efficient transmission
|
|
37
|
+
* Returns the original intent with compressed metadata
|
|
38
|
+
*/
|
|
39
|
+
export declare function compressIntentMetadata(intentMetadata: Record<string, any>): Promise<{
|
|
40
|
+
original: Record<string, any>;
|
|
41
|
+
compressed: Record<string, any>;
|
|
42
|
+
savings: number;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Decompress intent metadata
|
|
46
|
+
*/
|
|
47
|
+
export declare function decompressIntentMetadata(compressedMetadata: Record<string, any>): Promise<Record<string, any>>;
|
|
48
|
+
/**
|
|
49
|
+
* Calculate size savings for a metadata object
|
|
50
|
+
*/
|
|
51
|
+
export declare function estimateCompressionSavings(metadata: Record<string, any>): number;
|
|
52
|
+
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../../../src/utils/compression.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB1E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAgCD;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAiB9B;AA6CD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,CAWR"}
|