toss-expo-sdk 0.1.2 → 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.
Files changed (93) hide show
  1. package/README.md +380 -25
  2. package/lib/module/ble.js +59 -4
  3. package/lib/module/ble.js.map +1 -1
  4. package/lib/module/client/BLETransactionHandler.js +277 -0
  5. package/lib/module/client/BLETransactionHandler.js.map +1 -0
  6. package/lib/module/client/NonceAccountManager.js +364 -0
  7. package/lib/module/client/NonceAccountManager.js.map +1 -0
  8. package/lib/module/client/TossClient.js +1 -1
  9. package/lib/module/client/TossClient.js.map +1 -1
  10. package/lib/module/examples/enhancedFeaturesFlow.js +233 -0
  11. package/lib/module/examples/enhancedFeaturesFlow.js.map +1 -0
  12. package/lib/module/examples/offlinePaymentFlow.js +27 -27
  13. package/lib/module/examples/offlinePaymentFlow.js.map +1 -1
  14. package/lib/module/hooks/useOfflineBLETransactions.js +314 -0
  15. package/lib/module/hooks/useOfflineBLETransactions.js.map +1 -0
  16. package/lib/module/index.js +18 -8
  17. package/lib/module/index.js.map +1 -1
  18. package/lib/module/intent.js +129 -0
  19. package/lib/module/intent.js.map +1 -1
  20. package/lib/module/noise.js +175 -0
  21. package/lib/module/noise.js.map +1 -1
  22. package/lib/module/qr.js +2 -2
  23. package/lib/module/reconciliation.js +155 -0
  24. package/lib/module/reconciliation.js.map +1 -1
  25. package/lib/module/services/authService.js +166 -3
  26. package/lib/module/services/authService.js.map +1 -1
  27. package/lib/module/storage/secureStorage.js +102 -0
  28. package/lib/module/storage/secureStorage.js.map +1 -1
  29. package/lib/module/sync.js +25 -1
  30. package/lib/module/sync.js.map +1 -1
  31. package/lib/module/types/nonceAccount.js +2 -0
  32. package/lib/module/types/nonceAccount.js.map +1 -0
  33. package/lib/module/types/tossUser.js +16 -1
  34. package/lib/module/types/tossUser.js.map +1 -1
  35. package/lib/module/utils/compression.js +210 -0
  36. package/lib/module/utils/compression.js.map +1 -0
  37. package/lib/module/wifi.js +311 -0
  38. package/lib/module/wifi.js.map +1 -0
  39. package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts +8 -0
  40. package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts.map +1 -0
  41. package/lib/typescript/src/ble.d.ts +31 -2
  42. package/lib/typescript/src/ble.d.ts.map +1 -1
  43. package/lib/typescript/src/client/BLETransactionHandler.d.ts +98 -0
  44. package/lib/typescript/src/client/BLETransactionHandler.d.ts.map +1 -0
  45. package/lib/typescript/src/client/NonceAccountManager.d.ts +82 -0
  46. package/lib/typescript/src/client/NonceAccountManager.d.ts.map +1 -0
  47. package/lib/typescript/src/examples/enhancedFeaturesFlow.d.ts +45 -0
  48. package/lib/typescript/src/examples/enhancedFeaturesFlow.d.ts.map +1 -0
  49. package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts +91 -0
  50. package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts.map +1 -0
  51. package/lib/typescript/src/index.d.ts +11 -4
  52. package/lib/typescript/src/index.d.ts.map +1 -1
  53. package/lib/typescript/src/intent.d.ts +15 -0
  54. package/lib/typescript/src/intent.d.ts.map +1 -1
  55. package/lib/typescript/src/noise.d.ts +62 -0
  56. package/lib/typescript/src/noise.d.ts.map +1 -1
  57. package/lib/typescript/src/reconciliation.d.ts +6 -0
  58. package/lib/typescript/src/reconciliation.d.ts.map +1 -1
  59. package/lib/typescript/src/services/authService.d.ts +26 -1
  60. package/lib/typescript/src/services/authService.d.ts.map +1 -1
  61. package/lib/typescript/src/storage/secureStorage.d.ts +16 -0
  62. package/lib/typescript/src/storage/secureStorage.d.ts.map +1 -1
  63. package/lib/typescript/src/sync.d.ts +6 -1
  64. package/lib/typescript/src/sync.d.ts.map +1 -1
  65. package/lib/typescript/src/types/nonceAccount.d.ts +59 -0
  66. package/lib/typescript/src/types/nonceAccount.d.ts.map +1 -0
  67. package/lib/typescript/src/types/tossUser.d.ts +16 -0
  68. package/lib/typescript/src/types/tossUser.d.ts.map +1 -1
  69. package/lib/typescript/src/utils/compression.d.ts +52 -0
  70. package/lib/typescript/src/utils/compression.d.ts.map +1 -0
  71. package/lib/typescript/src/wifi.d.ts +116 -0
  72. package/lib/typescript/src/wifi.d.ts.map +1 -0
  73. package/package.json +1 -1
  74. package/src/__tests__/solana-program-simple.test.ts +256 -0
  75. package/src/ble.ts +105 -4
  76. package/src/client/BLETransactionHandler.ts +364 -0
  77. package/src/client/NonceAccountManager.ts +444 -0
  78. package/src/client/TossClient.ts +1 -1
  79. package/src/examples/enhancedFeaturesFlow.ts +272 -0
  80. package/src/examples/offlinePaymentFlow.ts +27 -27
  81. package/src/hooks/useOfflineBLETransactions.ts +438 -0
  82. package/src/index.tsx +52 -6
  83. package/src/intent.ts +166 -0
  84. package/src/noise.ts +238 -0
  85. package/src/qr.tsx +2 -2
  86. package/src/reconciliation.ts +184 -0
  87. package/src/services/authService.ts +190 -3
  88. package/src/storage/secureStorage.ts +138 -0
  89. package/src/sync.ts +40 -0
  90. package/src/types/nonceAccount.ts +75 -0
  91. package/src/types/tossUser.ts +35 -2
  92. package/src/utils/compression.ts +247 -0
  93. package/src/wifi.ts +401 -0
@@ -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":"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","ignoreList":[]}
@@ -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,
@@ -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,MAAMX,eAAe,CAACI,UAAU,CAAC;;IAE3D;IACA,MAAMQ,oBAAoB,GAAG,MAAMb,uBAAuB,CACxDK,UAAU,EACVC,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,MAAMjB,sBAAsB,CAACG,UAAU,CAAC;IAEpE,MAAMe,UAAU,GACdF,iBAAiB,CAACG,MAAM,KAAK,CAAC,IAAIT,iBAAiB,CAACS,MAAM,KAAK,CAAC;IAElE,OAAO;MACLP,qBAAqB;MACrBI,iBAAiB;MACjBN,iBAAiB;MACjBO,mBAAmB;MACnBZ,aAAa;MACba;IACF,CAAC;EACH,CAAC,CAAC,OAAOE,KAAK,EAAE;IACd,MAAM,IAAInB,YAAY,CACpB,yBAAyBmB,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,CACnCtB,UAAsB,EACQ;EAC9B,OAAOH,sBAAsB,CAACG,UAAU,CAAC;AAC3C","ignoreList":[]}
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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=nonceAccount.js.map
@@ -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 // 1 SOL in lamports
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","status","lastSeen","tossFeatures","canSend","canReceive","isPrivateTxEnabled","maxTransactionAmount","updatedAt"],"sourceRoot":"../../../src","sources":["types/tossUser.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;;AAuCA;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,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,MAAM,EAAE,QAAQ;EAChBC,QAAQ,EAAE,IAAIJ,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAClCI,YAAY,EAAE;IACZC,OAAO,EAAE,IAAI;IACbC,UAAU,EAAE,IAAI;IAChBC,kBAAkB,EAAE,IAAI;IACxBC,oBAAoB,EAAE,UAAU,CAAE;EACpC,CAAC;EACDd,SAAS,EAAE,sBAAsB;EACjCe,SAAS,EAAE,IAAIV,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;AACpC,CAAC","ignoreList":[]}
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,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":[]}