{"_id":"@rytass/payments-adapter-ctbc-micro-fast-pay","_rev":"34-55ceab16588c9a4082792f75cec0f0da","name":"@rytass/payments-adapter-ctbc-micro-fast-pay","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.2":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.2","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.2","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"80e06e0d7f1e3eff00c8481a2938624327aa1390","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.2.tgz","fileCount":20,"integrity":"sha512-BZzS8mFaFLIWUNBtWlqJ7MLLe9B7xtyM+tX1zB7jTkxOlW/VN2A5T2t+iC9lSph/z6qH7LSpoXg039h41mOdog==","signatures":[{"sig":"MEYCIQDIKGP785UqFJr1za0DEDGMI4gEjZ8w05u0FkQYKX26KwIhANPQPiG6hrbNqwhjP/Eks4BZYO+rjPyosQxGb9NaGJD1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47003},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","actor":{"name":"fantasywind","type":"user","email":"fantasyatelier@gmail.com"},"email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.15.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.2_1751088521522_0.7857409356281935","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.3","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.3","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"04ff856d5eba64cd0e29e16b373e64e96c070f4b","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.3.tgz","fileCount":20,"integrity":"sha512-CQK4Qtjma4h7//nasu/kLangL4sGjAFN8qkcGv6plgyNgoz5GCAItpUhMzWJEgTZuYJOLZCmAKT1S9ny8raTjA==","signatures":[{"sig":"MEYCIQDi1XJVLACxP1MYROo63vsdtKZ0CFbmaUp0jYXal2LTfwIhAIeigVQoIbNAnhX/eL5QtNesfH2JfndifdZcN9quFVhl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48208},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","actor":{"name":"fantasywind","type":"user","email":"fantasyatelier@gmail.com"},"email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.15.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.3_1751363004108_0.2008494007819812","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.4","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.4","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"b27e14107873640f0e5d84cf7c27e9688f60ad1c","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.4.tgz","fileCount":20,"integrity":"sha512-Yv902cjAj8bwInepqSFmpWfscGBtBIUU3uMV8x1FkTmiqmIKqeiDdA2uBrv7peDXgBf5AMiYI2WQ6vtW4hD3kw==","signatures":[{"sig":"MEUCIQDVnT86RNsw+NWMrFRzyhfxSLF9IkUutCF9mEv9ju1E4gIgf+Gruqq7Ppy6lKvDhyEq0DqFASYJJgdborxoXMPciPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47653},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","actor":{"name":"fantasywind","type":"user","email":"fantasyatelier@gmail.com"},"email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.15.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.4_1751384429378_0.7646320423122079","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.5","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.5","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"763e22aa0288d7b92d52371be097832d58416986","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.5.tgz","fileCount":20,"integrity":"sha512-7iCCr3EZrh4gqBZHAO7E6EqsGFuxF8Mdewh0T7omn7OC/d6vShJnXCfAuBaTtnH8t3UtF+0g+FMn3hR3MkYkZg==","signatures":[{"sig":"MEYCIQDu3YaLSNRhGLpkNl7KuPAF+B0JBsr30MQX7d1LxzBqrAIhAOnktEguO0chxizKDRz2hN3J0hGeOqQZ5BgFdXvABhUn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47815},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","actor":{"name":"fantasywind","type":"user","email":"fantasyatelier@gmail.com"},"email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.5_1751984607250_0.456056516971693","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.6","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.6","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"575ff560bb1fb7ddea6e978fae171400a945dc8e","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.6.tgz","fileCount":20,"integrity":"sha512-nSEGpoW18tMJO7id/JFXbYnTKl5yAB1A6IXnqaxX29vddLiKItp1avR11O2OBebLWOwwr8PTDy5VNXiX9DxxXQ==","signatures":[{"sig":"MEUCIGuewjFRrx7GpjSIKxfINaxhGUhLEcMjenHit+5osdN8AiEA0LJFLOIBBAWRCD8wPBu87R1BYWJslwb/mE94eJjp6mY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49818},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","actor":{"name":"fantasywind","type":"user","email":"fantasyatelier@gmail.com"},"email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.6_1752129726998_0.6140221721128045","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.7","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.7","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"f7b8bf0ddb051cded2d94c6b9a6d2b226ff1b0b6","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.7.tgz","fileCount":20,"integrity":"sha512-rsvc5+YqHI1xwFhOFdTWUcTWpEFVVmOMz4fsfG3msJpd7vyZJvyQ/cWzSG46FLRl0bJ69EJIyAsvtfLQ0bf1LQ==","signatures":[{"sig":"MEUCIGcXDqx+b3+OogHlbeMGt1V9FI46FFyO7E0MfmSprjBZAiEA/701zq+KqtfQE75LcvvpAOqRuE2MX5Gg1z/BIJc6AqY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50072},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.7_1752202217561_0.7281450375487397","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.0.8","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.0.8","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"9fa7abac02a29249074596b61aab7042b0f4ef18","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.0.8.tgz","fileCount":20,"integrity":"sha512-22jp9XAwga1En0yTz/LLuF/gLhQJWuRsFtDu1fmGGdvmovn2Rfq1EejkYsjCvNfH6DJiFBmBotIwngNYbGJvUQ==","signatures":[{"sig":"MEUCIE1RnNNDzNORnnYGUMbNfrxspHFobyCXrXHqddPIIVXYAiEA4gEX2qLYe5K2ZOFhFDyVnN9kKU6vFKung5cdNNXqTrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50042},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","ngrok":"^4.3.3","lru-cache":"^11.0.2","@rytass/payments":"^0.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.0.8_1753351829744_0.2293239840479706","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.0","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.0","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"b3f9aa92c3ccf24f244b528159b409ac58b0071c","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.0.tgz","fileCount":19,"integrity":"sha512-WGUddTwpucXdfs5fR+yWFJ6G3VKfzD7W020BKNIJixV9xpzxRwuCd7LOPuafytYNzodQsG0UEd+FGy8ehk9FXg==","signatures":[{"sig":"MEUCID44qJrS7XhBsnAewXl6/G5tsC32gLHSYG5HWV/UFgGQAiEA/84q4CVZl4fU9xMvgyzlBRhNgXf6DG1R1Hr3NmkAZ7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68839},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","@rytass/payments":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.0_1753701457318_0.41542065865664024","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.1","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.1","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"0899b63430622a5743e7beba8977a6673c3ea7d1","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.1.tgz","fileCount":19,"integrity":"sha512-wQN64sNoOcdNur63jtYWZGBuUvmIZcHjBN39TzaH/2RRKd/xn6/7XAToeecZpNS88mhwf/Wwef79zvrwWBl9kA==","signatures":[{"sig":"MEYCIQCrzn8c+EjDFAvWjD6JQD5S/l8Jc3Ussk2HoaubY/ok1gIhAKeL+K4EiFAAN17rYIo/giLKSyLv7UWpJrWYFqRLk6UK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89690},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.1_1753712560114_0.953552839468585","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.2","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.2","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"a76b0fb9cd1674fda1f50d10bdac6870299918dd","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.2.tgz","fileCount":19,"integrity":"sha512-Mh4xNGNLiN+LC5WOpPtnUFfKAatvmMlelcMcIAUPcAJlbTDXWZ96Nh3pt+6qifBND4xFBQ6Xb6/HI8lHytG6+Q==","signatures":[{"sig":"MEUCID31BwVbuSibdK7KpAP0dBL0VyOJXICAVp4OuUdObpqNAiEA+kP2+zz+hTouNdixkH5MIwQ81MMyJcS9g/o5s+QpF+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89984},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.2_1753793274770_0.3951980350001494","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.3","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.3","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"2178399b80dd031d96d2f84505180bc3c1fbe487","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.3.tgz","fileCount":19,"integrity":"sha512-1gKatTkWpH7iW4z2hwqspMLEl3IJ5gdQ7a3fxq6PXMHcUzX6V6lkMqU3yjDRv8//noQTEfJ4VGQPnz/E3hXfNQ==","signatures":[{"sig":"MEYCIQDIEXAvvHGZf6amlVpIPKwc333q9T9VdG/vX30xaj2brAIhAJdIFnL/q1MUhkkIEWywmtWcfdB2ebhPd4N6ejNJd12/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90386},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.3_1753795074765_0.7550037458372281","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.4","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.4","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"1f7e3439bb3203a3865500a9def37fa1f2d3254c","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.4.tgz","fileCount":19,"integrity":"sha512-oRUxpPIBlrdffdOORUDdpyGCBpbTIWQETOBJ/AZDBVvmu7BYbItLjn4LVLnrm0ERahnHMBsjY8AtrEL4shakjQ==","signatures":[{"sig":"MEYCIQDZBYhyJgODzvDkXAPcdQtF0FgiYoqTsZyOxdn7TQu3cwIhAL39WPAtMzOGNn4OBXB6tCg2IB301R/Hz4sHW43y4D0F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91627},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.4_1753860226946_0.9845110044665581","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.5","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.5","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"ce00079ccd27f3a3185c8ec007c072307269b115","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.5.tgz","fileCount":19,"integrity":"sha512-6RPEO89M/RB4Cx50aBS/xVZwK3xEQHhGXNQc7wFwaJw3RmPzNcsSj5umBIWcEaoA5oEYYq2ThekCuAtFuYD9Hg==","signatures":[{"sig":"MEQCIFB5sxsFj8U4LIgAiPLZ3Fwi6YvXeGOF/DJ052lG+IaKAiB7nMppZt/Sh0bkWeNSRf6RCwx5vJiPeq3Oty8RINyd8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91643},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.5_1753871350516_0.005041132773683454","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.6","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.6","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"b2dd39b4300b2086f83ed0402ff225e7aa7b6124","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.6.tgz","fileCount":19,"integrity":"sha512-t4X8XIiZ6Q2VyESiEwk7Z6ho1Cu9/8Ncc7nrcTTzbpNXmXw6Zb8Lbj1R5wYLoMcZvwxT+F+07OI7KfUt5PsBCQ==","signatures":[{"sig":"MEUCIQCgUXdsfL+JOwNvOkBG1mEuf5qDu6P2A+9RAEdBwM5ePgIgS3Y2UEgJ/jbeFLPHsnmS7RC24MYQeRx7zbsK9JvUM3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91643},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.6_1754293965905_0.5646110974681162","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.7","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.7","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"b460acdb85455cc13906355dcb77f7c5c1d85086","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.7.tgz","fileCount":19,"integrity":"sha512-FhmRaDRrY0lVXLP0J5TtO+QGthZdDUQBYt3BsaXkHQtR9EYVgCk2/idE7U/xr7eiSKcq3y++9sWLUDZD/16wyg==","signatures":[{"sig":"MEUCIQDwY+z4U8vxKaF8C1DCSVX9zAzQpD5r35mng1ooMMBD+QIgeHJQsbA2idAFRhSTBE5wtAQExDc0eJE0FORpPRy6GLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126126},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.7_1755614351084_0.4288008898995943","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.8","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.8","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"fd11f0bd07f0e9fe561d58ef97eadec9faa6ee88","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.8.tgz","fileCount":22,"integrity":"sha512-6ETssFOcM8SgrTTIPZ5kpF6y80lLjUAJHF7edhgKtztjmcaROyJ2h9aZwkjY9yA64wSgVvOuTJjbjODi1WzOcQ==","signatures":[{"sig":"MEUCIQD/nCk1OsqY862XQZ2wCGN2Iqwo8lJyB/J9wzpg8MxQtQIgPRWGo5ZV8tP8Y2klxd51syMuImBMFFy0wAUkfqldhH4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191160},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.1.9/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.0.1","axios":"^1.7.8","debug":"^4.3.7","luxon":"^3.5.0","lru-cache":"^11.0.2","iconv-lite":"^0.6.3","@rytass/payments":"^0.2.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/luxon":"^3.4.2","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.8_1756381377853_0.022959344377310176","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.9","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.9","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"0ee5c45661aa56e27688166badfbfdd4d02a95ee","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.9.tgz","fileCount":24,"integrity":"sha512-xcIjbD6uvMWO293N5y2RkY7WQpPZ8ubbuoCaf7bPVPz4b2j6pnNe8S1qjI45lpL6wo7ENkFvkq6KhdG1pIpdBg==","signatures":[{"sig":"MEQCIFSdWBzsDJFzKwp/JOWinYUP26B7Al23rPgNGpr0W2NqAiB81h4u86ramh61pT4fZVMm/8DTTYSaO5v2Sl5VO/kdNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192237},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.11.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.9_1757429144189_0.5051426195686823","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.10","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.10","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"5d19cf6ddbfaaeeeece5e0a31e9128ee92cd7b0f","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.10.tgz","fileCount":24,"integrity":"sha512-QrAVdHzaSCoNyUxXJZSAd74z+u4IqOiyRqBYw2hZuMd0Ri2VncFEFsCHRXSkJfyoRLQxuAxY1hg2Cvk/yalEfw==","signatures":[{"sig":"MEUCIBnnyLSL+cd9WQYq3Hh58m9fashOwH8DwtmqzNViweRCAiEA6qLRLSLCzuVBkuaUGCf2iL5MmU3denUa/mgqlt/K7Ac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192238},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.11.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12","@types/lru-cache":"^7.10.10"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.10_1757585685742_0.01788056935222415","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.11","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.11","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"0c70d69514d9677a0c7bbc10d1ad7a843d7cf40a","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.11.tgz","fileCount":24,"integrity":"sha512-Ok1+z6JcZ8YPuLN5/J+shlOcao8T1T8Ek08qUVc8Nl00bZ5A7MAeI2w9uc+NEq8/vCxt9NZVW+efmL8rU9rtFg==","signatures":[{"sig":"MEYCIQDOCS7eESdOqQYLpozY+G4sbhCO2FRa3yIpt6cJndyZ9AIhAOXPucnJFRQQZoLdYSEw/KjFf6/bFwm3jSIm8FrdurYM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192201},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.11_1757942365590_0.5264236551944568","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.12","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.12","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"063a2271ba3c292ac9dae2031fe2d3375b34bedb","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.12.tgz","fileCount":25,"integrity":"sha512-12Rwc/cC1jlDwu6k9lAZBGjh3KEpQuOQwoWhvBSXuGmsBhw04E1pbVYFCp4xWk5KZSHZVn+SsmtPCo5/7I4kIg==","signatures":[{"sig":"MEYCIQCfrYnr6qcZE6RZvTnQfSJMnsxnBI5DTlU+EgM1r6zVDQIhAJTyOYgFekGs719W3u4DxBjz8MNJD9Wrx2O/xptB4GoS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285241},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.12_1758555535631_0.7787314521502664","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.13","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.13","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"6e64d853d91971ce5f4907a7736fd6da9bf8f354","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.13.tgz","fileCount":25,"integrity":"sha512-CDYVtZgyToL8K7hDlxi4V8wqWqck+gCeicrduyLpsDy8Xzx/oXqseKf3I3H4z00kLNCtFWKJv40bG3Ckf5uahw==","signatures":[{"sig":"MEYCIQCg7OgOFTZM0qIjW8/WlvRcLFAU4RpQgxiIabOgeOjq2QIhAKuIhU00Q6NEP5EqFTdKDSaphBmpEp6N7Z7ib4A1Xp6P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283785},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.6"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.13_1758624370142_0.10716173599992573","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.14","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.14","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"c1a6bc431513516dd4853a41b7201de17fb2c363","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.14.tgz","fileCount":25,"integrity":"sha512-6CiClEZGYFVUMGDPQMf5PU1UfwtQQz8P4dCt2mmlMNuZQtGYHeBvBoo/r/RP+vkyufGeOrAILeRZMe/SUvGi1Q==","signatures":[{"sig":"MEUCIH+B0FDUK3cPiBMpOtROmcyeGh6G3oEXHwxE+qepbnLYAiEAtsEaBBvYlcaReLoHQYFHEzwJM6oMCMSli5U85fUHLes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282238},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.14_1760680862136_0.7814053705945017","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.15","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.15","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"ac9dafaef4a4e5d52acd827734a00413c5b7fb24","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.15.tgz","fileCount":25,"integrity":"sha512-XYW8ik016yEzfxVYrVGYpGZp4oamPUbmPCai9+/87TmuvQnd6Y+8Y1ebYO4HZMFjGWbfKOqx8Vayj6WHSd/bFg==","signatures":[{"sig":"MEUCIQCRX+DYt6/pnQb+V4rlCqlKTBO5k/prQeIg60U3/QxgygIgBHV0kQUgnn+5itaPm4OWPd1hflGOIK8sRaxBWmAOfFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287558},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.15_1760958758685_0.42175017124263503","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.16","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.16","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"4f2aa8dd79519f5b35371bd5739ea24aaef55c5b","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.16.tgz","fileCount":25,"integrity":"sha512-rxn3lqSM5+fQEmu4bIDZeOfO2YSnSKqjGwfxJkDnfe9p/k/f/vgD8hcO9tSE8VKeLMC/R5vPU/Cc66mU3urfkQ==","signatures":[{"sig":"MEUCIHT/oQyHN2x4fu8e+0euUkeG8eAq9vbRzhpZCIJOxQ7NAiEAolWpgc0h6Hx5V7fL7XOX2R2OjtXGugwFTblioFsAF6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296926},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.16_1761898273035_0.8869795587209122","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.17","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.17","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"8d54df6494d306a207d250885db5184a3ef76b83","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.17.tgz","fileCount":25,"integrity":"sha512-5Da/Ny0GLoK4xou9gDUAEbbyU7a5x5GaueNIvMouz6yLphG/485NjwQa/0S5gjsmEjz8SzFwJS4XBN678V19ew==","signatures":[{"sig":"MEUCIDOiwZX4OgJ4fJDiw6WcGIDvH8IPknb+OIbHyNKjoWNvAiEApNOsZ9gMGfgAbbWY+Yhhoq1g1tPXkUTG9iNn1Me8mVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297476},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.17_1762774964165_0.3780730827253791","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.18","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.18","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"43dbc3ab92527396e06d308eab9cf4619b90ee70","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.18.tgz","fileCount":25,"integrity":"sha512-7s3oBw8FZ2gROgKjvxcTtKew87AOQLtEAqEXMWsf3NDMuP0NL4KygQpZNBeE3fxzk+RFEadKYfu1AW+K/RgjKA==","signatures":[{"sig":"MEUCIQCJVp2AuO3s+ZAeiXbIk3i+/yCVyiEbsCRU6zNudPYfDwIgYRcTDvNKW9z1//tsOkh96kOSKuGVpWVGG9GSyD6sWDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297779},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.6.0","debug":"^4.4.1","luxon":"^3.7.1","lru-cache":"^11.1.0","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.18_1764156142024_0.32336449387809063","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.19","keywords":["rytass","payment"],"author":"Chia Yu Pai <fantasyatelier@gmail.com>","license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.19","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"5e57e96e0cb1dad50493013e12702683d1679842","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.19.tgz","fileCount":25,"integrity":"sha512-zyhicE9l2iqpLbbKAEeLIwLfEeazwDb8P/9FSvaLpHW81TNcSIL27wyoigz8GDCdZ3EuFZvEuOn6jzEsXa+Ikw==","signatures":[{"sig":"MEQCICDRDYq5D2ZAa9w/iH8bmh5UH0ViSDmvVymmzKdBE6okAiAYF48XMgRr33QjN5Fy0YYrArjQ3sxuFGITp3snnKnu2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297796},"main":"./index.cjs.js","module":"./index.js","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/8.2.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.3.0","axios":"^1.13.2","debug":"^4.4.1","luxon":"^3.7.2","lru-cache":"^11.2.4","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.19_1764839901730_0.2010267308439051","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.20","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.20","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"1d768ee9dd231e2bbc612112b3e11420f56ab9c3","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.20.tgz","fileCount":25,"integrity":"sha512-iUu2rP8Mc0oXRgjhbiTJdkGrRH0uHHyOMwx+gIhvJWQW54u3ekYtGXO3e3ngaM5LpeE3n9XofgCsJoW/2HLRXA==","signatures":[{"sig":"MEUCIQDhD8ygWbC0IXamDE8O4ZRfW1c8cwI4QRhx/w3b7RIYoQIgJh6LHGiWtz7hSnA1pgnKAAWUYihd2IHQYWGsOkdOfYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297796},"main":"./index.cjs.js","module":"./index.js","gitHead":"6d64a59c8a66ddd5590d8ee96f1b4b9ed8bcf717","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/9.0.3/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.6.1","axios":"^1.13.2","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.4","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.20_1764927208691_0.527168812626732","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.21","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.21","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"650a66cead75ca14e2de2ff1808fa7db67121fad","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.21.tgz","fileCount":25,"integrity":"sha512-mc/krTP0fSbJ6jR6ZdqVKN3cvYeN5HfdIf5ltVPioEzIUpVMO2k9anQEsmCItW1g/DGq+6X8YCR60A+bAf6pBQ==","signatures":[{"sig":"MEUCIFdQE2yHf/2o+Y64ldkKMTJRRYTBuT+rcWUF9MaIkovIAiEA0Zphox+0NdLf40n5R0UWkp2LCO7CqtpYG1CIosdvv0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305810},"main":"./index.cjs.js","module":"./index.js","gitHead":"3874a0fe6fca55da4d3c16281cb41a49155d6ed0","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/9.0.3/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.6.1","axios":"^1.13.2","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.4","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.21_1768385907861_0.6602063904817681","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.22","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.22","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"c9c62fbacf397dcdcbb1ee2a18d9380c0f4dbad4","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.22.tgz","fileCount":25,"integrity":"sha512-XG5nhO8iXTJFwYNwl0xnQs+sG1Twf8M9p1DcIchBu06v/P2SVm8v/S/KO5+ac0ufrI1+nkzdrplpzgkrlyzh1A==","signatures":[{"sig":"MEQCIAGzCN76ACVutWLIXodRs8PbOXvalZlJ/nX6AQtQUtQkAiAxQm4vunRjPTbM2sXQBloDuI9eqhn9FgktVg6xMI054A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306660},"main":"./index.cjs.js","module":"./index.js","gitHead":"25a77734b3ac45577d580a2de51c4a83a8da4b1d","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"11.4.2","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.6.1","axios":"^1.13.2","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.4","iconv-lite":"^0.7.0","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.22_1771918023115_0.8181471625974337","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.23","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.23","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"407f30da940f09f986c59baabfe139d7f25cffb9","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.23.tgz","fileCount":25,"integrity":"sha512-omoM+GR/+a+/KEOLXgvZdXfxgc5VvqKm0x/rH/WhN01ifF0T9Wsa6Gzm/2F+qKpRz2Hj41M7t/VsbiD/gGD7yQ==","signatures":[{"sig":"MEUCIQDsJNdA/zV0DI+5hptidJyM0Fl5CHDBVqdLwpFBeid3mAIgLX5rR9DF2fOpjw8dlE7niZiptMLkBX5ldcmIxDnTwgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306603},"main":"./index.cjs.js","module":"./index.js","gitHead":"90f416c963149ca24e008100c78c31d323b65374","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/9.0.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.7.1","axios":"^1.13.5","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.6","iconv-lite":"^0.7.2","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.23_1771930021898_0.7612898944812325","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.24","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.24","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"b4e0e924a469518e48cda8464575f3bb832746fd","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.24.tgz","fileCount":25,"integrity":"sha512-qPtB6IUKJ4Nofksh/aAf0VEQgtiabyBItyUmkrJo4JXrJprj9fgZUA/X1o0u+JxliSIcEw7Vb7Jbh6H7ErhoFw==","signatures":[{"sig":"MEUCIQCAf6AOLGu3yv5ESr/wrmBVnvrG6VxYMgI6GSgwia8YdQIgLWek4KNbQEHkxVlgplaBF7sOAXB4ZK/upB2ah1LNS3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306603},"main":"./index.cjs.js","module":"./index.js","gitHead":"b9633a854236afe6468d49d0a41d5593fee0249f","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/9.0.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.7.1","axios":"^1.16.1","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.6","iconv-lite":"^0.7.2","@rytass/payments":"^0.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.24_1779093031824_0.8019620290441161","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.1.25","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.1.25","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"homepage":"https://github.com/Rytass/Utils#readme","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dist":{"shasum":"e8f65191b43b67eb2ac1fb8252d759e9f8fdc0de","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.1.25.tgz","fileCount":25,"integrity":"sha512-WDRAQ2YVT6PoqhmMo9bZ6PexuVgMamsX8xqKgHsijWQIusYfJp/lF6sATfgVUJJoYc7Zj+c2IBESXKZjjmLpWg==","signatures":[{"sig":"MEQCIBG1JDdMZjnhhHnwkaY+OL5GGN6ANFQGou5z8PlHXmeUAiAyxfVzvYEY/J6cn+2K75eNa3QoGoi4jHmvDv/Un35/1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319978},"main":"./index.cjs.js","module":"./index.js","gitHead":"613baf8148fb259c3a380371b329a09d8cb00fdb","typings":"./index.d.ts","_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"repository":{"url":"git+ssh://git@github.com/Rytass/Utils.git","type":"git"},"_npmVersion":"lerna/9.0.4/node@v22.17.0+arm64 (darwin)","description":"Rytass Payment Gateway","directories":{},"_nodeVersion":"22.17.0","dependencies":{"soap":"^1.7.1","axios":"^1.16.1","debug":"^4.4.3","luxon":"^3.7.2","lru-cache":"^11.2.6","iconv-lite":"^0.7.2","@rytass/payments":">=0.2.7 <1"},"_hasShrinkwrap":false,"devDependencies":{"@types/debug":"^4.1.12"},"peerDependencies":{"@ngrok/ngrok":">=1"},"peerDependenciesMeta":{"@ngrok/ngrok":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.1.25_1785314850300_0.12177173637515426","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@rytass/payments-adapter-ctbc-micro-fast-pay","version":"0.2.0","description":"Rytass Payment Gateway","keywords":["rytass","payment"],"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"homepage":"https://github.com/Rytass/Utils#readme","license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/Rytass/Utils.git"},"main":"./index.cjs","bugs":{"url":"https://github.com/Rytass/Utils/issues"},"dependencies":{"@rytass/payments":"^0.3.0","axios":"^1.16.1","debug":"^4.4.3","iconv-lite":"^0.7.2","lru-cache":"^11.2.6","luxon":"^3.7.2","soap":"^1.7.1"},"peerDependencies":{"@ngrok/ngrok":">=1"},"devDependencies":{"@types/debug":"^4.1.12"},"peerDependenciesMeta":{"@ngrok/ngrok":{"optional":true}},"type":"module","module":"./index.js","types":"./index.d.ts","typings":"./index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"},"default":"./index.js"},"./package.json":"./package.json","./*.css":"./*.css","./*.json":"./*.json","./*.js":{"import":{"types":"./*.d.ts","default":"./*.js"},"require":{"types":"./*.d.cts","default":"./*.cjs"},"default":"./*.js"},"./*":{"import":{"types":"./*.d.ts","default":"./*.js"},"require":{"types":"./*.d.cts","default":"./*.cjs"},"default":"./*.js"}},"gitHead":"4e84d1f8fa0679df8809c6c03f1e11be5610c5e9","_id":"@rytass/payments-adapter-ctbc-micro-fast-pay@0.2.0","_nodeVersion":"26.4.0","_npmVersion":"lerna/9.0.4/node@v26.4.0+arm64 (darwin)","dist":{"integrity":"sha512-8lnFIuNHSPSGSoVzVy0SlJNx63QqpV6kZ3Q7cBW0LboBpRFozhWD1CISnDChQpDd1T/P6cbRzGT+t2IZ2lrZDw==","shasum":"1f4924eadb1cbd811edeccf0c96f313ddc2efc85","tarball":"https://registry.npmjs.org/@rytass/payments-adapter-ctbc-micro-fast-pay/-/payments-adapter-ctbc-micro-fast-pay-0.2.0.tgz","fileCount":45,"unpackedSize":354471,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCUYvVj396xq2FqovzfDArKkz7EYedoX1iv8zNNbr1t0wIgc5XlziQRF3kZrW55wQdy82hvBwdD0sc7qZFEu/165hU="}]},"_npmUser":{"name":"fantasywind","email":"fantasyatelier@gmail.com"},"directories":{},"maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/payments-adapter-ctbc-micro-fast-pay_0.2.0_1785696834020_0.31770125207471756"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-28T05:28:41.434Z","modified":"2026-08-02T18:53:54.325Z","0.0.2":"2025-06-28T05:28:41.712Z","0.0.3":"2025-07-01T09:43:24.286Z","0.0.4":"2025-07-01T15:40:29.588Z","0.0.5":"2025-07-08T14:23:27.420Z","0.0.6":"2025-07-10T06:42:07.178Z","0.0.7":"2025-07-11T02:50:17.723Z","0.0.8":"2025-07-24T10:10:29.910Z","0.1.0":"2025-07-28T11:17:37.490Z","0.1.1":"2025-07-28T14:22:40.294Z","0.1.2":"2025-07-29T12:47:54.950Z","0.1.3":"2025-07-29T13:17:54.927Z","0.1.4":"2025-07-30T07:23:47.121Z","0.1.5":"2025-07-30T10:29:10.704Z","0.1.6":"2025-08-04T07:52:46.069Z","0.1.7":"2025-08-19T14:39:11.296Z","0.1.8":"2025-08-28T11:42:58.013Z","0.1.9":"2025-09-09T14:45:44.394Z","0.1.10":"2025-09-11T10:14:45.928Z","0.1.11":"2025-09-15T13:19:25.820Z","0.1.12":"2025-09-22T15:38:55.814Z","0.1.13":"2025-09-23T10:46:10.353Z","0.1.14":"2025-10-17T06:01:02.343Z","0.1.15":"2025-10-20T11:12:38.875Z","0.1.16":"2025-10-31T08:11:13.226Z","0.1.17":"2025-11-10T11:42:44.368Z","0.1.18":"2025-11-26T11:22:22.237Z","0.1.19":"2025-12-04T09:18:21.880Z","0.1.20":"2025-12-05T09:33:28.834Z","0.1.21":"2026-01-14T10:18:28.008Z","0.1.22":"2026-02-24T07:27:03.252Z","0.1.23":"2026-02-24T10:47:02.053Z","0.1.24":"2026-05-18T08:30:31.995Z","0.1.25":"2026-07-29T08:47:30.437Z","0.2.0":"2026-08-02T18:53:54.173Z"},"bugs":{"url":"https://github.com/Rytass/Utils/issues"},"author":{"name":"Chia Yu Pai","email":"fantasyatelier@gmail.com"},"license":"MIT","homepage":"https://github.com/Rytass/Utils#readme","keywords":["rytass","payment"],"repository":{"type":"git","url":"git+ssh://git@github.com/Rytass/Utils.git"},"description":"Rytass Payment Gateway","maintainers":[{"name":"fantasywind","email":"fantasyatelier@gmail.com"}],"readme":"# Rytass Utils - Payments Adapter CTBC Micro Fast Pay\n\nA comprehensive TypeScript payment adapter for CTBC (Chinatrust Bank) Micro Fast Pay system. This adapter provides seamless integration with Taiwan's CTBC Bank payment gateway, supporting credit card payments, card binding, virtual accounts, and comprehensive payment lifecycle management with built-in server support.\n\n## Features\n\n- [x] CTBC Micro Fast Pay credit card payment integration\n- [x] Card binding and tokenization with transaction-based binding\n- [x] Bound card checkout functionality\n- [x] Built-in HTTP server with automatic callback handling\n- [x] Multiple payment channels (Credit Card, Virtual Account, CVS, Barcode, Apple Pay)\n- [x] Credit card installment payments\n- [x] Transaction query and status tracking\n- [x] Order lifecycle management with event-driven architecture\n- [x] Secure MAC/TXN signature verification\n- [x] Ngrok integration for local development\n- [x] LRU cache support for orders and bind card requests\n- [x] Custom server integration support\n- [x] TypeScript type safety throughout\n- [x] Comprehensive error handling and logging\n- [x] Production and development environment support\n\n## Installation\n\n```bash\nnpm install @rytass/payments-adapter-ctbc-micro-fast-pay\n# or\nyarn add @rytass/payments-adapter-ctbc-micro-fast-pay\n```\n\n**Peer Dependencies:**\n\n```bash\nnpm install @rytass/payments\n# Optional: For local development with ngrok\nnpm install @ngrok/ngrok\n```\n\n## Configuration\n\n### Basic Configuration\n\n```typescript\nimport { CTBCPayment, CTBCOrderState } from '@rytass/payments-adapter-ctbc-micro-fast-pay';\nimport { PaymentEvents } from '@rytass/payments';\n\n// Production configuration\nconst productionGateway = new CTBCPayment({\n  merchantId: 'YOUR_CTBC_MERCHANT_ID', // CTBC provided merchant ID\n  merId: 'YOUR_MER_ID', // Merchant identifier\n  txnKey: 'YOUR_TXN_KEY', // MAC/TXN signature key\n  terminalId: 'YOUR_TERMINAL_ID', // Terminal identifier\n  baseUrl: 'https://ccapi.ctbcbank.com', // Production API URL\n  withServer: true, // Enable built-in server\n  serverHost: 'https://your-domain.com', // Your callback server\n  orderCacheTTL: 1800000, // Order cache TTL (30 minutes)\n  bindCardRequestsCacheTTL: 3600000, // Bind card cache TTL (1 hour)\n});\n\n// Development configuration\nconst developmentGateway = new CTBCPayment({\n  merchantId: 'TEST_MERCHANT_ID',\n  merId: 'TEST_MER_ID',\n  txnKey: 'TEST_TXN_KEY',\n  terminalId: 'TEST_TERMINAL_ID',\n  baseUrl: 'https://test-ccapi.ctbcbank.com', // Test API URL\n  withServer: 'ngrok', // Use ngrok for local development\n  orderCacheTTL: 600000, // Shorter TTL for testing (10 minutes)\n});\n```\n\n### Environment-Based Configuration\n\n```typescript\n// Secure environment-based setup\nconst paymentGateway = new CTBCPayment({\n  merchantId: process.env.CTBC_MERCHANT_ID!,\n  merId: process.env.CTBC_MER_ID!,\n  txnKey: process.env.CTBC_TXN_KEY!,\n  terminalId: process.env.CTBC_TERMINAL_ID!,\n  baseUrl: process.env.NODE_ENV === 'production' ? 'https://ccapi.ctbcbank.com' : 'https://test-ccapi.ctbcbank.com',\n  withServer: true,\n  serverHost: process.env.SERVER_HOST || 'http://localhost:3000',\n  checkoutPath: '/payments/ctbc/checkout',\n  callbackPath: '/payments/ctbc/callback',\n  bindCardPath: '/payments/ctbc/bind-card',\n  boundCardPath: '/payments/ctbc/bound-card',\n  orderCacheTTL: parseInt(process.env.ORDER_CACHE_TTL || '1800000'),\n  onServerListen: () => {\n    console.log('CTBC payment server ready!');\n  },\n});\n```\n\n## Basic Usage\n\n### Simple Credit Card Payment\n\n**Note**: Please use NAT tunnel service (like ngrok) to proxy built-in server if you are behind a LAN network.\n\n```typescript\nimport { CTBCPayment, CTBCOrderState } from '@rytass/payments-adapter-ctbc-micro-fast-pay';\nimport { PaymentEvents, Channel } from '@rytass/payments';\n\nconst paymentGateway = new CTBCPayment({\n  merchantId: 'YOUR_CTBC_MERCHANT_ID',\n  merId: 'YOUR_MER_ID',\n  txnKey: 'YOUR_TXN_KEY',\n  terminalId: 'YOUR_TERMINAL_ID',\n  withServer: true,\n  serverHost: 'http://localhost:3000',\n  onServerListen: () => {\n    console.log('CTBC payment server is ready!');\n  },\n});\n\n// Setup payment event listeners\npaymentGateway.emitter.on(PaymentEvents.ORDER_COMMITTED, message => {\n  console.log('CTBC payment successful:', message.id);\n  console.log('Transaction amount:', message.totalPrice);\n  console.log('Platform trade number:', message.platformTradeNumber);\n});\n\n// Create order\nconst order = await paymentGateway.prepare({\n  id: 'ORDER-2024-001', // Optional: auto-generated if not provided\n  items: [\n    {\n      name: 'Premium Product',\n      unitPrice: 2500,\n      quantity: 1,\n    },\n    {\n      name: 'Shipping Fee',\n      unitPrice: 100,\n      quantity: 1,\n    },\n  ],\n  clientBackUrl: 'https://yoursite.com/payment/return', // Return URL after payment\n});\n\nconsole.log('Order ID:', order.id);\nconsole.log('Total Price:', order.totalPrice);\nconsole.log('Order State:', order.state);\n\n// Three ways to handle checkout:\n\n// 1. Get form data to prepare POST form by yourself\nconst formData = order.form;\nconsole.log('Form action URL:', 'https://ccapi.ctbcbank.com/PayJSON');\nconsole.log('Form data:', formData);\n\n// 2. Get HTML including form data and automatic submit script\nconst autoSubmitHTML = order.formHTML;\n\n// 3. Get built-in server URL for auto submit (only works if withServer is set)\nconst checkoutURL = order.checkoutURL;\nconsole.log('Checkout URL:', checkoutURL);\n```\n\n### Credit Card Installment Payment\n\n```typescript\n// Create installment payment order\nconst installmentOrder = await paymentGateway.prepare({\n  id: 'INSTALLMENT-ORDER-001',\n  items: [\n    {\n      name: 'High-Value Product',\n      unitPrice: 12000,\n      quantity: 1,\n    },\n  ],\n  clientBackUrl: 'https://yoursite.com/payment/return',\n  installmentCount: 12, // 12 installment periods\n  cardType: 'VMJ', // Visa, MasterCard, JCB\n});\n\nconsole.log('Installment order created:', installmentOrder.id);\nconsole.log('Installment periods:', installmentOrder.installmentCount);\n```\n\n## Advanced Usage\n\n### Card Binding with Transaction\n\nCTBC Micro Fast Pay allows you to bind cards using successful transactions:\n\n```typescript\nimport { PaymentEvents } from '@rytass/payments';\n\nconst paymentGateway = new CTBCPayment({\n  merchantId: 'YOUR_CTBC_MERCHANT_ID',\n  merId: 'YOUR_MER_ID',\n  txnKey: 'YOUR_TXN_KEY',\n  terminalId: 'YOUR_TERMINAL_ID',\n  withServer: true,\n  requireCacheHit: false, // Allow card binding from transactions\n  onCommit: handleOrderCommit,\n});\n\n// Handle successful payment and bind card\nasync function handleOrderCommit(order: CTBCOrder) {\n  if (order.state === CTBCOrderState.COMMITTED) {\n    const { id, platformTradeNumber } = order;\n    const memberId = 'MEMBER_123456';\n\n    try {\n      // Prepare card binding request for user\n      const bindRequest = await paymentGateway.prepareBindCard(memberId, {\n        finishRedirectURL: 'https://your-domain.com/card-bound-success',\n      });\n\n      // Save card ID to your database\n      const cardId = bindRequest.cardId;\n      console.log('Card bound successfully:', cardId);\n      console.log('Card prefix:', bindRequest.cardNumberPrefix);\n      console.log('Card suffix:', bindRequest.cardNumberSuffix);\n\n      // Store the card information\n      await saveCustomerCard({\n        memberId,\n        cardId,\n        cardPrefix: bindRequest.cardNumberPrefix,\n        cardSuffix: bindRequest.cardNumberSuffix,\n        boundAt: new Date(),\n      });\n    } catch (error) {\n      console.error('Card binding failed:', error.message);\n    }\n  }\n}\n\n// Handle card binding events\npaymentGateway.emitter.on(PaymentEvents.CARD_BOUND, bindRequest => {\n  console.log(`Card ${bindRequest.cardId} bound for member ${bindRequest.memberId}`);\n});\n\npaymentGateway.emitter.on(PaymentEvents.CARD_BINDING_FAILED, bindRequest => {\n  console.error('Card binding failed:', bindRequest.failedMessage);\n\n  // Handle card already bound scenario\n  if (bindRequest.failedMessage?.code === '10100112') {\n    console.log('Card already bound:');\n    console.log('Member ID:', bindRequest.memberId);\n    console.log('Card ID:', bindRequest.cardId);\n    console.log('Card Number Prefix:', bindRequest.cardNumberPrefix);\n    console.log('Card Number Suffix:', bindRequest.cardNumberSuffix);\n  }\n});\n```\n\n### Bound Card Checkout\n\nUse previously bound cards for quick checkout:\n\n```typescript\n// Checkout with bound card\nconst boundCardResult = await paymentGateway.checkoutWithBoundCard({\n  memberId: 'MEMBER_123456',\n  cardId: 'CARD_789012',\n  orderId: 'BOUND-ORDER-001',\n  items: [\n    {\n      name: 'Subscription Service',\n      unitPrice: 999,\n      quantity: 1,\n    },\n  ],\n});\n\nif (boundCardResult.success) {\n  console.log('Bound card payment successful:', boundCardResult.orderId);\n  console.log('Transaction ID:', boundCardResult.transactionId);\n} else {\n  console.error('Bound card payment failed:', boundCardResult.error);\n}\n```\n\n### Transaction Query\n\n```typescript\n// Query order status\nconst orderStatus = await paymentGateway.query('ORDER-2024-001');\n\nconsole.log('Order ID:', orderStatus.id);\nconsole.log('Order State:', orderStatus.state);\nconsole.log('Total Price:', orderStatus.totalPrice);\nconsole.log('Created At:', orderStatus.createdAt);\nconsole.log('Committed At:', orderStatus.committedAt);\n\n// Check if order is committed\nif (orderStatus.state === CTBCOrderState.COMMITTED) {\n  console.log('Payment completed successfully');\n  console.log('Platform Trade Number:', orderStatus.platformTradeNumber);\n} else if (orderStatus.state === CTBCOrderState.FAILED) {\n  console.log('Payment failed:', orderStatus.failedMessage);\n}\n```\n\n### Virtual Account Payment\n\n```typescript\n// Create virtual account order\nconst vatOrder = await paymentGateway.prepare({\n  id: 'VAT-ORDER-001',\n  channel: Channel.VIRTUAL_ACCOUNT,\n  items: [\n    {\n      name: 'Bulk Purchase',\n      unitPrice: 50000,\n      quantity: 1,\n    },\n  ],\n  clientBackUrl: 'https://yoursite.com/payment/return',\n});\n\n// Listen for async info (virtual account details)\npaymentGateway.emitter.on(PaymentEvents.ORDER_INFO_RETRIEVED, order => {\n  if (order.asyncInfo?.channel === Channel.VIRTUAL_ACCOUNT) {\n    console.log('Virtual Account Details:');\n    console.log('Bank Code:', order.asyncInfo.bankCode);\n    console.log('Account Number:', order.asyncInfo.account);\n    console.log('Expires At:', order.asyncInfo.expiredAt);\n\n    // Send virtual account info to customer\n    notifyCustomerVirtualAccount({\n      orderId: order.id,\n      bankCode: order.asyncInfo.bankCode,\n      accountNumber: order.asyncInfo.account,\n      amount: order.totalPrice,\n      expiresAt: order.asyncInfo.expiredAt,\n    });\n  }\n});\n```\n\n### CVS Payment\n\n```typescript\n// Create CVS payment order\nconst cvsOrder = await paymentGateway.prepare({\n  id: 'CVS-ORDER-001',\n  channel: Channel.CVS_KIOSK,\n  items: [\n    {\n      name: 'Online Purchase',\n      unitPrice: 1500,\n      quantity: 1,\n    },\n  ],\n  clientBackUrl: 'https://yoursite.com/payment/return',\n});\n\n// Listen for CVS payment code\npaymentGateway.emitter.on(PaymentEvents.ORDER_INFO_RETRIEVED, order => {\n  if (order.asyncInfo?.channel === Channel.CVS_KIOSK) {\n    console.log('CVS Payment Details:');\n    console.log('Payment Code:', order.asyncInfo.paymentCode);\n    console.log('Expires At:', order.asyncInfo.expiredAt);\n\n    // Send CVS payment code to customer\n    notifyCustomerCVSCode({\n      orderId: order.id,\n      paymentCode: order.asyncInfo.paymentCode,\n      amount: order.totalPrice,\n      expiresAt: order.asyncInfo.expiredAt,\n    });\n  }\n});\n```\n\n## Integration Examples\n\n### Express.js API Integration\n\n```typescript\nimport express from 'express';\nimport { CTBCPayment, CTBCOrderState } from '@rytass/payments-adapter-ctbc-micro-fast-pay';\nimport { PaymentEvents, Channel } from '@rytass/payments';\n\nconst app = express();\napp.use(express.json());\napp.use(express.urlencoded({ extended: true }));\n\nconst paymentGateway = new CTBCPayment({\n  merchantId: process.env.CTBC_MERCHANT_ID!,\n  merId: process.env.CTBC_MER_ID!,\n  txnKey: process.env.CTBC_TXN_KEY!,\n  terminalId: process.env.CTBC_TERMINAL_ID!,\n  withServer: false, // Use custom Express server\n  baseUrl: process.env.NODE_ENV === 'production' ? 'https://ccapi.ctbcbank.com' : 'https://test-ccapi.ctbcbank.com',\n});\n\n// Use the default server listener for payment handling\napp.use(paymentGateway.defaultServerListener);\n\n// Setup payment event handlers\npaymentGateway.emitter.on(PaymentEvents.ORDER_COMMITTED, async message => {\n  try {\n    // Update database\n    await updateOrderStatus(message.id, 'paid');\n\n    // Send confirmation email\n    await sendPaymentConfirmation(message.id);\n\n    console.log(`CTBC payment committed: ${message.id}`);\n  } catch (error) {\n    console.error('Error handling payment success:', error);\n  }\n});\n\n// Create payment endpoint\napp.post('/api/payments/ctbc/create', async (req, res) => {\n  try {\n    const { items, orderId, returnUrl, channel, memberId } = req.body;\n\n    const order = await paymentGateway.prepare({\n      id: orderId,\n      items: items.map(item => ({\n        name: item.name,\n        unitPrice: item.price,\n        quantity: item.quantity,\n      })),\n      clientBackUrl: returnUrl,\n      checkoutMemberId: memberId, // For potential card binding\n    });\n\n    res.json({\n      success: true,\n      payment: {\n        orderId: order.id,\n        totalAmount: order.totalPrice,\n        checkoutUrl: order.checkoutURL,\n        formData: order.form,\n        formHTML: order.formHTML,\n        state: order.state,\n      },\n    });\n  } catch (error) {\n    res.status(400).json({\n      success: false,\n      error: error.message,\n    });\n  }\n});\n\n// Query payment status endpoint\napp.get('/api/payments/ctbc/:orderId/status', async (req, res) => {\n  try {\n    const { orderId } = req.params;\n\n    const order = await paymentGateway.query(orderId);\n\n    res.json({\n      success: true,\n      payment: {\n        orderId: order.id,\n        state: order.state,\n        totalAmount: order.totalPrice,\n        createdAt: order.createdAt,\n        committedAt: order.committedAt,\n        platformTradeNumber: order.platformTradeNumber,\n        isCommitted: order.state === CTBCOrderState.COMMITTED,\n        isFailed: order.state === CTBCOrderState.FAILED,\n      },\n    });\n  } catch (error) {\n    res.status(404).json({\n      success: false,\n      error: 'Payment not found',\n    });\n  }\n});\n\n// Bind card endpoint\napp.post('/api/payments/ctbc/bind-card', async (req, res) => {\n  try {\n    const { memberId } = req.body;\n\n    const bindRequest = await paymentGateway.prepareBindCard(memberId, {\n      finishRedirectURL: 'https://your-domain.com/card-bound-success',\n    });\n\n    res.json({\n      success: true,\n      cardBinding: {\n        cardId: bindRequest.cardId,\n        memberId: bindRequest.memberId,\n        cardPrefix: bindRequest.cardNumberPrefix,\n        cardSuffix: bindRequest.cardNumberSuffix,\n        state: bindRequest.state,\n      },\n    });\n  } catch (error) {\n    res.status(400).json({\n      success: false,\n      error: error.message,\n    });\n  }\n});\n\n// Bound card checkout endpoint\napp.post('/api/payments/ctbc/bound-card-checkout', async (req, res) => {\n  try {\n    const { memberId, cardId, items, orderId } = req.body;\n\n    const result = await paymentGateway.checkoutWithBoundCard({\n      memberId,\n      cardId,\n      orderId,\n      items: items.map(item => ({\n        name: item.name,\n        unitPrice: item.price,\n        quantity: item.quantity,\n      })),\n    });\n\n    if (result.success) {\n      res.json({\n        success: true,\n        payment: {\n          orderId: result.orderId,\n          transactionId: result.transactionId,\n          amount: result.amount,\n        },\n      });\n    } else {\n      res.status(400).json({\n        success: false,\n        error: result.error,\n      });\n    }\n  } catch (error) {\n    res.status(500).json({\n      success: false,\n      error: error.message,\n    });\n  }\n});\n\napp.listen(3000, () => {\n  console.log('CTBC payment server running on port 3000');\n});\n```\n\n### NestJS Service Integration\n\n```typescript\nimport { Injectable, BadRequestException, NotFoundException, Logger } from '@nestjs/common';\nimport { CTBCPayment, CTBCOrderState, CTBCBindCardRequestState } from '@rytass/payments-adapter-ctbc-micro-fast-pay';\nimport { PaymentEvents, Channel } from '@rytass/payments';\n\n@Injectable()\nexport class CTBCPaymentService {\n  private readonly logger = new Logger(CTBCPaymentService.name);\n  private readonly paymentGateway: CTBCPayment;\n\n  constructor() {\n    this.paymentGateway = new CTBCPayment({\n      merchantId: process.env.CTBC_MERCHANT_ID!,\n      merId: process.env.CTBC_MER_ID!,\n      txnKey: process.env.CTBC_TXN_KEY!,\n      terminalId: process.env.CTBC_TERMINAL_ID!,\n      baseUrl: process.env.NODE_ENV === 'production' ? 'https://ccapi.ctbcbank.com' : 'https://test-ccapi.ctbcbank.com',\n      withServer: true,\n      serverHost: process.env.SERVER_HOST,\n    });\n\n    this.setupEventHandlers();\n  }\n\n  private setupEventHandlers() {\n    this.paymentGateway.emitter.on(PaymentEvents.ORDER_COMMITTED, message => {\n      this.logger.log(`CTBC payment committed: ${message.id}`);\n      this.handlePaymentSuccess(message);\n    });\n\n    this.paymentGateway.emitter.on(PaymentEvents.ORDER_FAILED, failure => {\n      this.logger.error(`CTBC payment failed: ${failure.code} - ${failure.message}`);\n      this.handlePaymentFailure(failure);\n    });\n\n    this.paymentGateway.emitter.on(PaymentEvents.CARD_BOUND, bindRequest => {\n      this.logger.log(`Card bound: ${bindRequest.cardId} for member ${bindRequest.memberId}`);\n      this.handleCardBound(bindRequest);\n    });\n  }\n\n  async createPayment(paymentData: {\n    orderId?: string;\n    items: Array<{\n      name: string;\n      price: number;\n      quantity: number;\n    }>;\n    returnUrl?: string;\n    memberId?: string;\n    channel?: string;\n    installmentCount?: number;\n  }) {\n    const order = await this.paymentGateway.prepare({\n      id: paymentData.orderId,\n      items: paymentData.items.map(item => ({\n        name: item.name,\n        unitPrice: item.price,\n        quantity: item.quantity,\n      })),\n      clientBackUrl: paymentData.returnUrl,\n      checkoutMemberId: paymentData.memberId,\n      installmentCount: paymentData.installmentCount,\n    });\n\n    return {\n      orderId: order.id,\n      totalAmount: order.totalPrice,\n      checkoutUrl: order.checkoutURL,\n      formData: order.form,\n      state: order.state,\n      createdAt: order.createdAt,\n    };\n  }\n\n  async getPaymentStatus(orderId: string) {\n    try {\n      const order = await this.paymentGateway.query(orderId);\n\n      return {\n        orderId: order.id,\n        state: order.state,\n        totalAmount: order.totalPrice,\n        createdAt: order.createdAt,\n        committedAt: order.committedAt,\n        platformTradeNumber: order.platformTradeNumber,\n        isCommitted: order.state === CTBCOrderState.COMMITTED,\n        isFailed: order.state === CTBCOrderState.FAILED,\n        failedMessage: order.failedMessage,\n      };\n    } catch (error) {\n      throw new NotFoundException(`Payment ${orderId} not found`);\n    }\n  }\n\n  async bindCard(memberId: string) {\n    try {\n      const bindRequest = await this.paymentGateway.prepareBindCard(memberId, {\n        finishRedirectURL: 'https://your-domain.com/card-bound-success',\n      });\n\n      return {\n        cardId: bindRequest.cardId,\n        memberId: bindRequest.memberId,\n        cardPrefix: bindRequest.cardNumberPrefix,\n        cardSuffix: bindRequest.cardNumberSuffix,\n        state: bindRequest.state,\n        isSuccessful: bindRequest.state === CTBCBindCardRequestState.BOUND,\n      };\n    } catch (error) {\n      throw new BadRequestException(`Card binding failed: ${error.message}`);\n    }\n  }\n\n  async checkoutWithBoundCard(checkoutData: {\n    memberId: string;\n    cardId: string;\n    orderId?: string;\n    items: Array<{\n      name: string;\n      price: number;\n      quantity: number;\n    }>;\n  }) {\n    const result = await this.paymentGateway.checkoutWithBoundCard({\n      memberId: checkoutData.memberId,\n      cardId: checkoutData.cardId,\n      orderId: checkoutData.orderId,\n      items: checkoutData.items.map(item => ({\n        name: item.name,\n        unitPrice: item.price,\n        quantity: item.quantity,\n      })),\n    });\n\n    if (!result.success) {\n      throw new BadRequestException(`Bound card checkout failed: ${result.error}`);\n    }\n\n    return {\n      orderId: result.orderId,\n      transactionId: result.transactionId,\n      amount: result.amount,\n      success: result.success,\n    };\n  }\n\n  private async handlePaymentSuccess(message: any) {\n    // Handle successful payment - update database, send notifications, etc.\n    this.logger.log(`Processing payment success for order: ${message.id}`);\n  }\n\n  private async handlePaymentFailure(failure: any) {\n    // Handle payment failure - log, notify customer, etc.\n    this.logger.error(`Processing payment failure: ${failure.code} - ${failure.message}`);\n  }\n\n  private async handleCardBound(bindRequest: any) {\n    // Handle successful card binding - save to database, etc.\n    this.logger.log(`Processing card binding for member: ${bindRequest.memberId}`);\n  }\n}\n```\n\n### React Payment Component\n\n```typescript\nimport React, { useState, useEffect } from 'react';\n\ninterface CTBCPaymentProps {\n  items: Array<{\n    name: string;\n    price: number;\n    quantity: number;\n  }>;\n  memberId?: string;\n  onSuccess: (result: any) => void;\n  onError: (error: string) => void;\n}\n\nconst CTBCPayment: React.FC<CTBCPaymentProps> = ({\n  items,\n  memberId,\n  onSuccess,\n  onError\n}) => {\n  const [paymentData, setPaymentData] = useState<any>(null);\n  const [boundCards, setBoundCards] = useState<any[]>([]);\n  const [selectedCardId, setSelectedCardId] = useState<string>('');\n  const [isLoading, setIsLoading] = useState(false);\n  const [paymentMethod, setPaymentMethod] = useState<'new' | 'bound'>('new');\n\n  const totalAmount = items.reduce((sum, item) => sum + (item.price * item.quantity), 0);\n\n  useEffect(() => {\n    if (memberId) {\n      fetchBoundCards();\n    }\n  }, [memberId]);\n\n  const fetchBoundCards = async () => {\n    try {\n      const response = await fetch(`/api/members/${memberId}/bound-cards`);\n      const data = await response.json();\n\n      if (data.success) {\n        setBoundCards(data.cards);\n      }\n    } catch (error) {\n      console.error('Failed to fetch bound cards:', error);\n    }\n  };\n\n  const createNewPayment = async () => {\n    setIsLoading(true);\n\n    try {\n      const response = await fetch('/api/payments/ctbc/create', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          items,\n          memberId,\n          returnUrl: `${window.location.origin}/payment/return`\n        })\n      });\n\n      const data = await response.json();\n\n      if (data.success) {\n        setPaymentData(data.payment);\n      } else {\n        onError(data.error);\n      }\n    } catch (error) {\n      onError('Payment creation failed');\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  const checkoutWithBoundCard = async () => {\n    if (!selectedCardId) {\n      onError('Please select a bound card');\n      return;\n    }\n\n    setIsLoading(true);\n\n    try {\n      const response = await fetch('/api/payments/ctbc/bound-card-checkout', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          memberId,\n          cardId: selectedCardId,\n          items\n        })\n      });\n\n      const data = await response.json();\n\n      if (data.success) {\n        onSuccess(data.payment);\n      } else {\n        onError(data.error);\n      }\n    } catch (error) {\n      onError('Bound card checkout failed');\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  const proceedToPayment = () => {\n    if (paymentData) {\n      // Option 1: Redirect to CTBC hosted checkout\n      if (paymentData.checkoutUrl) {\n        window.location.href = paymentData.checkoutUrl;\n      } else {\n        // Option 2: Submit form programmatically\n        const form = document.createElement('form');\n        form.method = 'POST';\n        form.action = 'https://ccapi.ctbcbank.com/PayJSON';\n\n        Object.entries(paymentData.formData).forEach(([key, value]) => {\n          const input = document.createElement('input');\n          input.type = 'hidden';\n          input.name = key;\n          input.value = value as string;\n          form.appendChild(input);\n        });\n\n        document.body.appendChild(form);\n        form.submit();\n      }\n    }\n  };\n\n  return (\n    <div className=\"ctbc-payment\">\n      <h3>CTBC Bank Payment</h3>\n\n      <div className=\"order-summary\">\n        <h4>Order Summary</h4>\n        {items.map((item, index) => (\n          <div key={index} className=\"item\">\n            <span>{item.name}</span>\n            <span>{item.quantity} x NT${item.price}</span>\n          </div>\n        ))}\n        <div className=\"total\">\n          <strong>Total: NT${totalAmount}</strong>\n        </div>\n      </div>\n\n      {memberId && boundCards.length > 0 && (\n        <div className=\"payment-method-selection\">\n          <h4>Payment Method</h4>\n          <div className=\"method-options\">\n            <label>\n              <input\n                type=\"radio\"\n                value=\"new\"\n                checked={paymentMethod === 'new'}\n                onChange={(e) => setPaymentMethod(e.target.value as 'new' | 'bound')}\n              />\n              New Credit Card\n            </label>\n            <label>\n              <input\n                type=\"radio\"\n                value=\"bound\"\n                checked={paymentMethod === 'bound'}\n                onChange={(e) => setPaymentMethod(e.target.value as 'new' | 'bound')}\n              />\n              Use Bound Card\n            </label>\n          </div>\n        </div>\n      )}\n\n      {paymentMethod === 'bound' && boundCards.length > 0 && (\n        <div className=\"bound-cards\">\n          <h4>Select Bound Card</h4>\n          {boundCards.map((card) => (\n            <div key={card.cardId} className=\"bound-card\">\n              <label>\n                <input\n                  type=\"radio\"\n                  value={card.cardId}\n                  checked={selectedCardId === card.cardId}\n                  onChange={(e) => setSelectedCardId(e.target.value)}\n                />\n                **** **** **** {card.cardSuffix} ({card.cardType})\n              </label>\n            </div>\n          ))}\n        </div>\n      )}\n\n      <div className=\"payment-actions\">\n        {paymentMethod === 'new' && (\n          <>\n            {!paymentData && (\n              <button\n                onClick={createNewPayment}\n                disabled={isLoading}\n                className=\"create-payment-btn\"\n              >\n                {isLoading ? 'Creating Payment...' : 'Proceed to Payment'}\n              </button>\n            )}\n\n            {paymentData && (\n              <div className=\"payment-ready\">\n                <p>Payment ready for NT${paymentData.totalAmount}</p>\n                <button onClick={proceedToPayment} className=\"pay-btn\">\n                  Pay with CTBC Bank\n                </button>\n              </div>\n            )}\n          </>\n        )}\n\n        {paymentMethod === 'bound' && (\n          <button\n            onClick={checkoutWithBoundCard}\n            disabled={!selectedCardId || isLoading}\n            className=\"bound-pay-btn\"\n          >\n            {isLoading ? 'Processing...' : 'Pay with Bound Card'}\n          </button>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default CTBCPayment;\n```\n\n## Error Handling\n\n### Typed Errors\n\nThe package exports typed error classes so callers can branch on the failure cause instead of matching error messages:\n\n| Error class                  | Thrown when                                                                    | Extra properties                 |\n| ---------------------------- | ------------------------------------------------------------------------------ | -------------------------------- |\n| `CTBCHtmlErrorResponseError` | CTBC returns an HTML page (maintenance notice, WAF block) instead of a payload | `responseText`                   |\n| `CTBCPosQueryFailedError`    | The POS gateway answers a query with a non-`00` `ErrCode`                      | `respCode`, `errCode`, `errDesc` |\n| `CtbcPaymentFailedError`     | A payment is rejected by the gateway                                           | `orderId`                        |\n\n> **Behaviour change:** the `posApi*` helpers previously signalled every failure by\n> returning a numeric error code from `CTBC_ERROR_CODES`. They now **throw**\n> `CTBCHtmlErrorResponseError` when CTBC serves an HTML page — this case used to be masked as\n> `ERR_HOST_CONNECTION_FAILED`, which was indistinguishable from a genuine network failure. All other\n> failures still come back as numeric codes. Code that only checks `typeof result === 'number'` should\n> add a `try`/`catch`.\n\n```typescript\nimport {\n  posApiQuery,\n  CTBCHtmlErrorResponseError,\n  CTBCPosQueryFailedError,\n  CTBC_ERROR_CODES,\n} from '@rytass/payments-adapter-ctbc-micro-fast-pay';\n\ntry {\n  const result = await posApiQuery(posApiConfig, queryParams);\n\n  if (typeof result === 'number') {\n    // Validation / network / parsing failures still surface as numeric codes\n    console.error('Query failed with error code:', result);\n\n    return;\n  }\n\n  console.log('Current state:', result.CurrentState);\n} catch (error) {\n  if (error instanceof CTBCHtmlErrorResponseError) {\n    // CTBC is under maintenance — safe to retry later, do NOT treat as a payment failure.\n    // `message` carries a truncated preview; `responseText` holds the full page for diagnostics.\n    console.error('CTBC returned an HTML error page:', error.message);\n    await alerting.notify('ctbc-maintenance', error.responseText);\n\n    return;\n  }\n\n  throw error;\n}\n```\n\n`CTBCPayment.query()` wraps the same failure modes: it throws `CTBCPosQueryFailedError` when the POS\ngateway reports a query error, and lets `CTBCHtmlErrorResponseError` propagate untouched.\n\n```typescript\ntry {\n  const order = await paymentGateway.query('ORDER_ID');\n} catch (error) {\n  if (error instanceof CTBCHtmlErrorResponseError) {\n    console.error('CTBC under maintenance, retry later');\n  } else if (error instanceof CTBCPosQueryFailedError) {\n    console.error(`Query rejected: ${error.errCode} - ${error.errDesc}`);\n  } else {\n    throw error;\n  }\n}\n```\n\nWhen a refund or refund cancellation hits an HTML error page, the order is marked `FAILED` with\n`failedCode` set to `CTBC_HTML_ERROR_RESPONSE_FAILED_CODE` (`'HTML_ERROR_RESPONSE'`) before the error\nis re-thrown.\n\n### Common Error Scenarios\n\n```typescript\ntry {\n  const order = await paymentGateway.prepare({\n    items: [\n      {\n        name: 'Product',\n        unitPrice: 1000,\n        quantity: 1,\n      },\n    ],\n  });\n} catch (error) {\n  // Handle different types of errors\n  if (error.message.includes('merchantId is required')) {\n    console.error('Missing merchant configuration');\n  } else if (error.message.includes('Invalid TXN key')) {\n    console.error('TXN signature key is invalid');\n  } else if (error.message.includes('Server not started')) {\n    console.error('Payment server not initialized');\n  } else if (error.message.includes('Order cache miss')) {\n    console.error('Order not found in cache - may have expired');\n  } else {\n    console.error('Order preparation failed:', error.message);\n  }\n}\n\n// Card binding errors\ntry {\n  const bindRequest = await paymentGateway.prepareBindCard('MEMBER_123', {\n    finishRedirectURL: 'https://your-domain.com/card-bound-success',\n  });\n} catch (error) {\n  if (error.message.includes('Card already bound')) {\n    console.error('This card is already bound to the member');\n  } else if (error.message.includes('Invalid transaction')) {\n    console.error('Transaction not found or not successful');\n  } else if (error.message.includes('Binding timeout')) {\n    console.error('Card binding request timed out');\n  } else {\n    console.error('Card binding failed:', error.message);\n  }\n}\n\n// Payment event error handling\npaymentGateway.emitter.on(PaymentEvents.ORDER_FAILED, failure => {\n  switch (failure.code) {\n    case 'INVALID_CARD':\n      console.error('Credit card information is invalid');\n      break;\n    case 'INSUFFICIENT_FUNDS':\n      console.error('Insufficient funds on card');\n      break;\n    case 'EXPIRED_CARD':\n      console.error('Credit card has expired');\n      break;\n    case 'DECLINED':\n      console.error('Transaction declined by bank');\n      break;\n    case 'NETWORK_ERROR':\n      console.error('Network connection error');\n      break;\n    default:\n      console.error(`Payment failed: ${failure.code} - ${failure.message}`);\n  }\n});\n```\n\n### Validation and Security\n\n```typescript\n// Validate MAC/TXN signatures\nconst validateTransactionSecurity = (transactionData: any) => {\n  // CTBC uses MAC/TXN for transaction verification\n  // The adapter handles this internally, but you can add additional validation\n\n  if (!transactionData.platformTradeNumber) {\n    throw new Error('Missing platform trade number');\n  }\n\n  if (!transactionData.amount || transactionData.amount <= 0) {\n    throw new Error('Invalid transaction amount');\n  }\n\n  return true;\n};\n\n// Safe order processing with validation\nconst processOrderSafely = async (orderData: any) => {\n  try {\n    // Validate inputs\n    if (!orderData.items || orderData.items.length === 0) {\n      throw new Error('Order must have at least one item');\n    }\n\n    const totalAmount = orderData.items.reduce((sum, item) => {\n      return sum + item.unitPrice * item.quantity;\n    }, 0);\n\n    if (totalAmount <= 0) {\n      throw new Error('Order total must be greater than 0');\n    }\n\n    // Create order\n    const order = await paymentGateway.prepare(orderData);\n\n    // Log for audit\n    console.log(`Order created: ${order.id}, Amount: ${order.totalPrice}`);\n\n    return { success: true, order };\n  } catch (error) {\n    console.error('Order processing failed:', error);\n    return { success: false, error: error.message };\n  }\n};\n```\n\n## Best Practices\n\n### Configuration Management\n\n- Store sensitive credentials (merchantId, txnKey) in environment variables\n- Use different merchant IDs for development and production\n- Implement proper HTTPS for all payment-related endpoints\n- Regularly rotate TXN keys and credentials\n\n### Order Management\n\n- Always validate transaction authenticity using MAC/TXN verification\n- Implement appropriate cache TTL for orders and bind card requests\n- Use unique order IDs to prevent duplicate transactions\n- Log all payment events for debugging and auditing\n\n### Card Binding\n\n- Only bind cards from successful transactions\n- Implement proper member authentication before card binding\n- Handle \"card already bound\" scenarios gracefully\n- Store card information securely with encryption\n\n### Security\n\n- Validate all payment callbacks before processing\n- Implement proper CSRF protection for payment forms\n- Use HTTPS for all payment-related communications\n- Never log sensitive payment data (card numbers, TXN keys)\n\n### Performance\n\n- Use appropriate cache TTL values based on your use case\n- Implement proper connection pooling for database operations\n- Monitor payment gateway response times\n- Set appropriate timeout values for payment operations\n\n### Error Handling\n\n- Implement comprehensive error logging\n- Provide clear error messages to customers\n- Handle network failures gracefully with retry mechanisms\n- Monitor for unusual payment failure patterns\n\n## Testing\n\n```typescript\nimport { CTBCPayment, CTBCOrderState, CTBCBindCardRequestState } from '@rytass/payments-adapter-ctbc-micro-fast-pay';\nimport { Channel } from '@rytass/payments';\n\ndescribe('CTBC Payment Integration', () => {\n  let paymentGateway: CTBCPayment;\n\n  beforeEach(() => {\n    paymentGateway = new CTBCPayment({\n      merchantId: 'TEST_MERCHANT',\n      merId: 'TEST_MER_ID',\n      txnKey: 'TEST_TXN_KEY',\n      terminalId: 'TEST_TERMINAL',\n      baseUrl: 'https://test-ccapi.ctbcbank.com',\n    });\n  });\n\n  it('should create order successfully', async () => {\n    const order = await paymentGateway.prepare({\n      items: [\n        {\n          name: 'Test Product',\n          unitPrice: 1000,\n          quantity: 1,\n        },\n      ],\n    });\n\n    expect(order.id).toBeDefined();\n    expect(order.totalPrice).toBe(1000);\n    expect(order.state).toBe(CTBCOrderState.INITED);\n  });\n\n  it('should generate correct form data', async () => {\n    const order = await paymentGateway.prepare({\n      items: [\n        {\n          name: 'Test Product',\n          unitPrice: 2000,\n          quantity: 2,\n        },\n      ],\n    });\n\n    const form = order.form;\n\n    expect(form.merID).toBe('TEST_MER_ID');\n    expect(form.URLEnc).toBeDefined();\n    expect(form.URLEnc).toContain('TEST_MERCHANT');\n  });\n\n  it('should query order status', async () => {\n    const order = await paymentGateway.query('TEST-ORDER-001');\n\n    expect(order.id).toBe('TEST-ORDER-001');\n    expect(order.state).toBeDefined();\n  });\n\n  it('should handle card binding', async () => {\n    const bindRequest = await paymentGateway.prepareBindCard('TEST_MEMBER', {\n      finishRedirectURL: 'https://test-domain.com/card-bound-success',\n    });\n\n    expect(bindRequest.memberId).toBe('TEST_MEMBER');\n    expect(bindRequest.cardId).toBeDefined();\n    expect(bindRequest.state).toBe(CTBCBindCardRequestState.REQUESTED);\n  });\n\n  it('should checkout with bound card', async () => {\n    const result = await paymentGateway.checkoutWithBoundCard({\n      memberId: 'TEST_MEMBER',\n      cardId: 'TEST_CARD_ID',\n      orderId: 'BOUND_ORDER_001',\n      items: [\n        {\n          name: 'Test Product',\n          unitPrice: 500,\n          quantity: 1,\n        },\n      ],\n    });\n\n    expect(result.success).toBe(true);\n    expect(result.orderId).toBe('BOUND_ORDER_001');\n    expect(result.amount).toBe(500);\n  });\n});\n```\n\n## API Reference\n\n### CTBCPayment Constructor Options\n\n```typescript\ninterface CTBCPaymentOptions {\n  merchantId: string; // Required: CTBC merchant ID\n  merchantName?: string; // Optional: Merchant name\n  merId: string; // Required: Merchant identifier\n  txnKey: string; // Required: MAC/TXN signature key\n  terminalId: string; // Required: Terminal identifier\n\n  baseUrl?: string; // Optional: CTBC API URL\n  requireCacheHit?: boolean; // Optional: Require cache hit for operations\n  withServer?: boolean | 'ngrok'; // Optional: Enable built-in server\n  serverHost?: string; // Optional: Server host URL\n  checkoutPath?: string; // Optional: Checkout endpoint path\n  callbackPath?: string; // Optional: Callback endpoint path\n  bindCardPath?: string; // Optional: Card binding path\n  orderCacheTTL?: number; // Optional: Order cache TTL in ms\n  bindCardRequestsCacheTTL?: number; // Optional: Bind card cache TTL in ms\n  onServerListen?: () => void; // Optional: Server ready callback\n  onCommit?: (order: CTBCOrder) => void; // Optional: Payment success callback\n}\n```\n\n### CTBCPayment Methods\n\n#### `prepare(options: PrepareOrderInput): Promise<CTBCOrder>`\n\nCreates a new CTBC payment order.\n\n#### `query(orderId: string): Promise<CTBCOrder>`\n\nQueries payment status by order ID.\n\n#### `prepareBindCard(memberId: string, options?: CTBCRequestPrepareBindCardOptions): Promise<CTBCBindCardRequest>`\n\nPrepares a card binding request for a member.\n\n#### `checkoutWithBoundCard(options: CheckoutWithBoundCardOptions): Promise<BoundCardCheckoutResult>`\n\nProcesses payment using a previously bound card.\n\n### Constants and Enums\n\n```typescript\n// Order states\nenum CTBCOrderState {\n  INITED = 'INITED', // Order created\n  PRE_COMMIT = 'PRE_COMMIT', // Order submitted to CTBC\n  COMMITTED = 'COMMITTED', // Payment successful\n  FAILED = 'FAILED', // Payment failed\n}\n\n// Card binding states\nenum CTBCBindCardRequestState {\n  REQUESTED = 'REQUESTED', // Binding requested\n  BOUND = 'BOUND', // Card successfully bound\n  FAILED = 'FAILED', // Binding failed\n}\n```\n\n## License\n\nMIT\n\n```\n\n```\n","readmeFilename":"README.md"}