@shadow-corp/nearconnect 1.0.0
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 +546 -0
- package/build/InjectedWallet.d.ts +22 -0
- package/build/InjectedWallet.js +58 -0
- package/build/InjectedWallet.js.map +1 -0
- package/build/NearConnector.d.ts +151 -0
- package/build/NearConnector.js +536 -0
- package/build/NearConnector.js.map +1 -0
- package/build/ParentFrameWallet.d.ts +22 -0
- package/build/ParentFrameWallet.js +66 -0
- package/build/ParentFrameWallet.js.map +1 -0
- package/build/SandboxedWallet/code.d.ts +7 -0
- package/build/SandboxedWallet/code.js +324 -0
- package/build/SandboxedWallet/code.js.map +1 -0
- package/build/SandboxedWallet/executor.d.ts +23 -0
- package/build/SandboxedWallet/executor.js +338 -0
- package/build/SandboxedWallet/executor.js.map +1 -0
- package/build/SandboxedWallet/iframe.d.ts +18 -0
- package/build/SandboxedWallet/iframe.js +78 -0
- package/build/SandboxedWallet/iframe.js.map +1 -0
- package/build/SandboxedWallet/index.d.ts +24 -0
- package/build/SandboxedWallet/index.js +54 -0
- package/build/SandboxedWallet/index.js.map +1 -0
- package/build/actions/index.d.ts +3 -0
- package/build/actions/index.js +105 -0
- package/build/actions/index.js.map +1 -0
- package/build/actions/types.d.ts +76 -0
- package/build/actions/types.js +3 -0
- package/build/actions/types.js.map +1 -0
- package/build/connection/health.d.ts +213 -0
- package/build/connection/health.js +391 -0
- package/build/connection/health.js.map +1 -0
- package/build/connection/index.d.ts +4 -0
- package/build/connection/index.js +48 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/reconnect.d.ts +261 -0
- package/build/connection/reconnect.js +454 -0
- package/build/connection/reconnect.js.map +1 -0
- package/build/connection/retry.d.ts +187 -0
- package/build/connection/retry.js +427 -0
- package/build/connection/retry.js.map +1 -0
- package/build/connection/state.d.ts +222 -0
- package/build/connection/state.js +431 -0
- package/build/connection/state.js.map +1 -0
- package/build/errors.d.ts +177 -0
- package/build/errors.js +546 -0
- package/build/errors.js.map +1 -0
- package/build/hardware/errors.d.ts +36 -0
- package/build/hardware/errors.js +127 -0
- package/build/hardware/errors.js.map +1 -0
- package/build/hardware/index.d.ts +7 -0
- package/build/hardware/index.js +39 -0
- package/build/hardware/index.js.map +1 -0
- package/build/hardware/near-app.d.ts +95 -0
- package/build/hardware/near-app.js +291 -0
- package/build/hardware/near-app.js.map +1 -0
- package/build/hardware/transport.d.ts +94 -0
- package/build/hardware/transport.js +267 -0
- package/build/hardware/transport.js.map +1 -0
- package/build/hardware/types.d.ts +98 -0
- package/build/hardware/types.js +72 -0
- package/build/hardware/types.js.map +1 -0
- package/build/helpers/analytics.d.ts +191 -0
- package/build/helpers/analytics.js +304 -0
- package/build/helpers/analytics.js.map +1 -0
- package/build/helpers/base58.d.ts +6 -0
- package/build/helpers/base58.js +47 -0
- package/build/helpers/base58.js.map +1 -0
- package/build/helpers/events.d.ts +42 -0
- package/build/helpers/events.js +68 -0
- package/build/helpers/events.js.map +1 -0
- package/build/helpers/html.d.ts +8 -0
- package/build/helpers/html.js +30 -0
- package/build/helpers/html.js.map +1 -0
- package/build/helpers/indexdb.d.ts +14 -0
- package/build/helpers/indexdb.js +166 -0
- package/build/helpers/indexdb.js.map +1 -0
- package/build/helpers/manifest.d.ts +147 -0
- package/build/helpers/manifest.js +329 -0
- package/build/helpers/manifest.js.map +1 -0
- package/build/helpers/queue.d.ts +11 -0
- package/build/helpers/queue.js +48 -0
- package/build/helpers/queue.js.map +1 -0
- package/build/helpers/session.d.ts +119 -0
- package/build/helpers/session.js +289 -0
- package/build/helpers/session.js.map +1 -0
- package/build/helpers/simulation.d.ts +128 -0
- package/build/helpers/simulation.js +441 -0
- package/build/helpers/simulation.js.map +1 -0
- package/build/helpers/storage.d.ts +58 -0
- package/build/helpers/storage.js +190 -0
- package/build/helpers/storage.js.map +1 -0
- package/build/helpers/trust.d.ts +157 -0
- package/build/helpers/trust.js +340 -0
- package/build/helpers/trust.js.map +1 -0
- package/build/helpers/url.d.ts +1 -0
- package/build/helpers/url.js +13 -0
- package/build/helpers/url.js.map +1 -0
- package/build/helpers/uuid.d.ts +1 -0
- package/build/helpers/uuid.js +14 -0
- package/build/helpers/uuid.js.map +1 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +167 -0
- package/build/index.js.map +1 -0
- package/build/popups/IframeWalletPopup.d.ts +16 -0
- package/build/popups/IframeWalletPopup.js +38 -0
- package/build/popups/IframeWalletPopup.js.map +1 -0
- package/build/popups/NearWalletsPopup.d.ts +25 -0
- package/build/popups/NearWalletsPopup.js +153 -0
- package/build/popups/NearWalletsPopup.js.map +1 -0
- package/build/popups/Popup.d.ts +22 -0
- package/build/popups/Popup.js +94 -0
- package/build/popups/Popup.js.map +1 -0
- package/build/popups/styles.d.ts +1 -0
- package/build/popups/styles.js +257 -0
- package/build/popups/styles.js.map +1 -0
- package/build/security/audit-log.d.ts +123 -0
- package/build/security/audit-log.js +268 -0
- package/build/security/audit-log.js.map +1 -0
- package/build/security/csp.d.ts +68 -0
- package/build/security/csp.js +328 -0
- package/build/security/csp.js.map +1 -0
- package/build/security/index.d.ts +10 -0
- package/build/security/index.js +42 -0
- package/build/security/index.js.map +1 -0
- package/build/security/origin-guard.d.ts +90 -0
- package/build/security/origin-guard.js +244 -0
- package/build/security/origin-guard.js.map +1 -0
- package/build/security/rate-limiter.d.ts +84 -0
- package/build/security/rate-limiter.js +212 -0
- package/build/security/rate-limiter.js.map +1 -0
- package/build/security/secure-storage.d.ts +77 -0
- package/build/security/secure-storage.js +242 -0
- package/build/security/secure-storage.js.map +1 -0
- package/build/security/transaction-guard.d.ts +71 -0
- package/build/security/transaction-guard.js +239 -0
- package/build/security/transaction-guard.js.map +1 -0
- package/build/types.d.ts +508 -0
- package/build/types.js +3 -0
- package/build/types.js.map +1 -0
- package/build/ui/AccountSwitcherModal.d.ts +53 -0
- package/build/ui/AccountSwitcherModal.js +239 -0
- package/build/ui/AccountSwitcherModal.js.map +1 -0
- package/build/ui/Modal.d.ts +84 -0
- package/build/ui/Modal.js +278 -0
- package/build/ui/Modal.js.map +1 -0
- package/build/ui/TransactionModal.d.ts +84 -0
- package/build/ui/TransactionModal.js +406 -0
- package/build/ui/TransactionModal.js.map +1 -0
- package/build/ui/WalletSelectorModal.d.ts +97 -0
- package/build/ui/WalletSelectorModal.js +481 -0
- package/build/ui/WalletSelectorModal.js.map +1 -0
- package/build/ui/icons.d.ts +19 -0
- package/build/ui/icons.js +65 -0
- package/build/ui/icons.js.map +1 -0
- package/build/ui/index.d.ts +10 -0
- package/build/ui/index.js +31 -0
- package/build/ui/index.js.map +1 -0
- package/build/ui/styles.d.ts +5 -0
- package/build/ui/styles.js +973 -0
- package/build/ui/styles.js.map +1 -0
- package/build/ui/theme.d.ts +133 -0
- package/build/ui/theme.js +204 -0
- package/build/ui/theme.js.map +1 -0
- package/build/wallets/external/index.d.ts +4 -0
- package/build/wallets/external/index.js +9 -0
- package/build/wallets/external/index.js.map +1 -0
- package/build/wallets/external/manager.d.ts +152 -0
- package/build/wallets/external/manager.js +586 -0
- package/build/wallets/external/manager.js.map +1 -0
- package/build/wallets/privileged/index.d.ts +5 -0
- package/build/wallets/privileged/index.js +12 -0
- package/build/wallets/privileged/index.js.map +1 -0
- package/build/wallets/privileged/ledger.d.ts +132 -0
- package/build/wallets/privileged/ledger.js +563 -0
- package/build/wallets/privileged/ledger.js.map +1 -0
- package/build/wallets/privileged/manager.d.ts +54 -0
- package/build/wallets/privileged/manager.js +174 -0
- package/build/wallets/privileged/manager.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.js","sourceRoot":"","sources":["../../src/security/csp.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkFH,kCAIC;AAKD,8CAEC;AAKD,4BAYC;AAKD,0CAgBC;AAiBD,oDAoJC;AAKD,gDA+CC;AAkBD,kDAuBC;AAnXD;;GAEG;AACU,QAAA,sBAAsB,GAAkB;IACnD,mBAAmB;IACnB,aAAa,EAAE,CAAC,QAAQ,CAAC;IAEzB,4CAA4C;IAC5C,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,sEAAsE;IACtE,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAE1C,uDAAuD;IACvD,aAAa,EAAE;QACb,QAAQ;QACR,8BAA8B;QAC9B,8BAA8B;QAC9B,uCAAuC;QACvC,uCAAuC;QACvC,+BAA+B;QAC/B,kCAAkC;QAClC,uCAAuC;QACvC,uCAAuC;KACxC;IAED,0BAA0B;IAC1B,WAAW,EAAE;QACX,QAAQ;QACR,kCAAkC;QAClC,sBAAsB;QACtB,8BAA8B;QAC9B,iCAAiC;QACjC,2BAA2B;QAC3B,oBAAoB;QACpB,4BAA4B;QAC5B,6BAA6B;KAC9B;IAED,SAAS;IACT,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;IAExC,QAAQ;IACR,UAAU,EAAE,CAAC,QAAQ,CAAC;IAEtB,gCAAgC;IAChC,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,uBAAuB;IACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;IAEtB,mBAAmB;IACnB,aAAa,EAAE,CAAC,QAAQ,CAAC;IAEzB,uBAAuB;IACvB,iBAAiB,EAAE,CAAC,QAAQ,CAAC;IAE7B,cAAc;IACd,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,SAAgB,WAAW,CAAC,aAA4B,8BAAsB;IAC5E,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;SACpD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,WAAW,CAAC,8BAAsB,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,MAA8B;IACrD,MAAM,MAAM,GAAkB,EAAE,GAAG,8BAAsB,EAAE,CAAC;IAE5D,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,GAA0B,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG;YAClB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,UAA0B;IACxD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAE5C,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEpC,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,4CAA4C,CAAC,CAAC;IACtF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,uBAAuB;IACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS,GAAG,yBAAyB,CAAC;IAC3C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAcD;;GAEG;AACH,SAAgB,oBAAoB;IAClC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,4BAA4B;IAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC;gBACN,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM,CAAC,eAAe;QAC9B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,MAAM,CAAC,eAAe;YAC7B,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,+BAA+B;QACnC,cAAc,EAAE,MAAM,CAAC,eAAe;YACpC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,kDAAkD;KACvD,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,CAAC,QAAQ;QACjB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,QAAQ;YACf,CAAC,CAAC,6DAA6D;YAC/D,CAAC,CAAC,gCAAgC;QACpC,cAAc,EAAE,QAAQ;YACtB,CAAC,CAAC,yEAAyE;YAC3E,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;YAChB,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,8BAA8B;QAClC,cAAc,EAAE,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,yDAAyD;KAC9D,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,4BAA4B;QAChC,cAAc,EAAE,UAAU;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,4DAA4D;KACjE,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,SAAS;YAChB,CAAC,CAAC,4CAA4C;YAC9C,CAAC,CAAC,uCAAuC;QAC3C,cAAc,EAAE,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,sDAAsD;KAC3D,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,mBAAmB;QAC3B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,mBAAmB;YAC1B,CAAC,CAAC,6CAA6C;YAC/C,CAAC,CAAC,2BAA2B;QAC/B,cAAc,EAAE,mBAAmB;YACjC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,yDAAyD;KAC9D,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,CAAC,OAAO;QAChB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,qDAAqD;YACvD,CAAC,CAAC,+BAA+B;QACnC,cAAc,EAAE,OAAO;YACrB,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,KAAK,GAAG,eAAe,IAAI,SAAS,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAK;YACZ,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,8BAA8B;KACnC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,cAAc,GAAG,aAAa,IAAI,SAAS,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,cAAc;QACtB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,cAAc;YACrB,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,+BAA+B;KACpC,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC1D,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,aAAa,CAAC;IACjF,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,iBAAiB;YACxB,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,wCAAwC;QAC5C,cAAc,EAAE,iBAAiB;YAC/B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,sEAAsE;KAC3E,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAwB;IAQzD,MAAM,OAAO,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACpF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAE7B,2BAA2B;IAC3B,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,QAAQ,IAAI,MAAM,CAAC;QACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,WAAW,IAAI,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE9E,6CAA6C;IAC7C,IAAI,KAAkC,CAAC;IACvC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,mCAAmC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC3B,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Module
|
|
3
|
+
* Comprehensive security layers for wallet operations
|
|
4
|
+
*/
|
|
5
|
+
export { TransactionGuard, createDefaultTransactionGuard, type Transaction as SecurityTransaction, type TransactionLimits, type TransactionRisk, } from './transaction-guard';
|
|
6
|
+
export { OriginGuard, createSecureMessageHandler, type TrustedOrigins, type OriginGuardConfig, } from './origin-guard';
|
|
7
|
+
export { SecureStorage, createSecureStorage, type SecureStorageOptions, } from './secure-storage';
|
|
8
|
+
export { RateLimiter, connectLimiter, signLimiter, rpcLimiter, rateLimit, withRateLimit, type RateLimitConfig, type RateLimitResult, } from './rate-limiter';
|
|
9
|
+
export { AuditLog, createAuditLog, type AuditEvent, type AuditEventType, type AuditLogConfig, } from './audit-log';
|
|
10
|
+
export { generateCSP, getRecommendedCSP, mergeCSP, applyCSPMetaTag, runSecurityChecklist, getSecuritySummary, verifySecureContext, DEFAULT_CSP_DIRECTIVES, type CSPDirectives, type SecurityCheck, } from './csp';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Security Module
|
|
4
|
+
* Comprehensive security layers for wallet operations
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DEFAULT_CSP_DIRECTIVES = exports.verifySecureContext = exports.getSecuritySummary = exports.runSecurityChecklist = exports.applyCSPMetaTag = exports.mergeCSP = exports.getRecommendedCSP = exports.generateCSP = exports.createAuditLog = exports.AuditLog = exports.withRateLimit = exports.rateLimit = exports.rpcLimiter = exports.signLimiter = exports.connectLimiter = exports.RateLimiter = exports.createSecureStorage = exports.SecureStorage = exports.createSecureMessageHandler = exports.OriginGuard = exports.createDefaultTransactionGuard = exports.TransactionGuard = void 0;
|
|
8
|
+
// Transaction verification
|
|
9
|
+
var transaction_guard_1 = require("./transaction-guard");
|
|
10
|
+
Object.defineProperty(exports, "TransactionGuard", { enumerable: true, get: function () { return transaction_guard_1.TransactionGuard; } });
|
|
11
|
+
Object.defineProperty(exports, "createDefaultTransactionGuard", { enumerable: true, get: function () { return transaction_guard_1.createDefaultTransactionGuard; } });
|
|
12
|
+
// Origin verification
|
|
13
|
+
var origin_guard_1 = require("./origin-guard");
|
|
14
|
+
Object.defineProperty(exports, "OriginGuard", { enumerable: true, get: function () { return origin_guard_1.OriginGuard; } });
|
|
15
|
+
Object.defineProperty(exports, "createSecureMessageHandler", { enumerable: true, get: function () { return origin_guard_1.createSecureMessageHandler; } });
|
|
16
|
+
// Secure storage
|
|
17
|
+
var secure_storage_1 = require("./secure-storage");
|
|
18
|
+
Object.defineProperty(exports, "SecureStorage", { enumerable: true, get: function () { return secure_storage_1.SecureStorage; } });
|
|
19
|
+
Object.defineProperty(exports, "createSecureStorage", { enumerable: true, get: function () { return secure_storage_1.createSecureStorage; } });
|
|
20
|
+
// Rate limiting
|
|
21
|
+
var rate_limiter_1 = require("./rate-limiter");
|
|
22
|
+
Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return rate_limiter_1.RateLimiter; } });
|
|
23
|
+
Object.defineProperty(exports, "connectLimiter", { enumerable: true, get: function () { return rate_limiter_1.connectLimiter; } });
|
|
24
|
+
Object.defineProperty(exports, "signLimiter", { enumerable: true, get: function () { return rate_limiter_1.signLimiter; } });
|
|
25
|
+
Object.defineProperty(exports, "rpcLimiter", { enumerable: true, get: function () { return rate_limiter_1.rpcLimiter; } });
|
|
26
|
+
Object.defineProperty(exports, "rateLimit", { enumerable: true, get: function () { return rate_limiter_1.rateLimit; } });
|
|
27
|
+
Object.defineProperty(exports, "withRateLimit", { enumerable: true, get: function () { return rate_limiter_1.withRateLimit; } });
|
|
28
|
+
// Audit logging
|
|
29
|
+
var audit_log_1 = require("./audit-log");
|
|
30
|
+
Object.defineProperty(exports, "AuditLog", { enumerable: true, get: function () { return audit_log_1.AuditLog; } });
|
|
31
|
+
Object.defineProperty(exports, "createAuditLog", { enumerable: true, get: function () { return audit_log_1.createAuditLog; } });
|
|
32
|
+
// CSP and security checklist
|
|
33
|
+
var csp_1 = require("./csp");
|
|
34
|
+
Object.defineProperty(exports, "generateCSP", { enumerable: true, get: function () { return csp_1.generateCSP; } });
|
|
35
|
+
Object.defineProperty(exports, "getRecommendedCSP", { enumerable: true, get: function () { return csp_1.getRecommendedCSP; } });
|
|
36
|
+
Object.defineProperty(exports, "mergeCSP", { enumerable: true, get: function () { return csp_1.mergeCSP; } });
|
|
37
|
+
Object.defineProperty(exports, "applyCSPMetaTag", { enumerable: true, get: function () { return csp_1.applyCSPMetaTag; } });
|
|
38
|
+
Object.defineProperty(exports, "runSecurityChecklist", { enumerable: true, get: function () { return csp_1.runSecurityChecklist; } });
|
|
39
|
+
Object.defineProperty(exports, "getSecuritySummary", { enumerable: true, get: function () { return csp_1.getSecuritySummary; } });
|
|
40
|
+
Object.defineProperty(exports, "verifySecureContext", { enumerable: true, get: function () { return csp_1.verifySecureContext; } });
|
|
41
|
+
Object.defineProperty(exports, "DEFAULT_CSP_DIRECTIVES", { enumerable: true, get: function () { return csp_1.DEFAULT_CSP_DIRECTIVES; } });
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2BAA2B;AAC3B,yDAM6B;AAL3B,qHAAA,gBAAgB,OAAA;AAChB,kIAAA,6BAA6B,OAAA;AAM/B,sBAAsB;AACtB,+CAKwB;AAJtB,2GAAA,WAAW,OAAA;AACX,0HAAA,0BAA0B,OAAA;AAK5B,iBAAiB;AACjB,mDAI0B;AAHxB,+GAAA,aAAa,OAAA;AACb,qHAAA,mBAAmB,OAAA;AAIrB,gBAAgB;AAChB,+CASwB;AARtB,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,2GAAA,WAAW,OAAA;AACX,0GAAA,UAAU,OAAA;AACV,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AAKf,gBAAgB;AAChB,yCAMqB;AALnB,qGAAA,QAAQ,OAAA;AACR,2GAAA,cAAc,OAAA;AAMhB,6BAA6B;AAC7B,6BAWe;AAVb,kGAAA,WAAW,OAAA;AACX,wGAAA,iBAAiB,OAAA;AACjB,+FAAA,QAAQ,OAAA;AACR,sGAAA,eAAe,OAAA;AACf,2GAAA,oBAAoB,OAAA;AACpB,yGAAA,kBAAkB,OAAA;AAClB,0GAAA,mBAAmB,OAAA;AACnB,6GAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Origin & Message Verification Layer
|
|
3
|
+
* Protects against MITM attacks and phishing callbacks
|
|
4
|
+
*/
|
|
5
|
+
export interface TrustedOrigins {
|
|
6
|
+
/** Mapping of walletId to allowed origins */
|
|
7
|
+
walletOrigins: Map<string, string[]>;
|
|
8
|
+
/** Your app's allowed origins */
|
|
9
|
+
appOrigins: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface OriginGuardConfig {
|
|
12
|
+
/** Additional app origins to trust */
|
|
13
|
+
appOrigins?: string[];
|
|
14
|
+
/** Additional wallet origins */
|
|
15
|
+
walletOrigins?: Record<string, string[]>;
|
|
16
|
+
/** Allow HTTP in development */
|
|
17
|
+
allowInsecureInDev?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class OriginGuard {
|
|
20
|
+
private trusted;
|
|
21
|
+
private allowInsecureInDev;
|
|
22
|
+
private sessionSecret;
|
|
23
|
+
constructor(config?: OriginGuardConfig);
|
|
24
|
+
/**
|
|
25
|
+
* Add a trusted wallet origin
|
|
26
|
+
*/
|
|
27
|
+
addWalletOrigin(walletId: string, origin: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Add a trusted app origin
|
|
30
|
+
*/
|
|
31
|
+
addAppOrigin(origin: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Verify postMessage origin is from expected wallet
|
|
34
|
+
*/
|
|
35
|
+
verifyMessageOrigin(event: MessageEvent, expectedWalletId?: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Verify deep link callback URL is safe
|
|
38
|
+
*/
|
|
39
|
+
verifyCallbackUrl(url: string): {
|
|
40
|
+
valid: boolean;
|
|
41
|
+
reason?: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Generate secure callback URL with CSRF state token
|
|
45
|
+
*/
|
|
46
|
+
generateSecureCallback(baseUrl: string, requestId: string): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Verify callback state token matches expected
|
|
49
|
+
*/
|
|
50
|
+
verifyState(state: string, requestId: string): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Generate HMAC-based state token
|
|
53
|
+
*/
|
|
54
|
+
private generateState;
|
|
55
|
+
/**
|
|
56
|
+
* Get or create session-specific secret
|
|
57
|
+
*/
|
|
58
|
+
private getSessionSecret;
|
|
59
|
+
/**
|
|
60
|
+
* Compute HMAC-SHA256
|
|
61
|
+
*/
|
|
62
|
+
private hmacSha256;
|
|
63
|
+
/**
|
|
64
|
+
* Timing-safe string comparison to prevent timing attacks
|
|
65
|
+
*/
|
|
66
|
+
private timingSafeEqual;
|
|
67
|
+
/**
|
|
68
|
+
* Check if running in development environment
|
|
69
|
+
*/
|
|
70
|
+
private isDevelopment;
|
|
71
|
+
/**
|
|
72
|
+
* Validate that current context is secure
|
|
73
|
+
*/
|
|
74
|
+
verifySecureContext(): {
|
|
75
|
+
secure: boolean;
|
|
76
|
+
warnings: string[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Get list of trusted origins for a wallet
|
|
80
|
+
*/
|
|
81
|
+
getTrustedOrigins(walletId: string): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Check if an origin is trusted for any wallet
|
|
84
|
+
*/
|
|
85
|
+
isOriginTrusted(origin: string): boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a message handler that validates origins
|
|
89
|
+
*/
|
|
90
|
+
export declare function createSecureMessageHandler<T>(guard: OriginGuard, expectedWalletId: string | undefined, handler: (data: T) => void): (event: MessageEvent) => void;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Origin & Message Verification Layer
|
|
4
|
+
* Protects against MITM attacks and phishing callbacks
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.OriginGuard = void 0;
|
|
8
|
+
exports.createSecureMessageHandler = createSecureMessageHandler;
|
|
9
|
+
/** Known wallet origins */
|
|
10
|
+
const DEFAULT_WALLET_ORIGINS = {
|
|
11
|
+
'hot-wallet': ['https://wallet.nicklatkovich.dev', 'https://hot-labs.org'],
|
|
12
|
+
'mynearwallet': ['https://app.mynearwallet.com'],
|
|
13
|
+
'meteor': ['https://wallet.meteorwallet.app'],
|
|
14
|
+
'here-wallet': ['https://my.herewallet.app'],
|
|
15
|
+
'sender': ['https://sender.org'],
|
|
16
|
+
'nightly': ['https://wallet.nightly.app'],
|
|
17
|
+
'mintbase': ['https://wallet.mintbase.xyz'],
|
|
18
|
+
};
|
|
19
|
+
class OriginGuard {
|
|
20
|
+
trusted;
|
|
21
|
+
allowInsecureInDev;
|
|
22
|
+
sessionSecret = null;
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
// Initialize wallet origins from defaults + custom
|
|
25
|
+
const walletOrigins = new Map();
|
|
26
|
+
// Add default wallet origins
|
|
27
|
+
for (const [walletId, origins] of Object.entries(DEFAULT_WALLET_ORIGINS)) {
|
|
28
|
+
walletOrigins.set(walletId, origins);
|
|
29
|
+
}
|
|
30
|
+
// Add custom wallet origins
|
|
31
|
+
if (config.walletOrigins) {
|
|
32
|
+
for (const [walletId, origins] of Object.entries(config.walletOrigins)) {
|
|
33
|
+
const existing = walletOrigins.get(walletId) || [];
|
|
34
|
+
walletOrigins.set(walletId, [...existing, ...origins]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Determine app origins
|
|
38
|
+
const appOrigins = config.appOrigins || [];
|
|
39
|
+
if (typeof window !== 'undefined') {
|
|
40
|
+
appOrigins.push(window.location.origin);
|
|
41
|
+
}
|
|
42
|
+
this.trusted = { walletOrigins, appOrigins };
|
|
43
|
+
this.allowInsecureInDev = config.allowInsecureInDev ?? true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add a trusted wallet origin
|
|
47
|
+
*/
|
|
48
|
+
addWalletOrigin(walletId, origin) {
|
|
49
|
+
const existing = this.trusted.walletOrigins.get(walletId) || [];
|
|
50
|
+
if (!existing.includes(origin)) {
|
|
51
|
+
this.trusted.walletOrigins.set(walletId, [...existing, origin]);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Add a trusted app origin
|
|
56
|
+
*/
|
|
57
|
+
addAppOrigin(origin) {
|
|
58
|
+
if (!this.trusted.appOrigins.includes(origin)) {
|
|
59
|
+
this.trusted.appOrigins.push(origin);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Verify postMessage origin is from expected wallet
|
|
64
|
+
*/
|
|
65
|
+
verifyMessageOrigin(event, expectedWalletId) {
|
|
66
|
+
const origin = event.origin;
|
|
67
|
+
// Check if from known wallet
|
|
68
|
+
if (expectedWalletId) {
|
|
69
|
+
const allowed = this.trusted.walletOrigins.get(expectedWalletId);
|
|
70
|
+
if (allowed && allowed.includes(origin)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Check all wallet origins if no specific wallet expected
|
|
75
|
+
if (!expectedWalletId) {
|
|
76
|
+
for (const origins of this.trusted.walletOrigins.values()) {
|
|
77
|
+
if (origins.includes(origin)) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check if from trusted app origin
|
|
83
|
+
if (this.trusted.appOrigins.includes(origin)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
console.warn(`[Security] Rejected message from untrusted origin: ${origin}`);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Verify deep link callback URL is safe
|
|
91
|
+
*/
|
|
92
|
+
verifyCallbackUrl(url) {
|
|
93
|
+
try {
|
|
94
|
+
const parsed = new URL(url);
|
|
95
|
+
// Must be HTTPS in production
|
|
96
|
+
if (parsed.protocol !== 'https:') {
|
|
97
|
+
if (this.isDevelopment() && this.allowInsecureInDev) {
|
|
98
|
+
// Allow HTTP in development
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return { valid: false, reason: 'Callback URL must use HTTPS' };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Must match app origin
|
|
105
|
+
if (!this.trusted.appOrigins.includes(parsed.origin)) {
|
|
106
|
+
return { valid: false, reason: `Callback origin ${parsed.origin} is not trusted` };
|
|
107
|
+
}
|
|
108
|
+
return { valid: true };
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return { valid: false, reason: 'Invalid callback URL' };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate secure callback URL with CSRF state token
|
|
116
|
+
*/
|
|
117
|
+
async generateSecureCallback(baseUrl, requestId) {
|
|
118
|
+
const url = new URL(baseUrl);
|
|
119
|
+
const state = await this.generateState(requestId);
|
|
120
|
+
url.searchParams.set('state', state);
|
|
121
|
+
url.searchParams.set('requestId', requestId);
|
|
122
|
+
return url.toString();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Verify callback state token matches expected
|
|
126
|
+
*/
|
|
127
|
+
async verifyState(state, requestId) {
|
|
128
|
+
const expected = await this.generateState(requestId);
|
|
129
|
+
return this.timingSafeEqual(state, expected);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Generate HMAC-based state token
|
|
133
|
+
*/
|
|
134
|
+
async generateState(requestId) {
|
|
135
|
+
const secret = this.getSessionSecret();
|
|
136
|
+
return this.hmacSha256(requestId, secret);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get or create session-specific secret
|
|
140
|
+
*/
|
|
141
|
+
getSessionSecret() {
|
|
142
|
+
if (this.sessionSecret) {
|
|
143
|
+
return this.sessionSecret;
|
|
144
|
+
}
|
|
145
|
+
if (typeof sessionStorage !== 'undefined') {
|
|
146
|
+
let secret = sessionStorage.getItem('near-connect:origin-secret');
|
|
147
|
+
if (!secret) {
|
|
148
|
+
secret = crypto.randomUUID();
|
|
149
|
+
sessionStorage.setItem('near-connect:origin-secret', secret);
|
|
150
|
+
}
|
|
151
|
+
this.sessionSecret = secret;
|
|
152
|
+
return secret;
|
|
153
|
+
}
|
|
154
|
+
// Fallback for non-browser environments
|
|
155
|
+
this.sessionSecret = crypto.randomUUID();
|
|
156
|
+
return this.sessionSecret;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Compute HMAC-SHA256
|
|
160
|
+
*/
|
|
161
|
+
async hmacSha256(message, secret) {
|
|
162
|
+
const encoder = new TextEncoder();
|
|
163
|
+
const key = await crypto.subtle.importKey('raw', encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
164
|
+
const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message));
|
|
165
|
+
return btoa(String.fromCharCode(...new Uint8Array(signature)));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Timing-safe string comparison to prevent timing attacks
|
|
169
|
+
*/
|
|
170
|
+
timingSafeEqual(a, b) {
|
|
171
|
+
if (a.length !== b.length)
|
|
172
|
+
return false;
|
|
173
|
+
let result = 0;
|
|
174
|
+
for (let i = 0; i < a.length; i++) {
|
|
175
|
+
result |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
176
|
+
}
|
|
177
|
+
return result === 0;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if running in development environment
|
|
181
|
+
*/
|
|
182
|
+
isDevelopment() {
|
|
183
|
+
if (typeof window === 'undefined')
|
|
184
|
+
return false;
|
|
185
|
+
return (window.location.hostname === 'localhost' ||
|
|
186
|
+
window.location.hostname === '127.0.0.1' ||
|
|
187
|
+
window.location.hostname.endsWith('.local'));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Validate that current context is secure
|
|
191
|
+
*/
|
|
192
|
+
verifySecureContext() {
|
|
193
|
+
const warnings = [];
|
|
194
|
+
if (typeof window === 'undefined') {
|
|
195
|
+
return { secure: true, warnings: [] };
|
|
196
|
+
}
|
|
197
|
+
// Check secure context
|
|
198
|
+
if (!window.isSecureContext) {
|
|
199
|
+
warnings.push('Page is not in a secure context (HTTPS required for production)');
|
|
200
|
+
}
|
|
201
|
+
// Check if embedded in iframe (potential clickjacking)
|
|
202
|
+
if (window.self !== window.top) {
|
|
203
|
+
warnings.push('Page is embedded in an iframe - potential clickjacking risk');
|
|
204
|
+
}
|
|
205
|
+
// Check for cross-origin isolation
|
|
206
|
+
if (!crossOriginIsolated) {
|
|
207
|
+
// This is informational, not critical
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
secure: warnings.length === 0,
|
|
211
|
+
warnings,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get list of trusted origins for a wallet
|
|
216
|
+
*/
|
|
217
|
+
getTrustedOrigins(walletId) {
|
|
218
|
+
return this.trusted.walletOrigins.get(walletId) || [];
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check if an origin is trusted for any wallet
|
|
222
|
+
*/
|
|
223
|
+
isOriginTrusted(origin) {
|
|
224
|
+
for (const origins of this.trusted.walletOrigins.values()) {
|
|
225
|
+
if (origins.includes(origin))
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
return this.trusted.appOrigins.includes(origin);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.OriginGuard = OriginGuard;
|
|
232
|
+
/**
|
|
233
|
+
* Create a message handler that validates origins
|
|
234
|
+
*/
|
|
235
|
+
function createSecureMessageHandler(guard, expectedWalletId, handler) {
|
|
236
|
+
return (event) => {
|
|
237
|
+
if (!guard.verifyMessageOrigin(event, expectedWalletId)) {
|
|
238
|
+
console.warn('[Security] Ignoring message from untrusted origin');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
handler(event.data);
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=origin-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin-guard.js","sourceRoot":"","sources":["../../src/security/origin-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiting & Anti-Abuse Layer
|
|
3
|
+
* Prevents brute force attacks and rapid-fire abuse
|
|
4
|
+
*/
|
|
5
|
+
export interface RateLimitConfig {
|
|
6
|
+
/** Maximum requests allowed in the time window */
|
|
7
|
+
maxRequests: number;
|
|
8
|
+
/** Time window in milliseconds */
|
|
9
|
+
windowMs: number;
|
|
10
|
+
/** Duration to block after limit exceeded (optional) */
|
|
11
|
+
blockDurationMs?: number;
|
|
12
|
+
/** Whether to use sliding window (vs fixed window) */
|
|
13
|
+
slidingWindow?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RateLimitResult {
|
|
16
|
+
/** Whether the request is allowed */
|
|
17
|
+
allowed: boolean;
|
|
18
|
+
/** Seconds until retry is allowed (if blocked) */
|
|
19
|
+
retryAfter?: number;
|
|
20
|
+
/** Number of remaining requests in current window */
|
|
21
|
+
remaining: number;
|
|
22
|
+
/** Time until window resets (ms) */
|
|
23
|
+
resetIn: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class RateLimiter {
|
|
26
|
+
private entries;
|
|
27
|
+
private config;
|
|
28
|
+
constructor(config?: Partial<RateLimitConfig>);
|
|
29
|
+
/**
|
|
30
|
+
* Check if an action is allowed and record the request
|
|
31
|
+
*/
|
|
32
|
+
check(action: string): RateLimitResult;
|
|
33
|
+
/**
|
|
34
|
+
* Check without recording (peek)
|
|
35
|
+
*/
|
|
36
|
+
peek(action: string): RateLimitResult;
|
|
37
|
+
/**
|
|
38
|
+
* Reset limits for an action
|
|
39
|
+
*/
|
|
40
|
+
reset(action: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Reset all limits
|
|
43
|
+
*/
|
|
44
|
+
resetAll(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Manually block an action
|
|
47
|
+
*/
|
|
48
|
+
block(action: string, durationMs?: number): void;
|
|
49
|
+
/**
|
|
50
|
+
* Unblock an action
|
|
51
|
+
*/
|
|
52
|
+
unblock(action: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Get current status for all tracked actions
|
|
55
|
+
*/
|
|
56
|
+
getStatus(): Map<string, RateLimitResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Cleanup expired entries
|
|
59
|
+
*/
|
|
60
|
+
cleanup(): void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Pre-configured rate limiter for wallet connections
|
|
64
|
+
* Allows 5 connection attempts per minute, blocks for 2 minutes after
|
|
65
|
+
*/
|
|
66
|
+
export declare const connectLimiter: RateLimiter;
|
|
67
|
+
/**
|
|
68
|
+
* Pre-configured rate limiter for transaction signing
|
|
69
|
+
* Allows 20 signs per minute, blocks for 1 minute after
|
|
70
|
+
*/
|
|
71
|
+
export declare const signLimiter: RateLimiter;
|
|
72
|
+
/**
|
|
73
|
+
* Pre-configured rate limiter for RPC calls
|
|
74
|
+
* Allows 100 calls per minute
|
|
75
|
+
*/
|
|
76
|
+
export declare const rpcLimiter: RateLimiter;
|
|
77
|
+
/**
|
|
78
|
+
* Decorator to rate limit a function
|
|
79
|
+
*/
|
|
80
|
+
export declare function rateLimit(limiter: RateLimiter, action: string): <T extends (...args: unknown[]) => Promise<unknown>>(_target: unknown, _propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
|
|
81
|
+
/**
|
|
82
|
+
* Higher-order function to wrap an async function with rate limiting
|
|
83
|
+
*/
|
|
84
|
+
export declare function withRateLimit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, limiter: RateLimiter, action: string): T;
|