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.
Files changed (73) hide show
  1. package/README.md +368 -15
  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/hooks/useOfflineBLETransactions.js +314 -0
  11. package/lib/module/hooks/useOfflineBLETransactions.js.map +1 -0
  12. package/lib/module/index.js +12 -8
  13. package/lib/module/index.js.map +1 -1
  14. package/lib/module/intent.js +129 -0
  15. package/lib/module/intent.js.map +1 -1
  16. package/lib/module/noise.js +175 -0
  17. package/lib/module/noise.js.map +1 -1
  18. package/lib/module/reconciliation.js +155 -0
  19. package/lib/module/reconciliation.js.map +1 -1
  20. package/lib/module/services/authService.js +164 -1
  21. package/lib/module/services/authService.js.map +1 -1
  22. package/lib/module/storage/secureStorage.js +102 -0
  23. package/lib/module/storage/secureStorage.js.map +1 -1
  24. package/lib/module/sync.js +25 -1
  25. package/lib/module/sync.js.map +1 -1
  26. package/lib/module/types/nonceAccount.js +2 -0
  27. package/lib/module/types/nonceAccount.js.map +1 -0
  28. package/lib/module/types/tossUser.js +16 -1
  29. package/lib/module/types/tossUser.js.map +1 -1
  30. package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts +8 -0
  31. package/lib/typescript/src/__tests__/solana-program-simple.test.d.ts.map +1 -0
  32. package/lib/typescript/src/ble.d.ts +31 -2
  33. package/lib/typescript/src/ble.d.ts.map +1 -1
  34. package/lib/typescript/src/client/BLETransactionHandler.d.ts +98 -0
  35. package/lib/typescript/src/client/BLETransactionHandler.d.ts.map +1 -0
  36. package/lib/typescript/src/client/NonceAccountManager.d.ts +82 -0
  37. package/lib/typescript/src/client/NonceAccountManager.d.ts.map +1 -0
  38. package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts +91 -0
  39. package/lib/typescript/src/hooks/useOfflineBLETransactions.d.ts.map +1 -0
  40. package/lib/typescript/src/index.d.ts +9 -4
  41. package/lib/typescript/src/index.d.ts.map +1 -1
  42. package/lib/typescript/src/intent.d.ts +15 -0
  43. package/lib/typescript/src/intent.d.ts.map +1 -1
  44. package/lib/typescript/src/noise.d.ts +62 -0
  45. package/lib/typescript/src/noise.d.ts.map +1 -1
  46. package/lib/typescript/src/reconciliation.d.ts +6 -0
  47. package/lib/typescript/src/reconciliation.d.ts.map +1 -1
  48. package/lib/typescript/src/services/authService.d.ts +26 -1
  49. package/lib/typescript/src/services/authService.d.ts.map +1 -1
  50. package/lib/typescript/src/storage/secureStorage.d.ts +16 -0
  51. package/lib/typescript/src/storage/secureStorage.d.ts.map +1 -1
  52. package/lib/typescript/src/sync.d.ts +6 -1
  53. package/lib/typescript/src/sync.d.ts.map +1 -1
  54. package/lib/typescript/src/types/nonceAccount.d.ts +59 -0
  55. package/lib/typescript/src/types/nonceAccount.d.ts.map +1 -0
  56. package/lib/typescript/src/types/tossUser.d.ts +16 -0
  57. package/lib/typescript/src/types/tossUser.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/src/__tests__/solana-program-simple.test.ts +256 -0
  60. package/src/ble.ts +105 -4
  61. package/src/client/BLETransactionHandler.ts +364 -0
  62. package/src/client/NonceAccountManager.ts +444 -0
  63. package/src/client/TossClient.ts +1 -1
  64. package/src/hooks/useOfflineBLETransactions.ts +438 -0
  65. package/src/index.tsx +40 -6
  66. package/src/intent.ts +166 -0
  67. package/src/noise.ts +238 -0
  68. package/src/reconciliation.ts +184 -0
  69. package/src/services/authService.ts +188 -1
  70. package/src/storage/secureStorage.ts +138 -0
  71. package/src/sync.ts +40 -0
  72. package/src/types/nonceAccount.ts +75 -0
  73. 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":";;AAAA,OAAO,KAAKA,WAAW,MAAM,mBAAmB;AAChD,SAASC,OAAO,EAAEC,SAAS,QAAoB,iBAAiB;AAChE,OAAO,KAAKC,mBAAmB,MAAM,2BAA2B;AAEhE,OAAOC,MAAM,MAAM,QAAQ;AAC3B,SAASC,mBAAmB,QAAQ,kCAA+B;AAEnE,OAAO,MAAMC,WAAW,GAAG,mBAAmB;AAC9C,MAAMC,UAAU,GAAG,uBAAuB;AAC1C,MAAMC,kBAAkB,GAAG,qBAAqB;AAChD,MAAMC,iBAAiB,GAAG,oBAAoB;AAS9C,OAAO,MAAMC,WAAW,CAAC;EACvB,aAAaC,gBAAgBA,CAC3BC,aAAqB,EACrBC,WAAoB,GAAG,KAAK,EACuB;IACnD;IACA,MAAMC,OAAoB,GAAG;MAC3BC,EAAE,EAAE,QAAQC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;MACxBC,KAAK,EAAE,SAASC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MACzDC,SAAS,EAAEV,WAAW,GAClBG,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;MAAA,EACjCD,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;MAAE;MAC3CL;IACF,CAAC;IAED,MAAMY,IAAc,GAAG;MACrBC,MAAM,EAAE,QAAQb,aAAa,CAACc,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MAC3CC,QAAQ,EAAE,QAAQf,aAAa,CAACc,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MAC7CE,MAAM,EAAE;QACNC,SAAS,EAAE,IAAI3B,SAAS,CAACU,aAAa,CAAC;QACvCkB,UAAU,EAAE,KAAK;QACjBC,SAAS,EAAE,IAAIf,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC;MACpC,CAAC;MACDC,MAAM,EAAE;QACNlB,EAAE,EAAE,gBAAgB;QAAE;QACtBmB,UAAU,EAAE,IAAIlB,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC,CAAC;QACpCG,MAAM,EAAE;MACV,CAAC;MACDC,QAAQ,EAAE;QACRC,gBAAgB,EAAE,KAAK;QACvBC,6BAA6B,EAAE;MACjC,CAAC;MACDC,MAAM,EAAE,QAAQ;MAChBC,QAAQ,EAAE,IAAIxB,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC,CAAC;MAClCS,YAAY,EAAE;QACZC,OAAO,EAAE,IAAI;QACbC,UAAU,EAAE,IAAI;QAChBC,kBAAkB,EAAE,IAAI;QACxBC,oBAAoB,EAAE,KAAK;QAC3BC,0BAA0B,EAAE,KAAK;QACjCC,mBAAmB,EAAE;MACvB,CAAC;MACDhB,SAAS,EAAE,IAAIf,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC,CAAC;MACnCgB,SAAS,EAAE,IAAIhC,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,CAACiB,WAAW,CAACnC,OAAO,CAAC;IAC/B,OAAO;MAAEU,IAAI;MAAEV;IAAQ,CAAC;EAC1B;EAEA,aAAamC,WAAWA,CAACnC,OAAoB,EAAiB;IAC5D,MAAMd,WAAW,CAACkD,YAAY,CAAC5C,WAAW,EAAE6C,IAAI,CAACC,SAAS,CAACtC,OAAO,CAAC,CAAC;EACtE;EAEA,aAAauC,UAAUA,CAAA,EAAgC;IACrD,MAAMvC,OAAO,GAAG,MAAMd,WAAW,CAACsD,YAAY,CAAChD,WAAW,CAAC;IAC3D,OAAOQ,OAAO,GAAGqC,IAAI,CAACI,KAAK,CAACzC,OAAO,CAAC,GAAG,IAAI;EAC7C;EAEA,aAAa0C,OAAOA,CAAA,EAAkB;IACpC,MAAMxD,WAAW,CAACyD,eAAe,CAACnD,WAAW,CAAC;IAC9C,MAAMN,WAAW,CAACyD,eAAe,CAAClD,UAAU,CAAC;EAC/C;EAEA,aAAamD,gBAAgBA,CAAA,EAAqB;IAChD,MAAMC,WAAW,GAAG,MAAM3D,WAAW,CAAC4D,gBAAgB,CAAC,CAAC;IACxD,IAAI,CAACD,WAAW,EAAE,OAAO,KAAK;IAE9B,MAAME,IAAI,GAAG,MAAM7D,WAAW,CAACsD,YAAY,CAAC/C,UAAU,CAAC;IACvD,OAAOsD,IAAI,KAAK,IAAI;EACtB;EAEA,aAAaC,0BAA0BA,CAAA,EAA4B;IACjE,MAAMC,WAAW,GAAG,MAAM5D,mBAAmB,CAAC6D,gBAAgB,CAAC,CAAC;IAChE,MAAMC,UAAU,GAAG,MAAM9D,mBAAmB,CAAC+D,eAAe,CAAC,CAAC;IAE9D,IAAI,CAACH,WAAW,IAAI,CAACE,UAAU,EAAE;MAC/B,MAAM,IAAIE,KAAK,CACb,oEACF,CAAC;IACH;;IAEA;IACA,MAAMC,MAAM,GAAG,MAAMjE,mBAAmB,CAACkE,iBAAiB,CAAC;MACzDC,aAAa,EAAE,oDAAoD;MACnEC,aAAa,EAAE,WAAW;MAC1BC,qBAAqB,EAAE;IACzB,CAAC,CAAC;IAEF,IAAI,CAACJ,MAAM,CAACK,OAAO,EAAE;MACnB,MAAM,IAAIN,KAAK,CAAC,iDAAiD,CAAC;IACpE;;IAEA;IACA,MAAMO,SAAS,GAAG,MAAM1E,WAAW,CAACsD,YAAY,CAAC/C,UAAU,CAAC;IAC5D,IAAI,CAACmE,SAAS,EAAE;MACd,MAAM,IAAIP,KAAK,CAAC,kDAAkD,CAAC;IACrE;IAEA,MAAMQ,IAAI,GAAG,MAAM3E,WAAW,CAACsD,YAAY,CAAC9C,kBAAkB,CAAC;IAC/D,IAAI,CAACmE,IAAI,EAAE;MACT,MAAM,IAAIR,KAAK,CAAC,gCAAgC,CAAC;IACnD;IAEA,IAAI;MACF,MAAMS,aAAa,GAAGzB,IAAI,CAACI,KAAK,CAACmB,SAAS,CAAC;MAE3C,IAAI,CAACE,aAAa,CAAC/C,SAAS,IAAI,CAAC+C,aAAa,CAACC,SAAS,EAAE;QACxD,MAAM,IAAIV,KAAK,CAAC,qBAAqB,CAAC;MACxC;;MAEA;MACA,MAAMW,cAAc,GAAG,IAAIC,UAAU,CAACH,aAAa,CAACC,SAAS,CAAC;MAC9D,MAAMG,OAAO,GAAG/E,OAAO,CAACgF,aAAa,CAACH,cAAc,CAAC;;MAErD;MACA,IAAIE,OAAO,CAACnD,SAAS,CAACR,QAAQ,CAAC,CAAC,KAAKuD,aAAa,CAAC/C,SAAS,EAAE;QAC5D,MAAM,IAAIsC,KAAK,CACb,uDACF,CAAC;MACH;;MAEA;MACA,OAAOa,OAAO;IAChB,CAAC,CAAC,OAAOE,KAAK,EAAE;MACd,MAAM,IAAIf,KAAK,CACb,4BAA4Be,KAAK,YAAYf,KAAK,GAAGe,KAAK,CAACC,OAAO,GAAGC,MAAM,CAACF,KAAK,CAAC,EACpF,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaG,qBAAqBA,CAChCL,OAAgB,EAChBM,aAAsB,GAAG,IAAI,EACd;IACf,IAAI,CAACA,aAAa,EAAE;MAClB,MAAM,IAAInB,KAAK,CACb,yEACF,CAAC;IACH;;IAEA;IACA,MAAMJ,WAAW,GAAG,MAAM5D,mBAAmB,CAAC6D,gBAAgB,CAAC,CAAC;IAChE,MAAMC,UAAU,GAAG,MAAM9D,mBAAmB,CAAC+D,eAAe,CAAC,CAAC;IAE9D,IAAI,CAACH,WAAW,IAAI,CAACE,UAAU,EAAE;MAC/B,MAAM,IAAIE,KAAK,CACb,kEACF,CAAC;IACH;;IAEA;IACA,MAAMQ,IAAI,GAAGvE,MAAM,CAACmF,eAAe,CAAC,IAAIR,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC1D,QAAQ,CAAC,CAAC;IAClE,MAAMrB,WAAW,CAACkD,YAAY,CAAC1C,kBAAkB,EAAEmE,IAAI,CAAC;;IAExD;IACA,MAAMa,UAAU,GAAG;MACjB3D,SAAS,EAAEmD,OAAO,CAACnD,SAAS,CAACR,QAAQ,CAAC,CAAC;MACvCwD,SAAS,EAAEY,KAAK,CAACC,IAAI,CAACV,OAAO,CAACH,SAAS,CAAC;MAAE;MAC1C9C,SAAS,EAAEf,IAAI,CAACC,GAAG,CAAC,CAAC;MACrB0E,iBAAiB,EAAE,IAAI;MACvBC,YAAY,EAAE,IAAI;MAClBC,cAAc,EAAE,IAAI;MACpBC,UAAU,EAAE,KAAK,CAAE;IACrB,CAAC;;IAED;IACA,MAAM9F,WAAW,CAACkD,YAAY,CAAC3C,UAAU,EAAE4C,IAAI,CAACC,SAAS,CAACoC,UAAU,CAAC,CAAC;EACxE;;EAEA;AACF;AACA;AACA;EACE,aAAaO,uBAAuBA,CAAA,EAAqB;IACvD,MAAMC,MAAM,GAAG,MAAMhG,WAAW,CAACsD,YAAY,CAAC/C,UAAU,CAAC;IACzD,OAAOyF,MAAM,KAAK,IAAI;EACxB;;EAEA;AACF;AACA;AACA;EACE,aAAaC,uBAAuBA,CAAA,EAA8B;IAChE,IAAI;MACF,MAAMvB,SAAS,GAAG,MAAM1E,WAAW,CAACsD,YAAY,CAAC/C,UAAU,CAAC;MAC5D,IAAI,CAACmE,SAAS,EAAE,OAAO,IAAI;MAE3B,MAAMwB,IAAI,GAAG/C,IAAI,CAACI,KAAK,CAACmB,SAAS,CAAC;MAClC,OAAO,IAAIxE,SAAS,CAACgG,IAAI,CAACrE,SAAS,CAAC;IACtC,CAAC,CAAC,OAAOqD,KAAK,EAAE;MACdiB,OAAO,CAACjB,KAAK,CAAC,2BAA2B,EAAEA,KAAK,CAAC;MACjD,OAAO,IAAI;IACb;EACF;;EAEA;AACF;AACA;AACA;EACE,aAAakB,oBAAoBA,CAAA,EAAkB;IACjD;IACA;EAAA;;EAGF;AACF;AACA;AACA;EACE,aAAaC,uBAAuBA,CAAA,EAAkB;IACpD,MAAMrG,WAAW,CAACyD,eAAe,CAAClD,UAAU,CAAC;IAC7C,MAAMP,WAAW,CAACyD,eAAe,CAACjD,kBAAkB,CAAC;IACrD,MAAMR,WAAW,CAACyD,eAAe,CAACnD,WAAW,CAAC;EAChD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAagG,wBAAwBA,CACnC9E,IAAc,EACd+E,UAAsB,EACtBC,WAAoB,EACD;IACnB;IACA,MAAMzC,WAAW,GAAG,MAAM5D,mBAAmB,CAAC6D,gBAAgB,CAAC,CAAC;IAChE,MAAMC,UAAU,GAAG,MAAM9D,mBAAmB,CAAC+D,eAAe,CAAC,CAAC;IAE9D,IAAI,CAACH,WAAW,IAAI,CAACE,UAAU,EAAE;MAC/B,MAAM,IAAIE,KAAK,CACb,uEACF,CAAC;IACH;;IAEA;IACA,MAAMC,MAAM,GAAG,MAAMjE,mBAAmB,CAACkE,iBAAiB,CAAC;MACzDC,aAAa,EAAE,yDAAyD;MACxEC,aAAa,EAAE,SAAS;MACxBC,qBAAqB,EAAE;IACzB,CAAC,CAAC;IAEF,IAAI,CAACJ,MAAM,CAACK,OAAO,EAAE;MACnB,MAAM,IAAIN,KAAK,CACb,+DACF,CAAC;IACH;IAEA,IAAI;MACF;MACA,MAAMsC,YAAY,GAAG,IAAIpG,mBAAmB,CAACkG,UAAU,CAAC;;MAExD;MACA,MAAMG,qBAAqB,GAAGzG,OAAO,CAAC0G,QAAQ,CAAC,CAAC;;MAEhD;MACA,MAAMC,gBAAgB,GAAG,MAAMH,YAAY,CAACI,kBAAkB,CAC5DrF,IAAI,EACJkF,qBAAqB,EACrBF,WAAW,CAAC3E,SAAS,EACrB;QACEiF,gBAAgB,EAAE,IAAI;QACtBC,aAAa,EAAE,MAAM;QACrBC,sBAAsB,EAAE,IAAI;QAC5BC,SAAS,EAAE;MACb,CACF,CAAC;;MAED;MACA,MAAMC,WAAqB,GAAG;QAC5B,GAAG1F,IAAI;QACP2F,YAAY,EAAE;UACZC,OAAO,EAAE,IAAIlH,SAAS,CAAC0G,gBAAgB,CAACQ,OAAO,CAAC;UAChDC,gBAAgB,EAAE,IAAInH,SAAS,CAAC0G,gBAAgB,CAACS,gBAAgB,CAAC;UAClEC,oBAAoB,EAAE,IAAI;UAC1B/E,MAAM,EAAE;QACV,CAAC;QACDH,QAAQ,EAAE;UACR,GAAGZ,IAAI,CAACY,QAAQ;UAChBC,gBAAgB,EAAE,IAAI;UACtBC,6BAA6B,EAAE,IAAI;UACnCiF,yBAAyB,EAAEpG,IAAI,CAACqG,KAAK,CAACxG,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI;QACzD,CAAC;QACDwB,YAAY,EAAE;UACZ,GAAGjB,IAAI,CAACiB,YAAY;UACpBK,0BAA0B,EAAE,IAAI;UAChCC,mBAAmB,EAAE;QACvB,CAAC;QACDC,SAAS,EAAE,IAAIhC,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC;MACpC,CAAC;MAED,OAAOkF,WAAW;IACpB,CAAC,CAAC,OAAOhC,KAAK,EAAE;MACd,MAAMuC,YAAY,GAChBvC,KAAK,YAAYf,KAAK,GAAGe,KAAK,CAACC,OAAO,GAAGC,MAAM,CAACF,KAAK,CAAC;MACxD,MAAM,IAAIf,KAAK,CAAC,mCAAmCsD,YAAY,EAAE,CAAC;IACpE;EACF;;EAEA;AACF;AACA;AACA;EACE,aAAaC,yBAAyBA,CAAClG,IAAc,EAAqB;IACxE;IACA,IAAI,CAACA,IAAI,CAAC2F,YAAY,EAAE;MACtB,MAAM,IAAIhD,KAAK,CAAC,uDAAuD,CAAC;IAC1E;;IAEA;IACA,IAAI,CAAC3C,IAAI,CAACY,QAAQ,CAACC,gBAAgB,EAAE;MACnC,MAAM,IAAI8B,KAAK,CAAC,gDAAgD,CAAC;IACnE;;IAEA;IACA,OAAO;MACL,GAAG3C,IAAI;MACPiB,YAAY,EAAE;QACZ,GAAGjB,IAAI,CAACiB,YAAY;QACpBK,0BAA0B,EAAE,IAAI;QAChCC,mBAAmB,EAAE;MACvB,CAAC;MACDC,SAAS,EAAE,IAAIhC,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC;IACpC,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,aAAa2F,wBAAwBA,CAAClG,MAAc,EAAoB;IACtE,IAAI;MACF;MACA,MAAM2C,MAAM,GAAG,MAAMjE,mBAAmB,CAACkE,iBAAiB,CAAC;QACzDC,aAAa,EAAE,4CAA4C;QAC3DC,aAAa,EAAE,SAAS;QACxBC,qBAAqB,EAAE;MACzB,CAAC,CAAC;MAEF,IAAI,CAACJ,MAAM,CAACK,OAAO,EAAE;QACnB,OAAO,KAAK;MACd;;MAEA;MACA,MAAMmD,UAAU,GAAG,GAAGnH,iBAAiB,IAAIgB,MAAM,EAAE;MACnD,MAAMuE,MAAM,GAAG,MAAMhG,WAAW,CAACsD,YAAY,CAACsE,UAAU,CAAC;MAEzD,OAAO5B,MAAM,KAAK,IAAI;IACxB,CAAC,CAAC,OAAOd,KAAK,EAAE;MACdiB,OAAO,CAACjB,KAAK,CAAC,wCAAwC,EAAEA,KAAK,CAAC;MAC9D,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;AACA;EACE,aAAa2C,kBAAkBA,CAC7BpG,MAAc,EACdD,IAAc,EACK;IACnB;IACA,MAAM4C,MAAM,GAAG,MAAMjE,mBAAmB,CAACkE,iBAAiB,CAAC;MACzDC,aAAa,EAAE,yDAAyD;MACxEC,aAAa,EAAE,SAAS;MACxBC,qBAAqB,EAAE;IACzB,CAAC,CAAC;IAEF,IAAI,CAACJ,MAAM,CAACK,OAAO,EAAE;MACnB,MAAM,IAAIN,KAAK,CAAC,mDAAmD,CAAC;IACtE;;IAEA;IACA,MAAMyD,UAAU,GAAG,GAAGnH,iBAAiB,IAAIgB,MAAM,EAAE;IACnD,MAAMzB,WAAW,CAACyD,eAAe,CAACmE,UAAU,CAAC;;IAE7C;IACA,OAAO;MACL,GAAGpG,IAAI;MACP2F,YAAY,EAAEW,SAAS;MACvBrF,YAAY,EAAE;QACZ,GAAGjB,IAAI,CAACiB,YAAY;QACpBK,0BAA0B,EAAE,KAAK;QACjCC,mBAAmB,EAAE;MACvB,CAAC;MACDC,SAAS,EAAE,IAAIhC,IAAI,CAAC,CAAC,CAACgB,WAAW,CAAC;IACpC,CAAC;EACH;AACF","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":[]}
@@ -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,8 @@
1
+ /**
2
+ * TOSS Solana Program Integration Tests (Simplified)
3
+ *
4
+ * Tests for the toss-intent-processor program
5
+ * Gap #5: Onchain Intent Verification
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=solana-program-simple.test.d.ts.map
@@ -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
- export declare function stopScan(): void;
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;AAQ7C,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,QA0C9D;AAKD,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,iBAuBjD;AAED,wBAAsB,eAAe,kBASpC;AAGD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,iBAcrB;AAGD,wBAAgB,QAAQ,SAEvB"}
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"}