toss-expo-sdk 1.0.2 → 1.0.4
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 +13 -12
- package/lib/module/index.js +7 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +5 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +14 -1
package/README.md
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
# TOSS Expo SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img width="1080" height="360" alt="image" src="https://github.com/user-attachments/assets/7e05de78-ef08-4dd6-a736-1ecf6b377c7f" />
|
|
4
|
+
|
|
5
|
+
**TOSS (The Offline Solana Stack)** — The official React Native SDK implementing the complete TOSS Technical Paper specification — a protocol-correct approach to building offline-first Solana applications without compromising security or finality guarantees.
|
|
4
6
|
|
|
5
7
|
[](https://www.npmjs.com/package/toss-expo-sdk)
|
|
6
8
|
[](LICENSE)
|
|
7
9
|
|
|
10
|
+
> **"Solana should work anytime, anywhere. Even offline."** — TOSS Whitepaper
|
|
11
|
+
|
|
8
12
|
**Solana, extended.** TOSS introduces deterministic separation between transaction intent creation and onchain settlement, enabling applications to function seamlessly in disconnected environments while preserving Solana's security model.
|
|
9
13
|
|
|
14
|
+
## 📚 Documentation
|
|
15
|
+
|
|
16
|
+
- **[TOSS Paper Compliance](./TOSS_PAPER_COMPLIANCE.md)** - Complete mapping of implementation to TOSS Technical Paper sections
|
|
17
|
+
- **[TOSS Whitepaper](https://github.com/zyppprotocol/toss-expo-sdk#toss-whitepaper)** - Mission, vision, and use cases
|
|
18
|
+
- **[TOSS Technical Paper](https://github.com/zyppprotocol/toss-expo-sdk#toss-technical-paper)** - Protocol specification and architecture
|
|
19
|
+
|
|
20
|
+
This SDK is a **protocol-correct implementation** of the TOSS specification, ensuring all security guarantees, design principles, and architectural requirements are met.
|
|
21
|
+
|
|
10
22
|
## Features
|
|
11
23
|
|
|
12
24
|
### Core Capabilities
|
|
@@ -690,14 +702,3 @@ But TOSS **does not guarantee**:
|
|
|
690
702
|
| Devnet | Live | https://api.devnet.solana.com |
|
|
691
703
|
| Testnet | Live | https://api.testnet.solana.com |
|
|
692
704
|
| Mainnet | Live | https://api.mainnet-beta.solana.com |
|
|
693
|
-
|
|
694
|
-
## Complete Documentation
|
|
695
|
-
|
|
696
|
-
For comprehensive information, see:
|
|
697
|
-
|
|
698
|
-
- [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md) - Complete documentation guide
|
|
699
|
-
- [TOSS_PAPER_IMPLEMENTATION_VERIFICATION.md](./TOSS_PAPER_IMPLEMENTATION_VERIFICATION.md) - TOSS paper compliance
|
|
700
|
-
- [PAPER_VS_IMPLEMENTATION_AUDIT.md](./PAPER_VS_IMPLEMENTATION_AUDIT.md) - Detailed technical audit
|
|
701
|
-
- [USER_SECURITY_AND_KEY_MANAGEMENT.md](./USER_SECURITY_AND_KEY_MANAGEMENT.md) - Security model and biometric protection
|
|
702
|
-
# toss-expo-sdk
|
|
703
|
-
# toss-expo-sdk
|
package/lib/module/index.js
CHANGED
|
@@ -11,9 +11,12 @@ export { BLETransactionHandler } from "./client/BLETransactionHandler.js";
|
|
|
11
11
|
export { useOfflineTransaction, useBLETransactionTransmission, useNonceAccountManagement } from "./hooks/useOfflineBLETransactions.js";
|
|
12
12
|
// Intent management
|
|
13
13
|
export { verifyIntentSignature, isIntentExpired, updateIntentStatus, validateIntent, processIntentsForSync, filterExpiredIntents } from "./intentManager.js";
|
|
14
|
+
export { verifyIntent } from "./intent.js";
|
|
14
15
|
|
|
15
16
|
// Storage
|
|
16
17
|
export { storePendingIntent, getPendingIntents, clearPendingIntents } from "./storage.js";
|
|
18
|
+
// Secure storage (hardware-backed)
|
|
19
|
+
export { secureStoreIntent, getSecureIntent, getAllSecureIntents, removeSecureIntent, clearAllSecureIntents, cleanupExpiredIntents } from "./storage/secureStorage.js";
|
|
17
20
|
|
|
18
21
|
// Transport methods (enhanced with fragmentation)
|
|
19
22
|
export { startTossScan, requestBLEPermissions, sendOfflineTransactionFragmented, receiveOfflineTransactionFragment, getBLEMTUConfig, setBLEMTUConfig } from "./ble.js";
|
|
@@ -21,7 +24,10 @@ export { initNFC, readNFCUser, writeUserToNFC, writeIntentToNFC } from "./nfc.js
|
|
|
21
24
|
export { QRScanner } from "./qr.js";
|
|
22
25
|
|
|
23
26
|
// Client
|
|
24
|
-
|
|
27
|
+
import { TossClient } from "./client/TossClient.js";
|
|
28
|
+
export { TossClient };
|
|
29
|
+
// Convenience helper for createClient (matches README)
|
|
30
|
+
export const createClient = TossClient.createClient;
|
|
25
31
|
export { WalletProvider, useWallet } from "./contexts/WalletContext.js";
|
|
26
32
|
|
|
27
33
|
// Authentication Service (enhanced with nonce accounts)
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createIntent","createUserIntent","createSignedIntent","createOfflineIntent","NonceAccountManager","BLETransactionHandler","useOfflineTransaction","useBLETransactionTransmission","useNonceAccountManagement","verifyIntentSignature","isIntentExpired","updateIntentStatus","validateIntent","processIntentsForSync","filterExpiredIntents","storePendingIntent","getPendingIntents","clearPendingIntents","startTossScan","requestBLEPermissions","sendOfflineTransactionFragmented","receiveOfflineTransactionFragment","getBLEMTUConfig","setBLEMTUConfig","initNFC","readNFCUser","writeUserToNFC","writeIntentToNFC","QRScanner","TossClient","WalletProvider","useWallet","AuthService","syncToChain","checkSyncStatus","reconcilePendingIntents","settleIntent","validateIntentOnchain","buildTransactionFromIntent","submitTransactionToChain","detectConflicts","getReconciliationState","DeviceDiscoveryService","IntentExchangeProtocol","IntentRoutingService","MultiDeviceConflictResolver","deviceDiscovery","intentExchange","intentRouting","compressMetadata","decompressMetadata","compressIntentMetadata","decompressIntentMetadata","estimateCompressionSavings","WiFiDirectTransport","SmartTransportSelector"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SACEA,YAAY,EACZC,gBAAgB,EAChBC,kBAAkB,EAClBC,mBAAmB,QAGd,aAAU;;AAEjB;AACA,SAASC,mBAAmB,QAAQ,iCAA8B;AAQlE;AACA,SAASC,qBAAqB,QAAQ,mCAAgC;AAOtE;AACA,SACEC,qBAAqB,EACrBC,6BAA6B,EAC7BC,yBAAyB,QACpB,sCAAmC;AAM1C;AACA,SACEC,qBAAqB,EACrBC,eAAe,EACfC,kBAAkB,EAClBC,cAAc,EACdC,qBAAqB,EACrBC,oBAAoB,QACf,oBAAiB;;
|
|
1
|
+
{"version":3,"names":["createIntent","createUserIntent","createSignedIntent","createOfflineIntent","NonceAccountManager","BLETransactionHandler","useOfflineTransaction","useBLETransactionTransmission","useNonceAccountManagement","verifyIntentSignature","isIntentExpired","updateIntentStatus","validateIntent","processIntentsForSync","filterExpiredIntents","verifyIntent","storePendingIntent","getPendingIntents","clearPendingIntents","secureStoreIntent","getSecureIntent","getAllSecureIntents","removeSecureIntent","clearAllSecureIntents","cleanupExpiredIntents","startTossScan","requestBLEPermissions","sendOfflineTransactionFragmented","receiveOfflineTransactionFragment","getBLEMTUConfig","setBLEMTUConfig","initNFC","readNFCUser","writeUserToNFC","writeIntentToNFC","QRScanner","TossClient","createClient","WalletProvider","useWallet","AuthService","syncToChain","checkSyncStatus","reconcilePendingIntents","settleIntent","validateIntentOnchain","buildTransactionFromIntent","submitTransactionToChain","detectConflicts","getReconciliationState","DeviceDiscoveryService","IntentExchangeProtocol","IntentRoutingService","MultiDeviceConflictResolver","deviceDiscovery","intentExchange","intentRouting","compressMetadata","decompressMetadata","compressIntentMetadata","decompressIntentMetadata","estimateCompressionSavings","WiFiDirectTransport","SmartTransportSelector"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SACEA,YAAY,EACZC,gBAAgB,EAChBC,kBAAkB,EAClBC,mBAAmB,QAGd,aAAU;;AAEjB;AACA,SAASC,mBAAmB,QAAQ,iCAA8B;AAQlE;AACA,SAASC,qBAAqB,QAAQ,mCAAgC;AAOtE;AACA,SACEC,qBAAqB,EACrBC,6BAA6B,EAC7BC,yBAAyB,QACpB,sCAAmC;AAM1C;AACA,SACEC,qBAAqB,EACrBC,eAAe,EACfC,kBAAkB,EAClBC,cAAc,EACdC,qBAAqB,EACrBC,oBAAoB,QACf,oBAAiB;AACxB,SAASC,YAAY,QAAQ,aAAU;;AAEvC;AACA,SACEC,kBAAkB,EAClBC,iBAAiB,EACjBC,mBAAmB,QACd,cAAW;AAClB;AACA,SACEC,iBAAiB,EACjBC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,qBAAqB,EACrBC,qBAAqB,QAChB,4BAAyB;;AAEhC;AACA,SACEC,aAAa,EACbC,qBAAqB,EACrBC,gCAAgC,EAChCC,iCAAiC,EACjCC,eAAe,EACfC,eAAe,QACV,UAAO;AACd,SAASC,OAAO,EAAEC,WAAW,EAAEC,cAAc,EAAEC,gBAAgB,QAAQ,UAAO;AAC9E,SAASC,SAAS,QAAQ,SAAM;;AAEhC;AACA,SAASC,UAAU,QAAyB,wBAAqB;AACjE,SAASA,UAAU;AACnB;AACA,OAAO,MAAMC,YAAY,GAAGD,UAAU,CAACC,YAAY;AAEnD,SAASC,cAAc,EAAEC,SAAS,QAAQ,6BAA0B;;AAEpE;AACA,SAASC,WAAW,QAAQ,2BAAwB;AACpD;AACA,SAASC,WAAW,EAAEC,eAAe,QAAyB,WAAQ;;AAEtE;AACA,SACEC,uBAAuB,EACvBC,YAAY,EACZC,qBAAqB,EACrBC,0BAA0B,EAC1BC,wBAAwB,EACxBC,eAAe,EACfC,sBAAsB,QAGjB,qBAAkB;;AAEzB;AACA,SACEC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,2BAA2B,EAC3BC,eAAe,EACfC,cAAc,EACdC,aAAa,QAIR,gBAAa;;AAEpB;AACA,SACEC,gBAAgB,EAChBC,kBAAkB,EAClBC,sBAAsB,EACtBC,wBAAwB,EACxBC,0BAA0B,QACrB,wBAAqB;;AAE5B;AACA,SAASC,mBAAmB,EAAEC,sBAAsB,QAAQ,WAAQ","ignoreList":[]}
|
|
@@ -6,11 +6,15 @@ export type { BLEFragment, EncryptedBLEMessage, BLEMTUConfig, } from './client/B
|
|
|
6
6
|
export { useOfflineTransaction, useBLETransactionTransmission, useNonceAccountManagement, } from './hooks/useOfflineBLETransactions';
|
|
7
7
|
export type { BLETransmissionState, OfflineTransactionState, } from './hooks/useOfflineBLETransactions';
|
|
8
8
|
export { verifyIntentSignature, isIntentExpired, updateIntentStatus, validateIntent, processIntentsForSync, filterExpiredIntents, } from './intentManager';
|
|
9
|
+
export { verifyIntent } from './intent';
|
|
9
10
|
export { storePendingIntent, getPendingIntents, clearPendingIntents, } from './storage';
|
|
11
|
+
export { secureStoreIntent, getSecureIntent, getAllSecureIntents, removeSecureIntent, clearAllSecureIntents, cleanupExpiredIntents, } from './storage/secureStorage';
|
|
10
12
|
export { startTossScan, requestBLEPermissions, sendOfflineTransactionFragmented, receiveOfflineTransactionFragment, getBLEMTUConfig, setBLEMTUConfig, } from './ble';
|
|
11
13
|
export { initNFC, readNFCUser, writeUserToNFC, writeIntentToNFC } from './nfc';
|
|
12
14
|
export { QRScanner } from './qr';
|
|
13
|
-
|
|
15
|
+
import { TossClient, type TossConfig } from './client/TossClient';
|
|
16
|
+
export { TossClient, type TossConfig };
|
|
17
|
+
export declare const createClient: typeof TossClient.createClient;
|
|
14
18
|
export type { TossUser } from './types/tossUser';
|
|
15
19
|
export { WalletProvider, useWallet } from './contexts/WalletContext';
|
|
16
20
|
export { AuthService } from './services/authService';
|
|
@@ -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;
|
|
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;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,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,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,CAAC;AAEvC,eAAO,MAAM,YAAY,gCAA0B,CAAC;AACpD,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"}
|
package/package.json
CHANGED
package/src/index.tsx
CHANGED
|
@@ -45,6 +45,7 @@ export {
|
|
|
45
45
|
processIntentsForSync,
|
|
46
46
|
filterExpiredIntents,
|
|
47
47
|
} from './intentManager';
|
|
48
|
+
export { verifyIntent } from './intent';
|
|
48
49
|
|
|
49
50
|
// Storage
|
|
50
51
|
export {
|
|
@@ -52,6 +53,15 @@ export {
|
|
|
52
53
|
getPendingIntents,
|
|
53
54
|
clearPendingIntents,
|
|
54
55
|
} from './storage';
|
|
56
|
+
// Secure storage (hardware-backed)
|
|
57
|
+
export {
|
|
58
|
+
secureStoreIntent,
|
|
59
|
+
getSecureIntent,
|
|
60
|
+
getAllSecureIntents,
|
|
61
|
+
removeSecureIntent,
|
|
62
|
+
clearAllSecureIntents,
|
|
63
|
+
cleanupExpiredIntents,
|
|
64
|
+
} from './storage/secureStorage';
|
|
55
65
|
|
|
56
66
|
// Transport methods (enhanced with fragmentation)
|
|
57
67
|
export {
|
|
@@ -66,7 +76,10 @@ export { initNFC, readNFCUser, writeUserToNFC, writeIntentToNFC } from './nfc';
|
|
|
66
76
|
export { QRScanner } from './qr';
|
|
67
77
|
|
|
68
78
|
// Client
|
|
69
|
-
|
|
79
|
+
import { TossClient, type TossConfig } from './client/TossClient';
|
|
80
|
+
export { TossClient, type TossConfig };
|
|
81
|
+
// Convenience helper for createClient (matches README)
|
|
82
|
+
export const createClient = TossClient.createClient;
|
|
70
83
|
export type { TossUser } from './types/tossUser';
|
|
71
84
|
export { WalletProvider, useWallet } from './contexts/WalletContext';
|
|
72
85
|
|