toss-expo-sdk 0.1.2 → 1.0.1
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 +368 -15
- package/lib/module/ble.js +59 -4
- package/lib/module/ble.js.map +1 -1
- package/lib/module/client/BLETransactionHandler.js +277 -0
- package/lib/module/client/BLETransactionHandler.js.map +1 -0
- package/lib/module/client/NonceAccountManager.js +364 -0
- package/lib/module/client/NonceAccountManager.js.map +1 -0
- package/lib/module/client/TossClient.js +1 -1
- package/lib/module/client/TossClient.js.map +1 -1
- package/lib/module/hooks/useOfflineBLETransactions.js +314 -0
- package/lib/module/hooks/useOfflineBLETransactions.js.map +1 -0
- package/lib/module/index.js +12 -8
- package/lib/module/index.js.map +1 -1
- package/lib/module/intent.js +129 -0
- package/lib/module/intent.js.map +1 -1
- package/lib/module/noise.js +175 -0
- package/lib/module/noise.js.map +1 -1
- package/lib/module/reconciliation.js +155 -0
- package/lib/module/reconciliation.js.map +1 -1
- package/lib/module/services/authService.js +164 -1
- package/lib/module/services/authService.js.map +1 -1
- package/lib/module/storage/secureStorage.js +102 -0
- package/lib/module/storage/secureStorage.js.map +1 -1
- package/lib/module/sync.js +25 -1
- package/lib/module/sync.js.map +1 -1
- package/lib/module/types/nonceAccount.js +2 -0
- package/lib/module/types/nonceAccount.js.map +1 -0
- package/lib/module/types/tossUser.js +16 -1
- package/lib/module/types/tossUser.js.map +1 -1
- package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts +8 -0
- package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts.map +1 -0
- package/lib/typescript/src/ble.d.ts +31 -2
- package/lib/typescript/src/ble.d.ts.map +1 -1
- package/lib/typescript/src/client/BLETransactionHandler.d.ts +98 -0
- package/lib/typescript/src/client/BLETransactionHandler.d.ts.map +1 -0
- package/lib/typescript/src/client/NonceAccountManager.d.ts +82 -0
- package/lib/typescript/src/client/NonceAccountManager.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts +91 -0
- package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +9 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/intent.d.ts +15 -0
- package/lib/typescript/src/intent.d.ts.map +1 -1
- package/lib/typescript/src/noise.d.ts +62 -0
- package/lib/typescript/src/noise.d.ts.map +1 -1
- package/lib/typescript/src/reconciliation.d.ts +6 -0
- package/lib/typescript/src/reconciliation.d.ts.map +1 -1
- package/lib/typescript/src/services/authService.d.ts +26 -1
- package/lib/typescript/src/services/authService.d.ts.map +1 -1
- package/lib/typescript/src/storage/secureStorage.d.ts +16 -0
- package/lib/typescript/src/storage/secureStorage.d.ts.map +1 -1
- package/lib/typescript/src/sync.d.ts +6 -1
- package/lib/typescript/src/sync.d.ts.map +1 -1
- package/lib/typescript/src/types/nonceAccount.d.ts +59 -0
- package/lib/typescript/src/types/nonceAccount.d.ts.map +1 -0
- package/lib/typescript/src/types/tossUser.d.ts +16 -0
- package/lib/typescript/src/types/tossUser.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/solana-program-simple.test.ts +256 -0
- package/src/ble.ts +105 -4
- package/src/client/BLETransactionHandler.ts +364 -0
- package/src/client/NonceAccountManager.ts +444 -0
- package/src/client/TossClient.ts +1 -1
- package/src/hooks/useOfflineBLETransactions.ts +438 -0
- package/src/index.tsx +40 -6
- package/src/intent.ts +166 -0
- package/src/noise.ts +238 -0
- package/src/reconciliation.ts +184 -0
- package/src/services/authService.ts +188 -1
- package/src/storage/secureStorage.ts +138 -0
- package/src/sync.ts +40 -0
- package/src/types/nonceAccount.ts +75 -0
- package/src/types/tossUser.ts +35 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SecureStore","Keypair","PublicKey","LocalAuthentication","crypto","SESSION_KEY","WALLET_KEY","BIOMETRIC_SALT_KEY","AuthService","signInWithWallet","walletAddress","isTemporary","session","id","Date","now","token","Math","random","toString","substr","expiresAt","user","userId","slice","username","wallet","publicKey","isVerified","createdAt","toISOString","device","lastActive","client","status","lastSeen","tossFeatures","canSend","canReceive","isPrivateTxEnabled","maxTransactionAmount","updatedAt","saveSession","setItemAsync","JSON","stringify","getSession","getItemAsync","parse","signOut","deleteItemAsync","isWalletUnlocked","isAvailable","isAvailableAsync","item","unlockWalletWithBiometrics","hasHardware","hasHardwareAsync","isEnrolled","isEnrolledAsync","Error","result","authenticateAsync","promptMessage","fallbackLabel","disableDeviceFallback","success","encrypted","salt","decryptedData","secretKey","secretKeyArray","Uint8Array","keypair","fromSecretKey","error","message","String","setupWalletProtection","useBiometrics","getRandomValues","walletData","Array","from","biometricRequired","nonCustodial","deviceSpecific","exportable","isKeypairStoredSecurely","stored","getPublicKeyWithoutAuth","data","console","lockWalletFromMemory","deleteWalletPermanently"],"sourceRoot":"../../../src","sources":["services/authService.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["SecureStore","Keypair","PublicKey","LocalAuthentication","crypto","NonceAccountManager","SESSION_KEY","WALLET_KEY","BIOMETRIC_SALT_KEY","NONCE_ACCOUNT_KEY","AuthService","signInWithWallet","walletAddress","isTemporary","session","id","Date","now","token","Math","random","toString","substr","expiresAt","user","userId","slice","username","wallet","publicKey","isVerified","createdAt","toISOString","device","lastActive","client","security","biometricEnabled","nonceAccountRequiresBiometric","status","lastSeen","tossFeatures","canSend","canReceive","isPrivateTxEnabled","maxTransactionAmount","offlineTransactionsEnabled","nonceAccountEnabled","updatedAt","saveSession","setItemAsync","JSON","stringify","getSession","getItemAsync","parse","signOut","deleteItemAsync","isWalletUnlocked","isAvailable","isAvailableAsync","item","unlockWalletWithBiometrics","hasHardware","hasHardwareAsync","isEnrolled","isEnrolledAsync","Error","result","authenticateAsync","promptMessage","fallbackLabel","disableDeviceFallback","success","encrypted","salt","decryptedData","secretKey","secretKeyArray","Uint8Array","keypair","fromSecretKey","error","message","String","setupWalletProtection","useBiometrics","getRandomValues","walletData","Array","from","biometricRequired","nonCustodial","deviceSpecific","exportable","isKeypairStoredSecurely","stored","getPublicKeyWithoutAuth","data","console","lockWalletFromMemory","deleteWalletPermanently","createSecureNonceAccount","connection","userKeypair","nonceManager","nonceAuthorityKeypair","generate","nonceAccountInfo","createNonceAccount","requireBiometric","securityLevel","persistToSecureStorage","autoRenew","updatedUser","nonceAccount","address","authorizedSigner","isBiometricProtected","lastBiometricVerification","floor","errorMessage","enableOfflineTransactions","verifyNonceAccountAccess","storageKey","revokeNonceAccount","undefined"],"sourceRoot":"../../../src","sources":["services/authService.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -86,4 +86,106 @@ export async function clearAllSecureIntents() {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* GAP #1: Cleanup expired intents from local storage
|
|
92
|
+
* Per TOSS Paper Section 8: Local state is append-only until settlement confirmation
|
|
93
|
+
*/
|
|
94
|
+
export async function cleanupExpiredIntents() {
|
|
95
|
+
try {
|
|
96
|
+
const intents = await getAllSecureIntents();
|
|
97
|
+
const now = Math.floor(Date.now() / 1000);
|
|
98
|
+
let cleanedCount = 0;
|
|
99
|
+
for (const intent of intents) {
|
|
100
|
+
if (intent.expiry < now) {
|
|
101
|
+
await removeSecureIntent(intent.id);
|
|
102
|
+
cleanedCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return cleanedCount;
|
|
106
|
+
} catch (error) {
|
|
107
|
+
throw new StorageError('Failed to cleanup expired intents', {
|
|
108
|
+
cause: error
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* GAP #2: Store and retrieve reconciliation state
|
|
115
|
+
* Per TOSS Paper Section 9: Track which intents have been synced/failed/conflicted
|
|
116
|
+
*/
|
|
117
|
+
const RECONCILIATION_STATE_KEY = 'toss_reconciliation_state_';
|
|
118
|
+
export async function saveReconciliationState(userId, state) {
|
|
119
|
+
try {
|
|
120
|
+
const key = `${RECONCILIATION_STATE_KEY}${userId}`;
|
|
121
|
+
const existing = await SecureStore.getItemAsync(key);
|
|
122
|
+
const currentState = existing ? JSON.parse(existing) : {
|
|
123
|
+
userId,
|
|
124
|
+
lastSyncTime: 0,
|
|
125
|
+
lastSyncSlot: 0,
|
|
126
|
+
processedIntents: [],
|
|
127
|
+
failedIntents: [],
|
|
128
|
+
conflictingIntents: []
|
|
129
|
+
};
|
|
130
|
+
const merged = {
|
|
131
|
+
...currentState,
|
|
132
|
+
...state,
|
|
133
|
+
userId // Always preserve userId
|
|
134
|
+
};
|
|
135
|
+
await SecureStore.setItemAsync(key, JSON.stringify(merged));
|
|
136
|
+
} catch (error) {
|
|
137
|
+
throw new StorageError('Failed to save reconciliation state', {
|
|
138
|
+
cause: error,
|
|
139
|
+
userId
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export async function getReconciliationState(userId) {
|
|
144
|
+
try {
|
|
145
|
+
const key = `${RECONCILIATION_STATE_KEY}${userId}`;
|
|
146
|
+
const value = await SecureStore.getItemAsync(key);
|
|
147
|
+
if (value) {
|
|
148
|
+
return JSON.parse(value);
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
userId,
|
|
152
|
+
lastSyncTime: 0,
|
|
153
|
+
lastSyncSlot: 0,
|
|
154
|
+
processedIntents: [],
|
|
155
|
+
failedIntents: [],
|
|
156
|
+
conflictingIntents: []
|
|
157
|
+
};
|
|
158
|
+
} catch (error) {
|
|
159
|
+
throw new StorageError('Failed to retrieve reconciliation state', {
|
|
160
|
+
cause: error,
|
|
161
|
+
userId
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export async function updateReconciliationState(userId, intentId, status) {
|
|
166
|
+
try {
|
|
167
|
+
const current = await getReconciliationState(userId);
|
|
168
|
+
|
|
169
|
+
// Remove from all lists first
|
|
170
|
+
current.processedIntents = current.processedIntents.filter(id => id !== intentId);
|
|
171
|
+
current.failedIntents = current.failedIntents.filter(id => id !== intentId);
|
|
172
|
+
current.conflictingIntents = current.conflictingIntents.filter(id => id !== intentId);
|
|
173
|
+
|
|
174
|
+
// Add to appropriate list
|
|
175
|
+
if (status === 'processed') {
|
|
176
|
+
current.processedIntents.push(intentId);
|
|
177
|
+
} else if (status === 'failed') {
|
|
178
|
+
current.failedIntents.push(intentId);
|
|
179
|
+
} else if (status === 'conflicted') {
|
|
180
|
+
current.conflictingIntents.push(intentId);
|
|
181
|
+
}
|
|
182
|
+
await saveReconciliationState(userId, current);
|
|
183
|
+
} catch (error) {
|
|
184
|
+
throw new StorageError('Failed to update reconciliation state', {
|
|
185
|
+
cause: error,
|
|
186
|
+
userId,
|
|
187
|
+
intentId
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
89
191
|
//# sourceMappingURL=secureStorage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SecureStore","StorageError","STORAGE_PREFIX","getAllKeys","keys","getItemAsync","JSON","parse","saveKeys","setItemAsync","stringify","secureStoreIntent","intent","key","id","includes","push","error","cause","intentId","getSecureIntent","value","getAllSecureIntents","intents","Promise","all","map","filter","Boolean","removeSecureIntent","deleteItemAsync","updatedKeys","k","clearAllSecureIntents"],"sourceRoot":"../../../src","sources":["storage/secureStorage.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["SecureStore","StorageError","STORAGE_PREFIX","getAllKeys","keys","getItemAsync","JSON","parse","saveKeys","setItemAsync","stringify","secureStoreIntent","intent","key","id","includes","push","error","cause","intentId","getSecureIntent","value","getAllSecureIntents","intents","Promise","all","map","filter","Boolean","removeSecureIntent","deleteItemAsync","updatedKeys","k","clearAllSecureIntents","cleanupExpiredIntents","now","Math","floor","Date","cleanedCount","expiry","RECONCILIATION_STATE_KEY","saveReconciliationState","userId","state","existing","currentState","lastSyncTime","lastSyncSlot","processedIntents","failedIntents","conflictingIntents","merged","getReconciliationState","updateReconciliationState","status","current"],"sourceRoot":"../../../src","sources":["storage/secureStorage.ts"],"mappings":";;AAAA,OAAO,KAAKA,WAAW,MAAM,mBAAmB;AAChD,SAASC,YAAY,QAAQ,cAAW;AAGxC,MAAMC,cAAc,GAAG,cAAc;;AAErC;AACA,eAAeC,UAAUA,CAAA,EAAsB;EAC7C;EACA;EACA,MAAMC,IAAI,GAAG,MAAMJ,WAAW,CAACK,YAAY,CAAC,GAAGH,cAAc,OAAO,CAAC;EACrE,OAAOE,IAAI,GAAGE,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC,GAAG,EAAE;AACrC;;AAEA;AACA,eAAeI,QAAQA,CAACJ,IAAc,EAAiB;EACrD,MAAMJ,WAAW,CAACS,YAAY,CAC5B,GAAGP,cAAc,OAAO,EACxBI,IAAI,CAACI,SAAS,CAACN,IAAI,CACrB,CAAC;AACH;AAEA,OAAO,eAAeO,iBAAiBA,CAACC,MAAoB,EAAiB;EAC3E,IAAI;IACF,MAAMC,GAAG,GAAG,GAAGX,cAAc,GAAGU,MAAM,CAACE,EAAE,EAAE;IAC3C,MAAMd,WAAW,CAACS,YAAY,CAACI,GAAG,EAAEP,IAAI,CAACI,SAAS,CAACE,MAAM,CAAC,CAAC;;IAE3D;IACA,MAAMR,IAAI,GAAG,MAAMD,UAAU,CAAC,CAAC;IAC/B,IAAI,CAACC,IAAI,CAACW,QAAQ,CAACF,GAAG,CAAC,EAAE;MACvBT,IAAI,CAACY,IAAI,CAACH,GAAG,CAAC;MACd,MAAML,QAAQ,CAACJ,IAAI,CAAC;IACtB;EACF,CAAC,CAAC,OAAOa,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,iCAAiC,EAAE;MACxDiB,KAAK,EAAED,KAAK;MACZE,QAAQ,EAAEP,MAAM,CAACE;IACnB,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,eAAeM,eAAeA,CACnCD,QAAgB,EACc;EAC9B,IAAI;IACF,MAAME,KAAK,GAAG,MAAMrB,WAAW,CAACK,YAAY,CAC1C,GAAGH,cAAc,GAAGiB,QAAQ,EAC9B,CAAC;IACD,OAAOE,KAAK,GAAGf,IAAI,CAACC,KAAK,CAACc,KAAK,CAAC,GAAG,IAAI;EACzC,CAAC,CAAC,OAAOJ,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,2BAA2B,EAAE;MAClDiB,KAAK,EAAED,KAAK;MACZE;IACF,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,eAAeG,mBAAmBA,CAAA,EAA4B;EACnE,IAAI;IACF,MAAMlB,IAAI,GAAG,MAAMD,UAAU,CAAC,CAAC;IAC/B,MAAMoB,OAAO,GAAG,MAAMC,OAAO,CAACC,GAAG,CAC/BrB,IAAI,CAACsB,GAAG,CAAC,MAAOb,GAAW,IAAK;MAC9B,MAAMQ,KAAK,GAAG,MAAMrB,WAAW,CAACK,YAAY,CAACQ,GAAG,CAAC;MACjD,OAAOQ,KAAK,GAAGf,IAAI,CAACC,KAAK,CAACc,KAAK,CAAC,GAAG,IAAI;IACzC,CAAC,CACH,CAAC;IACD,OAAOE,OAAO,CAACI,MAAM,CAACC,OAAO,CAAC;EAChC,CAAC,CAAC,OAAOX,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,gCAAgC,EAAE;MAAEiB,KAAK,EAAED;IAAM,CAAC,CAAC;EAC5E;AACF;AAEA,OAAO,eAAeY,kBAAkBA,CAACV,QAAgB,EAAiB;EACxE,IAAI;IACF,MAAMN,GAAG,GAAG,GAAGX,cAAc,GAAGiB,QAAQ,EAAE;IAC1C,MAAMnB,WAAW,CAAC8B,eAAe,CAACjB,GAAG,CAAC;;IAEtC;IACA,MAAMT,IAAI,GAAG,MAAMD,UAAU,CAAC,CAAC;IAC/B,MAAM4B,WAAW,GAAG3B,IAAI,CAACuB,MAAM,CAAEK,CAAC,IAAKA,CAAC,KAAKnB,GAAG,CAAC;IACjD,MAAML,QAAQ,CAACuB,WAAW,CAAC;EAC7B,CAAC,CAAC,OAAOd,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,yBAAyB,EAAE;MAChDiB,KAAK,EAAED,KAAK;MACZE;IACF,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,eAAec,qBAAqBA,CAAA,EAAkB;EAC3D,IAAI;IACF,MAAM7B,IAAI,GAAG,MAAMD,UAAU,CAAC,CAAC;IAC/B,MAAMqB,OAAO,CAACC,GAAG,CACfrB,IAAI,CAACsB,GAAG,CAAEb,GAAW,IAAKb,WAAW,CAAC8B,eAAe,CAACjB,GAAG,CAAC,CAC5D,CAAC;IACD,MAAML,QAAQ,CAAC,EAAE,CAAC;EACpB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,6BAA6B,EAAE;MAAEiB,KAAK,EAAED;IAAM,CAAC,CAAC;EACzE;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeiB,qBAAqBA,CAAA,EAAoB;EAC7D,IAAI;IACF,MAAMX,OAAO,GAAG,MAAMD,mBAAmB,CAAC,CAAC;IAC3C,MAAMa,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACH,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,IAAII,YAAY,GAAG,CAAC;IAEpB,KAAK,MAAM3B,MAAM,IAAIW,OAAO,EAAE;MAC5B,IAAIX,MAAM,CAAC4B,MAAM,GAAGL,GAAG,EAAE;QACvB,MAAMN,kBAAkB,CAACjB,MAAM,CAACE,EAAE,CAAC;QACnCyB,YAAY,EAAE;MAChB;IACF;IAEA,OAAOA,YAAY;EACrB,CAAC,CAAC,OAAOtB,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,mCAAmC,EAAE;MAC1DiB,KAAK,EAAED;IACT,CAAC,CAAC;EACJ;AACF;;AAEA;AACA;AACA;AACA;AACA,MAAMwB,wBAAwB,GAAG,4BAA4B;AAW7D,OAAO,eAAeC,uBAAuBA,CAC3CC,MAAc,EACdC,KAAuC,EACxB;EACf,IAAI;IACF,MAAM/B,GAAG,GAAG,GAAG4B,wBAAwB,GAAGE,MAAM,EAAE;IAClD,MAAME,QAAQ,GAAG,MAAM7C,WAAW,CAACK,YAAY,CAACQ,GAAG,CAAC;IACpD,MAAMiC,YAAqC,GAAGD,QAAQ,GAClDvC,IAAI,CAACC,KAAK,CAACsC,QAAQ,CAAC,GACpB;MACEF,MAAM;MACNI,YAAY,EAAE,CAAC;MACfC,YAAY,EAAE,CAAC;MACfC,gBAAgB,EAAE,EAAE;MACpBC,aAAa,EAAE,EAAE;MACjBC,kBAAkB,EAAE;IACtB,CAAC;IAEL,MAAMC,MAA+B,GAAG;MACtC,GAAGN,YAAY;MACf,GAAGF,KAAK;MACRD,MAAM,CAAE;IACV,CAAC;IAED,MAAM3C,WAAW,CAACS,YAAY,CAACI,GAAG,EAAEP,IAAI,CAACI,SAAS,CAAC0C,MAAM,CAAC,CAAC;EAC7D,CAAC,CAAC,OAAOnC,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,qCAAqC,EAAE;MAC5DiB,KAAK,EAAED,KAAK;MACZ0B;IACF,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,eAAeU,sBAAsBA,CAC1CV,MAAc,EACoB;EAClC,IAAI;IACF,MAAM9B,GAAG,GAAG,GAAG4B,wBAAwB,GAAGE,MAAM,EAAE;IAClD,MAAMtB,KAAK,GAAG,MAAMrB,WAAW,CAACK,YAAY,CAACQ,GAAG,CAAC;IAEjD,IAAIQ,KAAK,EAAE;MACT,OAAOf,IAAI,CAACC,KAAK,CAACc,KAAK,CAAC;IAC1B;IAEA,OAAO;MACLsB,MAAM;MACNI,YAAY,EAAE,CAAC;MACfC,YAAY,EAAE,CAAC;MACfC,gBAAgB,EAAE,EAAE;MACpBC,aAAa,EAAE,EAAE;MACjBC,kBAAkB,EAAE;IACtB,CAAC;EACH,CAAC,CAAC,OAAOlC,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,yCAAyC,EAAE;MAChEiB,KAAK,EAAED,KAAK;MACZ0B;IACF,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,eAAeW,yBAAyBA,CAC7CX,MAAc,EACdxB,QAAgB,EAChBoC,MAA6C,EAC9B;EACf,IAAI;IACF,MAAMC,OAAO,GAAG,MAAMH,sBAAsB,CAACV,MAAM,CAAC;;IAEpD;IACAa,OAAO,CAACP,gBAAgB,GAAGO,OAAO,CAACP,gBAAgB,CAACtB,MAAM,CACvDb,EAAE,IAAKA,EAAE,KAAKK,QACjB,CAAC;IACDqC,OAAO,CAACN,aAAa,GAAGM,OAAO,CAACN,aAAa,CAACvB,MAAM,CACjDb,EAAE,IAAKA,EAAE,KAAKK,QACjB,CAAC;IACDqC,OAAO,CAACL,kBAAkB,GAAGK,OAAO,CAACL,kBAAkB,CAACxB,MAAM,CAC3Db,EAAE,IAAKA,EAAE,KAAKK,QACjB,CAAC;;IAED;IACA,IAAIoC,MAAM,KAAK,WAAW,EAAE;MAC1BC,OAAO,CAACP,gBAAgB,CAACjC,IAAI,CAACG,QAAQ,CAAC;IACzC,CAAC,MAAM,IAAIoC,MAAM,KAAK,QAAQ,EAAE;MAC9BC,OAAO,CAACN,aAAa,CAAClC,IAAI,CAACG,QAAQ,CAAC;IACtC,CAAC,MAAM,IAAIoC,MAAM,KAAK,YAAY,EAAE;MAClCC,OAAO,CAACL,kBAAkB,CAACnC,IAAI,CAACG,QAAQ,CAAC;IAC3C;IAEA,MAAMuB,uBAAuB,CAACC,MAAM,EAAEa,OAAO,CAAC;EAChD,CAAC,CAAC,OAAOvC,KAAK,EAAE;IACd,MAAM,IAAIhB,YAAY,CAAC,uCAAuC,EAAE;MAC9DiB,KAAK,EAAED,KAAK;MACZ0B,MAAM;MACNxB;IACF,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
|
package/lib/module/sync.js
CHANGED
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* Implements Section 9 of the TOSS Technical Paper:
|
|
7
7
|
* Upon regaining connectivity, devices initiate reconciliation with onchain state.
|
|
8
8
|
* All offline artifacts are verified onchain and settled with deterministic outcomes.
|
|
9
|
+
*
|
|
10
|
+
* GAP #2 FIX: Track synchronization state persistently
|
|
9
11
|
*/
|
|
10
12
|
|
|
11
13
|
import { reconcilePendingIntents, detectConflicts, getReconciliationState } from "./reconciliation.js";
|
|
14
|
+
import { updateReconciliationState } from "./storage/secureStorage.js";
|
|
12
15
|
import { NetworkError } from "./errors.js";
|
|
13
16
|
/**
|
|
14
17
|
* Full sync and reconciliation with the Solana blockchain
|
|
@@ -19,11 +22,14 @@ import { NetworkError } from "./errors.js";
|
|
|
19
22
|
* 2. Settle all pending intents
|
|
20
23
|
* 3. Update local state with results
|
|
21
24
|
*
|
|
25
|
+
* GAP #2 FIX: Persist reconciliation state for future queries
|
|
26
|
+
*
|
|
22
27
|
* @param connection Connection to Solana RPC
|
|
28
|
+
* @param userId User ID for state tracking (required for persistence)
|
|
23
29
|
* @param feePayer Optional fee payer keypair public key
|
|
24
30
|
* @returns Detailed sync results including conflicts and settlements
|
|
25
31
|
*/
|
|
26
|
-
export async function syncToChain(connection, feePayer) {
|
|
32
|
+
export async function syncToChain(connection, userId, feePayer) {
|
|
27
33
|
const syncTimestamp = Math.floor(Date.now() / 1000);
|
|
28
34
|
try {
|
|
29
35
|
// Step 1: Detect any conflicts with onchain state
|
|
@@ -38,6 +44,24 @@ export async function syncToChain(connection, feePayer) {
|
|
|
38
44
|
|
|
39
45
|
// Step 4: Get final reconciliation state
|
|
40
46
|
const reconciliationState = await getReconciliationState(connection);
|
|
47
|
+
|
|
48
|
+
// GAP #2 FIX: Persist reconciliation state to storage
|
|
49
|
+
if (userId) {
|
|
50
|
+
try {
|
|
51
|
+
// Update individual intent statuses
|
|
52
|
+
for (const settlement of successfulSettlements) {
|
|
53
|
+
await updateReconciliationState(userId, settlement.intentId, 'processed');
|
|
54
|
+
}
|
|
55
|
+
for (const settlement of failedSettlements) {
|
|
56
|
+
await updateReconciliationState(userId, settlement.intentId, 'failed');
|
|
57
|
+
}
|
|
58
|
+
for (const conflict of detectedConflicts) {
|
|
59
|
+
await updateReconciliationState(userId, conflict.intentId, 'conflicted');
|
|
60
|
+
}
|
|
61
|
+
} catch (storageError) {
|
|
62
|
+
console.warn('Failed to update reconciliation state storage:', storageError);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
41
65
|
const isComplete = failedSettlements.length === 0 && detectedConflicts.length === 0;
|
|
42
66
|
return {
|
|
43
67
|
successfulSettlements,
|
package/lib/module/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["reconcilePendingIntents","detectConflicts","getReconciliationState","NetworkError","syncToChain","connection","feePayer","syncTimestamp","Math","floor","Date","now","detectedConflicts","allSettlementResults","successfulSettlements","filter","r","status","failedSettlements","reconciliationState","isComplete","length","error","Error","message","String","cause","checkSyncStatus"],"sourceRoot":"../../src","sources":["sync.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SACEA,uBAAuB,EACvBC,eAAe,EACfC,sBAAsB,QAGjB,qBAAkB;AACzB,SAASC,YAAY,QAAQ,aAAU;AAiBvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,WAAWA,CAC/BC,UAAsB,EACtBC,QAAoB,EACC;EACrB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAEnD,IAAI;IACF;IACA,MAAMC,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"names":["reconcilePendingIntents","detectConflicts","getReconciliationState","updateReconciliationState","NetworkError","syncToChain","connection","userId","feePayer","syncTimestamp","Math","floor","Date","now","detectedConflicts","allSettlementResults","successfulSettlements","filter","r","status","failedSettlements","reconciliationState","settlement","intentId","conflict","storageError","console","warn","isComplete","length","error","Error","message","String","cause","checkSyncStatus"],"sourceRoot":"../../src","sources":["sync.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SACEA,uBAAuB,EACvBC,eAAe,EACfC,sBAAsB,QAGjB,qBAAkB;AACzB,SAASC,yBAAyB,QAAQ,4BAAyB;AACnE,SAASC,YAAY,QAAQ,aAAU;AAiBvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,WAAWA,CAC/BC,UAAsB,EACtBC,MAAe,EACfC,QAAoB,EACC;EACrB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAEnD,IAAI;IACF;IACA,MAAMC,iBAAiB,GAAG,MAAMb,eAAe,CAACK,UAAU,CAAC;;IAE3D;IACA,MAAMS,oBAAoB,GAAG,MAAMf,uBAAuB,CACxDM,UAAU,EACVE,QACF,CAAC;;IAED;IACA,MAAMQ,qBAAqB,GAAGD,oBAAoB,CAACE,MAAM,CACtDC,CAAC,IAAKA,CAAC,CAACC,MAAM,KAAK,SACtB,CAAC;IACD,MAAMC,iBAAiB,GAAGL,oBAAoB,CAACE,MAAM,CAClDC,CAAC,IAAKA,CAAC,CAACC,MAAM,KAAK,SACtB,CAAC;;IAED;IACA,MAAME,mBAAmB,GAAG,MAAMnB,sBAAsB,CAACI,UAAU,CAAC;;IAEpE;IACA,IAAIC,MAAM,EAAE;MACV,IAAI;QACF;QACA,KAAK,MAAMe,UAAU,IAAIN,qBAAqB,EAAE;UAC9C,MAAMb,yBAAyB,CAC7BI,MAAM,EACNe,UAAU,CAACC,QAAQ,EACnB,WACF,CAAC;QACH;QACA,KAAK,MAAMD,UAAU,IAAIF,iBAAiB,EAAE;UAC1C,MAAMjB,yBAAyB,CAC7BI,MAAM,EACNe,UAAU,CAACC,QAAQ,EACnB,QACF,CAAC;QACH;QACA,KAAK,MAAMC,QAAQ,IAAIV,iBAAiB,EAAE;UACxC,MAAMX,yBAAyB,CAC7BI,MAAM,EACNiB,QAAQ,CAACD,QAAQ,EACjB,YACF,CAAC;QACH;MACF,CAAC,CAAC,OAAOE,YAAY,EAAE;QACrBC,OAAO,CAACC,IAAI,CACV,gDAAgD,EAChDF,YACF,CAAC;MACH;IACF;IAEA,MAAMG,UAAU,GACdR,iBAAiB,CAACS,MAAM,KAAK,CAAC,IAAIf,iBAAiB,CAACe,MAAM,KAAK,CAAC;IAElE,OAAO;MACLb,qBAAqB;MACrBI,iBAAiB;MACjBN,iBAAiB;MACjBO,mBAAmB;MACnBZ,aAAa;MACbmB;IACF,CAAC;EACH,CAAC,CAAC,OAAOE,KAAK,EAAE;IACd,MAAM,IAAI1B,YAAY,CACpB,yBAAyB0B,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGC,MAAM,CAACH,KAAK,CAAC,EAAE,EACjF;MAAEI,KAAK,EAAEJ;IAAM,CACjB,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeK,eAAeA,CACnC7B,UAAsB,EACQ;EAC9B,OAAOJ,sBAAsB,CAACI,UAAU,CAAC;AAC3C","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/nonceAccount.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { PublicKey } from '@solana/web3.js';
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Represents a TOSS wallet user in the ecosystem
|
|
7
|
+
* Enhanced with secure nonce account support for offline transactions
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -21,19 +22,33 @@ export const exampleTossUser = {
|
|
|
21
22
|
isVerified: true,
|
|
22
23
|
createdAt: '2023-01-01T00:00:00Z'
|
|
23
24
|
},
|
|
25
|
+
nonceAccount: {
|
|
26
|
+
address: new PublicKey('22222222222222222222222222222222'),
|
|
27
|
+
authorizedSigner: new PublicKey('33333333333333333333333333333333'),
|
|
28
|
+
isBiometricProtected: true,
|
|
29
|
+
status: 'active'
|
|
30
|
+
},
|
|
24
31
|
device: {
|
|
25
32
|
id: 'dev_xyz789',
|
|
26
33
|
name: 'Alice iPhone',
|
|
27
34
|
lastActive: new Date().toISOString(),
|
|
28
35
|
client: 'mobile'
|
|
29
36
|
},
|
|
37
|
+
security: {
|
|
38
|
+
biometricEnabled: true,
|
|
39
|
+
nonceAccountRequiresBiometric: true,
|
|
40
|
+
lastBiometricVerification: Math.floor(Date.now() / 1000)
|
|
41
|
+
},
|
|
30
42
|
status: 'active',
|
|
31
43
|
lastSeen: new Date().toISOString(),
|
|
32
44
|
tossFeatures: {
|
|
33
45
|
canSend: true,
|
|
34
46
|
canReceive: true,
|
|
35
47
|
isPrivateTxEnabled: true,
|
|
36
|
-
maxTransactionAmount: 1000000000
|
|
48
|
+
maxTransactionAmount: 1000000000,
|
|
49
|
+
// 1 SOL in lamports
|
|
50
|
+
offlineTransactionsEnabled: true,
|
|
51
|
+
nonceAccountEnabled: true
|
|
37
52
|
},
|
|
38
53
|
createdAt: '2023-01-01T00:00:00Z',
|
|
39
54
|
updatedAt: new Date().toISOString()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PublicKey","exampleTossUser","userId","username","displayName","wallet","publicKey","isVerified","createdAt","device","id","name","lastActive","Date","toISOString","client","
|
|
1
|
+
{"version":3,"names":["PublicKey","exampleTossUser","userId","username","displayName","wallet","publicKey","isVerified","createdAt","nonceAccount","address","authorizedSigner","isBiometricProtected","status","device","id","name","lastActive","Date","toISOString","client","security","biometricEnabled","nonceAccountRequiresBiometric","lastBiometricVerification","Math","floor","now","lastSeen","tossFeatures","canSend","canReceive","isPrivateTxEnabled","maxTransactionAmount","offlineTransactionsEnabled","nonceAccountEnabled","updatedAt"],"sourceRoot":"../../../src","sources":["types/tossUser.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA;;AA0DA;AACA;AACA;;AASA;AACA,OAAO,MAAMC,eAAyB,GAAG;EACvCC,MAAM,EAAE,aAAa;EACrBC,QAAQ,EAAE,QAAQ;EAClBC,WAAW,EAAE,OAAO;EACpBC,MAAM,EAAE;IACNC,SAAS,EAAE,IAAIN,SAAS,CAAC,kCAAkC,CAAC;IAAE;IAC9DO,UAAU,EAAE,IAAI;IAChBC,SAAS,EAAE;EACb,CAAC;EACDC,YAAY,EAAE;IACZC,OAAO,EAAE,IAAIV,SAAS,CAAC,kCAAkC,CAAC;IAC1DW,gBAAgB,EAAE,IAAIX,SAAS,CAAC,kCAAkC,CAAC;IACnEY,oBAAoB,EAAE,IAAI;IAC1BC,MAAM,EAAE;EACV,CAAC;EACDC,MAAM,EAAE;IACNC,EAAE,EAAE,YAAY;IAChBC,IAAI,EAAE,cAAc;IACpBC,UAAU,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACpCC,MAAM,EAAE;EACV,CAAC;EACDC,QAAQ,EAAE;IACRC,gBAAgB,EAAE,IAAI;IACtBC,6BAA6B,EAAE,IAAI;IACnCC,yBAAyB,EAAEC,IAAI,CAACC,KAAK,CAACR,IAAI,CAACS,GAAG,CAAC,CAAC,GAAG,IAAI;EACzD,CAAC;EACDd,MAAM,EAAE,QAAQ;EAChBe,QAAQ,EAAE,IAAIV,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAClCU,YAAY,EAAE;IACZC,OAAO,EAAE,IAAI;IACbC,UAAU,EAAE,IAAI;IAChBC,kBAAkB,EAAE,IAAI;IACxBC,oBAAoB,EAAE,UAAU;IAAE;IAClCC,0BAA0B,EAAE,IAAI;IAChCC,mBAAmB,EAAE;EACvB,CAAC;EACD3B,SAAS,EAAE,sBAAsB;EACjC4B,SAAS,EAAE,IAAIlB,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;AACpC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-program-simple.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/solana-program-simple.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,10 +1,39 @@
|
|
|
1
1
|
import { Device } from 'react-native-ble-plx';
|
|
2
2
|
import type { TossUser } from './types/tossUser';
|
|
3
3
|
import type { SolanaIntent } from './intent';
|
|
4
|
+
import type { OfflineTransaction } from './types/nonceAccount';
|
|
4
5
|
export declare function requestBLEPermissions(): Promise<void>;
|
|
5
|
-
export declare function startTossScan(onUserFound: (user: TossUser, device: Device) => void, onIntentFound: (intent: SolanaIntent, device: Device) => void): void;
|
|
6
|
+
export declare function startTossScan(onUserFound: (user: TossUser, device: Device) => void, onIntentFound: (intent: SolanaIntent, device: Device) => void, onOfflineTransactionFound?: (tx: OfflineTransaction, device: Device) => void): void;
|
|
6
7
|
export declare function advertiseUser(user: TossUser): Promise<void>;
|
|
7
8
|
export declare function stopAdvertising(): Promise<void>;
|
|
8
9
|
export declare function sendIntentToDevice(deviceId: string, intent: SolanaIntent): Promise<void>;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Send fragmented offline transaction over BLE with Noise Protocol encryption
|
|
12
|
+
* Automatically handles MTU limitations and retries
|
|
13
|
+
*/
|
|
14
|
+
export declare function sendOfflineTransactionFragmented(device: Device, transaction: OfflineTransaction | SolanaIntent, noiseEncryptFn?: (data: Uint8Array) => Promise<any>, isIntent?: boolean): Promise<{
|
|
15
|
+
success: boolean;
|
|
16
|
+
sentFragments: number;
|
|
17
|
+
failedFragments: number[];
|
|
18
|
+
messageId: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Receive and reassemble fragmented message from BLE
|
|
22
|
+
*/
|
|
23
|
+
export declare function receiveOfflineTransactionFragment(fragment: any, noiseDecryptFn?: (encrypted: any) => Promise<Uint8Array>): Promise<{
|
|
24
|
+
complete: boolean;
|
|
25
|
+
transaction?: OfflineTransaction | SolanaIntent;
|
|
26
|
+
progress: {
|
|
27
|
+
received: number;
|
|
28
|
+
total: number;
|
|
29
|
+
};
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Get current BLE MTU configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare function getBLEMTUConfig(): import(".").BLEMTUConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Set custom BLE MTU configuration
|
|
37
|
+
*/
|
|
38
|
+
export declare function setBLEMTUConfig(config: Partial<any>): void;
|
|
10
39
|
//# sourceMappingURL=ble.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ble.d.ts","sourceRoot":"","sources":["../../../src/ble.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ble.d.ts","sourceRoot":"","sources":["../../../src/ble.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAa/D,wBAAsB,qBAAqB,kBAQ1C;AAUD,wBAAgB,aAAa,CAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EACrD,aAAa,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC7D,yBAAyB,CAAC,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,QA6D7E;AAKD,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,iBAuBjD;AAED,wBAAsB,eAAe,kBASpC;AAGD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,iBAcrB;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,GAAG,YAAY,EAC9C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,CAAC,EACnD,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAiCD;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,QAAQ,EAAE,GAAG,EACb,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,GACvD,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC;IAChD,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC,CAKD;AAED;;GAEG;AACH,wBAAgB,eAAe,6BAE9B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAEnD"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Device } from 'react-native-ble-plx';
|
|
2
|
+
import type { SolanaIntent } from '../intent';
|
|
3
|
+
import type { OfflineTransaction } from '../types/nonceAccount';
|
|
4
|
+
/**
|
|
5
|
+
* BLE MTU Configuration for different device types
|
|
6
|
+
*/
|
|
7
|
+
export interface BLEMTUConfig {
|
|
8
|
+
maxPayloadSize: number;
|
|
9
|
+
chunkSize: number;
|
|
10
|
+
maxRetries: number;
|
|
11
|
+
timeout: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Represents a fragmented message with header information
|
|
15
|
+
*/
|
|
16
|
+
export interface BLEFragment {
|
|
17
|
+
messageId: string;
|
|
18
|
+
sequenceNumber: number;
|
|
19
|
+
totalFragments: number;
|
|
20
|
+
checksumValue: number;
|
|
21
|
+
payload: Uint8Array;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Represents a Noise-encrypted BLE message
|
|
25
|
+
*/
|
|
26
|
+
export interface EncryptedBLEMessage {
|
|
27
|
+
version: number;
|
|
28
|
+
ciphertext: Uint8Array;
|
|
29
|
+
nonce: Uint8Array;
|
|
30
|
+
tag: Uint8Array;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* BLETransactionHandler
|
|
34
|
+
* Manages secure, fragmented BLE transmission of offline transactions
|
|
35
|
+
* with Noise Protocol encryption
|
|
36
|
+
*/
|
|
37
|
+
export declare class BLETransactionHandler {
|
|
38
|
+
private mtuConfig;
|
|
39
|
+
private fragmentCache;
|
|
40
|
+
private messageIdMap;
|
|
41
|
+
constructor(platform?: 'android' | 'ios');
|
|
42
|
+
/**
|
|
43
|
+
* Fragment a large transaction/intent into BLE-safe chunks
|
|
44
|
+
* Respects MTU limitations and adds framing information
|
|
45
|
+
*/
|
|
46
|
+
fragmentTransaction(transaction: OfflineTransaction | SolanaIntent, isIntent?: boolean): BLEFragment[];
|
|
47
|
+
/**
|
|
48
|
+
* Prepare encrypted BLE message for transmission
|
|
49
|
+
* Uses Noise Protocol for end-to-end encryption
|
|
50
|
+
*/
|
|
51
|
+
prepareEncryptedMessage(fragment: BLEFragment, noiseEncryptFn: (data: Uint8Array) => Promise<EncryptedBLEMessage>): Promise<EncryptedBLEMessage>;
|
|
52
|
+
/**
|
|
53
|
+
* Send fragmented transaction over BLE with encryption
|
|
54
|
+
* Handles retries and verification
|
|
55
|
+
*/
|
|
56
|
+
sendFragmentedTransactionBLE(device: Device, transaction: OfflineTransaction | SolanaIntent, sendFn: (deviceId: string, characteristicUUID: string, data: Buffer) => Promise<void>, noiseEncryptFn?: (data: Uint8Array) => Promise<EncryptedBLEMessage>, isIntent?: boolean): Promise<{
|
|
57
|
+
success: boolean;
|
|
58
|
+
sentFragments: number;
|
|
59
|
+
failedFragments: number[];
|
|
60
|
+
messageId: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Receive and reassemble fragmented messages
|
|
64
|
+
*/
|
|
65
|
+
receiveFragmentedMessage(fragment: BLEFragment, _noiseDecryptFn?: (encrypted: EncryptedBLEMessage) => Promise<Uint8Array>): Promise<{
|
|
66
|
+
complete: boolean;
|
|
67
|
+
transaction?: OfflineTransaction | SolanaIntent;
|
|
68
|
+
progress: {
|
|
69
|
+
received: number;
|
|
70
|
+
total: number;
|
|
71
|
+
};
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Reassemble fragments into original message
|
|
75
|
+
*/
|
|
76
|
+
private reassembleMessage;
|
|
77
|
+
/**
|
|
78
|
+
* Serialize BLE fragment for transmission
|
|
79
|
+
*/
|
|
80
|
+
private serializeFragment;
|
|
81
|
+
/**
|
|
82
|
+
* Calculate CRC32 checksum for fragment verification
|
|
83
|
+
*/
|
|
84
|
+
private calculateCRC32;
|
|
85
|
+
/**
|
|
86
|
+
* Delay utility for retries
|
|
87
|
+
*/
|
|
88
|
+
private delay;
|
|
89
|
+
/**
|
|
90
|
+
* Get MTU configuration
|
|
91
|
+
*/
|
|
92
|
+
getMTUConfig(): BLEMTUConfig;
|
|
93
|
+
/**
|
|
94
|
+
* Set custom MTU configuration
|
|
95
|
+
*/
|
|
96
|
+
setMTUConfig(config: Partial<BLEMTUConfig>): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=BLETransactionHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BLETransactionHandler.d.ts","sourceRoot":"","sources":["../../../../src/client/BLETransactionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAoBD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,YAAY,CACR;gBAEA,QAAQ,GAAE,SAAS,GAAG,KAAiB;IAKnD;;;OAGG;IACH,mBAAmB,CACjB,WAAW,EAAE,kBAAkB,GAAG,YAAY,EAC9C,QAAQ,GAAE,OAAe,GACxB,WAAW,EAAE;IAkChB;;;OAGG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,WAAW,EACrB,cAAc,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,mBAAmB,CAAC,GACjE,OAAO,CAAC,mBAAmB,CAAC;IAU/B;;;OAGG;IACG,4BAA4B,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,GAAG,YAAY,EAC9C,MAAM,EAAE,CACN,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,IAAI,CAAC,EAClB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,mBAAmB,CAAC,EACnE,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IA4DF;;OAEG;IACG,wBAAwB,CAC5B,QAAQ,EAAE,WAAW,EACrB,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,OAAO,CAAC,UAAU,CAAC,GACxE,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC;QAChD,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IAyDF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,YAAY,IAAI,YAAY;IAI5B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAMlD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { PublicKey, Keypair, Connection, TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
import type { NonceAccountInfo, NonceAccountCacheEntry, CreateNonceAccountOptions, OfflineTransaction } from '../types/nonceAccount';
|
|
3
|
+
import type { TossUser } from '../types/tossUser';
|
|
4
|
+
/**
|
|
5
|
+
* NonceAccountManager
|
|
6
|
+
* Manages durable nonce accounts for secure offline transactions
|
|
7
|
+
* with biometric protection and encrypted storage
|
|
8
|
+
*/
|
|
9
|
+
export declare class NonceAccountManager {
|
|
10
|
+
private cache;
|
|
11
|
+
private connection;
|
|
12
|
+
constructor(connection: Connection);
|
|
13
|
+
/**
|
|
14
|
+
* Create a new durable nonce account for a user
|
|
15
|
+
* Securely stores the nonce account with biometric protection
|
|
16
|
+
*/
|
|
17
|
+
createNonceAccount(user: TossUser, nonceAuthorityKeypair: Keypair, owner: PublicKey, options?: CreateNonceAccountOptions): Promise<NonceAccountInfo>;
|
|
18
|
+
/**
|
|
19
|
+
* Store nonce account securely in device's secure enclave
|
|
20
|
+
* Encrypted and protected by biometric authentication
|
|
21
|
+
*/
|
|
22
|
+
private storeNonceAccountSecurely;
|
|
23
|
+
/**
|
|
24
|
+
* Retrieve nonce account from secure storage
|
|
25
|
+
* Requires biometric verification
|
|
26
|
+
*/
|
|
27
|
+
getNonceAccountSecure(userId: string, authenticator?: () => Promise<void>): Promise<NonceAccountInfo | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Cache nonce account info for quick access
|
|
30
|
+
*/
|
|
31
|
+
private cacheNonceAccount;
|
|
32
|
+
/**
|
|
33
|
+
* Get cached nonce account info
|
|
34
|
+
*/
|
|
35
|
+
getCachedNonceAccount(userId: string): NonceAccountCacheEntry | null;
|
|
36
|
+
/**
|
|
37
|
+
* Prepare offline transaction using nonce account
|
|
38
|
+
* Creates a transaction that can be signed and executed offline
|
|
39
|
+
*/
|
|
40
|
+
prepareOfflineTransaction(user: TossUser, _instructions: TransactionInstruction[], nonceAccountInfo: NonceAccountInfo): Promise<OfflineTransaction>;
|
|
41
|
+
/**
|
|
42
|
+
* Renew nonce account (refresh blockhash and nonce state)
|
|
43
|
+
*/
|
|
44
|
+
renewNonceAccount(userId: string, _nonceAccountAddress: PublicKey): Promise<NonceAccountInfo | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Revoke nonce account (mark as unusable)
|
|
47
|
+
*/
|
|
48
|
+
revokeNonceAccount(userId: string, _nonceAccountAddress: PublicKey): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Clean up expired nonce accounts from cache
|
|
51
|
+
*/
|
|
52
|
+
cleanupExpiredCache(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Validate nonce account status
|
|
55
|
+
*/
|
|
56
|
+
isNonceAccountValid(nonceAccountInfo: NonceAccountInfo): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* GAP #6 FIX: Initialize a durable nonce account onchain
|
|
59
|
+
* Per TOSS Paper Section 4.2: "Replay-protected" nonces
|
|
60
|
+
* This creates the actual SystemProgram nonce account on the blockchain
|
|
61
|
+
*/
|
|
62
|
+
initializeDurableNonceAccountOnchain(authority: PublicKey, nonceAccountKeypair: Keypair, payer: PublicKey, minRentLamports: number): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* GAP #6 FIX: Consume (advance) a nonce account after successful transaction
|
|
65
|
+
* Per TOSS Paper Section 9: Nonce advancement for replay protection
|
|
66
|
+
*/
|
|
67
|
+
consumeNonceAccount(nonceAccountAddress: PublicKey, nonceAuthority: PublicKey): Promise<TransactionInstruction>;
|
|
68
|
+
/**
|
|
69
|
+
* GAP #6 FIX: Validate nonce account state on chain
|
|
70
|
+
* Checks that nonce account exists and is properly configured
|
|
71
|
+
*/
|
|
72
|
+
validateNonceAccountOnchain(nonceAccountAddress: PublicKey, _expectedAuthority?: PublicKey): Promise<{
|
|
73
|
+
valid: boolean;
|
|
74
|
+
error?: string;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* GAP #6 FIX: Get current nonce value from blockchain
|
|
78
|
+
* Reads the actual nonce state from the nonce account
|
|
79
|
+
*/
|
|
80
|
+
getCurrentNonceFromChain(nonceAccountAddress: PublicKey): Promise<number>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=NonceAccountManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NonceAccountManager.d.ts","sourceRoot":"","sources":["../../../../src/client/NonceAccountManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,UAAU,EAIV,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAkD;IAC/D,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU;IAIlC;;;OAGG;IACG,kBAAkB,CACtB,IAAI,EAAE,QAAQ,EACd,qBAAqB,EAAE,OAAO,EAC9B,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,gBAAgB,CAAC;IAoD5B;;;OAGG;YACW,yBAAyB;IAqBvC;;;OAGG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAClC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAsBnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAWpE;;;OAGG;IACG,yBAAyB,CAC7B,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,sBAAsB,EAAE,EACvC,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IA4B9B;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,SAAS,GAC9B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA8CnC;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC;IAiBhB;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAS3B;;OAEG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO;IAahE;;;;OAIG;IACG,oCAAoC,CACxC,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,OAAO,EAC5B,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC;IAwClB;;;OAGG;IACG,mBAAmB,CACvB,mBAAmB,EAAE,SAAS,EAC9B,cAAc,EAAE,SAAS,GACxB,OAAO,CAAC,sBAAsB,CAAC;IAQlC;;;OAGG;IACG,2BAA2B,CAC/B,mBAAmB,EAAE,SAAS,EAC9B,kBAAkB,CAAC,EAAE,SAAS,GAC7B,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiC9C;;;OAGG;IACG,wBAAwB,CAC5B,mBAAmB,EAAE,SAAS,GAC7B,OAAO,CAAC,MAAM,CAAC;CAiBnB"}
|