[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73GNCYMSFQAT9W615WHWM13":3,"skill-same:01M73GNCYMSFQAT9W615WHWM13":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M73GNCYMSFQAT9W615WHWM13","vnpay-integration",null,"Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fvnpay-integration\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: vnpay-integration\ndescription: Tích hợp cổng thanh toán VNPay vào ứng dụng Node.js\u002FTypeScript. Dùng khi cần tạo URL thanh toán, xác thực callback, hoặc tích hợp VNPay vào backend. Triggers: \"vnpay\", \"thanh toán vnpay\", \"tích hợp vnpay\", \"vnpay payment\", \"cổng thanh toán\", \"payment gateway vietnam\", \"vnpay callback\", \"vnpay return url\", \"nestjs-vnpay\"\nsource: github.com\u002Flehuygiang28\u002Fvnpay\nlicense: MIT\n---\n\n# VNPay Integration\n\nThư viện Node.js hiện đại cho tích hợp cổng thanh toán VNPay. TypeScript-first, tree-shaking, modular imports.\n\nSource: [lehuygiang28\u002Fvnpay](https:\u002F\u002Fgithub.com\u002Flehuygiang28\u002Fvnpay) · Docs: [vnpay.js.org](https:\u002F\u002Fvnpay.js.org\u002F)\n\n## When to Use\n\n- Tạo URL thanh toán VNPay từ backend Node.js\n- Xác thực callback \u002F return URL từ VNPay\n- Tích hợp VNPay vào NestJS (dùng `nestjs-vnpay`)\n- Query trạng thái giao dịch (IPN handling)\n\n**Quan trọng:** Thư viện này chỉ dùng trên backend (Node.js) — không dùng trực tiếp trong React\u002FVue\u002FAngular vì sử dụng `fs`, `crypto`.\n\n## Install\n\n```bash\nnpm install vnpay\n# NestJS\nnpm install nestjs-vnpay\n```\n\n## Quick Start\n\n```typescript\nimport { VNPay, HashAlgorithm, ProductCode } from 'vnpay';\n\nconst vnpay = new VNPay({\n  tmnCode: process.env.VNPAY_TMN_CODE,\n  secureSecret: process.env.VNPAY_SECURE_SECRET,\n  vnpayHost: 'https:\u002F\u002Fsandbox.vnpayment.vn',\n  testMode: true, \u002F\u002F bỏ khi production\n  hashAlgorithm: HashAlgorithm.SHA512,\n});\n\n\u002F\u002F Tạo URL thanh toán\nconst paymentUrl = vnpay.buildPaymentUrl({\n  vnp_Amount: 100000,       \u002F\u002F VND — nhân 100 tự động\n  vnp_IpAddr: '127.0.0.1',\n  vnp_TxnRef: 'ORDER-001',\n  vnp_OrderInfo: 'Thanh toan don hang ORDER-001',\n  vnp_OrderType: ProductCode.Other,\n  vnp_ReturnUrl: 'https:\u002F\u002Fyourdomain.com\u002Fpayment\u002Freturn',\n  vnp_Locale: VnpLocale.VN,\n});\n\n\u002F\u002F Redirect user đến paymentUrl\n```\n\n## Xác thực Return URL\n\n```typescript\n\u002F\u002F Trong route handler \u002Fpayment\u002Freturn\nconst verify = vnpay.verifyReturnUrl(req.query);\n\nif (verify.isSuccess) {\n  \u002F\u002F Giao dịch thành công\n  console.log('TxnRef:', verify.vnp_TxnRef);\n  console.log('Amount:', verify.vnp_Amount);\n} else {\n  \u002F\u002F Thất bại hoặc bị tamper\n  console.log('Error:', verify.message);\n}\n```\n\n## NestJS Integration\n\n```typescript\n\u002F\u002F app.module.ts\nimport { VNPayModule } from 'nestjs-vnpay';\n\n@Module({\n  imports: [\n    VNPayModule.forRoot({\n      tmnCode: process.env.VNPAY_TMN_CODE,\n      secureSecret: process.env.VNPAY_SECURE_SECRET,\n      testMode: process.env.NODE_ENV !== 'production',\n    }),\n  ],\n})\nexport class AppModule {}\n\n\u002F\u002F payment.service.ts\n@Injectable()\nexport class PaymentService {\n  constructor(private readonly vnpay: VNPayService) {}\n\n  createPaymentUrl(orderId: string, amount: number, ip: string) {\n    return this.vnpay.buildPaymentUrl({\n      vnp_Amount: amount,\n      vnp_IpAddr: ip,\n      vnp_TxnRef: orderId,\n      vnp_OrderInfo: `Thanh toan don hang ${orderId}`,\n      vnp_ReturnUrl: `${process.env.APP_URL}\u002Fpayment\u002Freturn`,\n    });\n  }\n}\n```\n\n## Sandbox Testing\n\n```\nTMN Code:   DEMOV210\nSecret:     RAOEXHYVSDDIIENYWSLDIIZTANXUXZFJ\nHost:       https:\u002F\u002Fsandbox.vnpayment.vn\nTest card:  9704198526191432198 (ATM nội địa)\n```\n\n## Modular Import (v2.4.0+)\n\n```typescript\n\u002F\u002F Import theo module — giảm bundle size 80%\nimport { VNPay } from 'vnpay\u002Fvnpay';\nimport { HashAlgorithm, ProductCode } from 'vnpay\u002Fenums';\nimport type { VNPayConfig, BuildPaymentUrl } from 'vnpay\u002Ftypes-only'; \u002F\u002F 0KB runtime\n```\n\n## Security Checklist\n\n- [ ] `secureSecret` chỉ nằm trong env, không hardcode\n- [ ] Luôn xác thực chữ ký (`verifyReturnUrl`) trước khi cập nhật DB\n- [ ] Dùng HTTPS cho `vnp_ReturnUrl`\n- [ ] Log IPN để audit giao dịch\n- [ ] Không expose TMN Code phía frontend\n\n## Do NOT use for\n\n- Frontend payment UI — dùng API route của backend, không import trực tiếp\n- Non-VNPay gateways — xem skill `stripe-payments` hoặc `momo-integration`\n","# VNPay Integration\n\nThư viện Node.js hiện đại cho tích hợp cổng thanh toán VNPay. TypeScript-first, tree-shaking, modular imports.\n\nSource: [lehuygiang28\u002Fvnpay](https:\u002F\u002Fgithub.com\u002Flehuygiang28\u002Fvnpay) · Docs: [vnpay.js.org](https:\u002F\u002Fvnpay.js.org\u002F)\n\n## When to Use\n\n- Tạo URL thanh toán VNPay từ backend Node.js\n- Xác thực callback \u002F return URL từ VNPay\n- Tích hợp VNPay vào NestJS (dùng `nestjs-vnpay`)\n- Query trạng thái giao dịch (IPN handling)\n\n**Quan trọng:** Thư viện này chỉ dùng trên backend (Node.js) — không dùng trực tiếp trong React\u002FVue\u002FAngular vì sử dụng `fs`, `crypto`.\n\n## Install\n\n```bash\nnpm install vnpay\n# NestJS\nnpm install nestjs-vnpay\n```\n\n## Quick Start\n\n```typescript\nimport { VNPay, HashAlgorithm, ProductCode } from 'vnpay';\n\nconst vnpay = new VNPay({\n  tmnCode: process.env.VNPAY_TMN_CODE,\n  secureSecret: process.env.VNPAY_SECURE_SECRET,\n  vnpayHost: 'https:\u002F\u002Fsandbox.vnpayment.vn',\n  testMode: true, \u002F\u002F bỏ khi production\n  hashAlgorithm: HashAlgorithm.SHA512,\n});\n\n\u002F\u002F Tạo URL thanh toán\nconst paymentUrl = vnpay.buildPaymentUrl({\n  vnp_Amount: 100000,       \u002F\u002F VND — nhân 100 tự động\n  vnp_IpAddr: '127.0.0.1',\n  vnp_TxnRef: 'ORDER-001',\n  vnp_OrderInfo: 'Thanh toan don hang ORDER-001',\n  vnp_OrderType: ProductCode.Other,\n  vnp_ReturnUrl: 'https:\u002F\u002Fyourdomain.com\u002Fpayment\u002Freturn',\n  vnp_Locale: VnpLocale.VN,\n});\n\n\u002F\u002F Redirect user đến paymentUrl\n```\n\n## Xác thực Return URL\n\n```typescript\n\u002F\u002F Trong route handler \u002Fpayment\u002Freturn\nconst verify = vnpay.verifyReturnUrl(req.query);\n\nif (verify.isSuccess) {\n  \u002F\u002F Giao dịch thành công\n  console.log('TxnRef:', verify.vnp_TxnRef);\n  console.log('Amount:', verify.vnp_Amount);\n} else {\n  \u002F\u002F Thất bại hoặc bị tamper\n  console.log('Error:', verify.message);\n}\n```\n\n## NestJS Integration\n\n```typescript\n\u002F\u002F app.module.ts\nimport { VNPayModule } from 'nestjs-vnpay';\n\n@Module({\n  imports: [\n    VNPayModule.forRoot({\n      tmnCode: process.env.VNPAY_TMN_CODE,\n      secureSecret: process.env.VNPAY_SECURE_SECRET,\n      testMode: process.env.NODE_ENV !== 'production',\n    }),\n  ],\n})\nexport class AppModule {}\n\n\u002F\u002F payment.service.ts\n@Injectable()\nexport class PaymentService {\n  constructor(private readonly vnpay: VNPayService) {}\n\n  createPaymentUrl(orderId: string, amount: number, ip: string) {\n    return this.vnpay.buildPaymentUrl({\n      vnp_Amount: amount,\n      vnp_IpAddr: ip,\n      vnp_TxnRef: orderId,\n      vnp_OrderInfo: `Thanh toan don hang ${orderId}`,\n      vnp_ReturnUrl: `${process.env.APP_URL}\u002Fpayment\u002Freturn`,\n    });\n  }\n}\n```\n\n## Sandbox Testing\n\n```\nTMN Code:   DEMOV210\nSecret:     RAOEXHYVSDDIIENYWSLDIIZTANXUXZFJ\nHost:       https:\u002F\u002Fsandbox.vnpayment.vn\nTest card:  9704198526191432198 (ATM nội địa)\n```\n\n## Modular Import (v2.4.0+)\n\n```typescript\n\u002F\u002F Import theo module — giảm bundle size 80%\nimport { VNPay } from 'vnpay\u002Fvnpay';\nimport { HashAlgorithm, ProductCode } from 'vnpay\u002Fenums';\nimport type { VNPayConfig, BuildPaymentUrl } from 'vnpay\u002Ftypes-only'; \u002F\u002F 0KB runtime\n```\n\n## Security Checklist\n\n- [ ] `secureSecret` chỉ nằm trong env, không hardcode\n- [ ] Luôn xác thực chữ ký (`verifyReturnUrl`) trước khi cập nhật DB\n- [ ] Dùng HTTPS cho `vnp_ReturnUrl`\n- [ ] Log IPN để audit giao dịch\n- [ ] Không expose TMN Code phía frontend\n\n## Do NOT use for\n\n- Frontend payment UI — dùng API route của backend, không import trực tiếp\n- Non-VNPay gateways — xem skill `stripe-payments` hoặc `momo-integration`\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fvnpay-integration",1,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-11 23:56:26",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill vnpay-integration",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill vnpay-integration",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill vnpay-integration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fvnpay-integration\u002FSKILL.md",true,[],[48,56,63,71,79,87],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":52,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":18},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":18},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":67,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":18},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":75,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":18},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":18},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]