{"_id":"@airsoko/partner-app","_rev":"7-1f25d89c644ce397efdc4c7ed9b96d7f","name":"@airsoko/partner-app","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"@airsoko/partner-app","version":"0.1.0","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.0","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"3aa7d1f719f2e720f36e57d405346f7180aa10b7","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.0.tgz","fileCount":132,"integrity":"sha512-1obzBWFEB2E3vQ9EB5mcm70Yi53PjF+vGgC5W8BSdtgFSP26B1ErbE3w4OSBnPT6kvY1v4W/EIId72uLnKScHw==","signatures":[{"sig":"MEUCIECm4k0+EVyilrQclk3B2s2Wbro2InLoKRb+V4UDtC/QAiEAwr6kv8kZNlim4hoCIiiXoQ3Gu1N+SFY9zfE7Rqcwj3Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263372},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"b4ee77791b00278c31c7889d449a3dacf2dbd558","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.0_1780923296178_0.7707379989269088","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@airsoko/partner-app","version":"0.1.1","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.1","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"a065773d01f19f5646fe4029bdbb43805d760eba","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.1.tgz","fileCount":132,"integrity":"sha512-dxZyhXKcbtepozsno+eZGzIBacc/DHEo4vFdj0jQJxvzBliR/XJpNHS1uHo2MUKVM3fQENFgdImhZXTWytCOEg==","signatures":[{"sig":"MEYCIQCDlCldm8qqbF61KV7osxfPCfsXDsrlGwpkuP6y+6WtPgIhAKwQPqxbyGFfUcq3iCGl3eWfl7ceAluBhN2xsLVr5pQW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264699},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"275fa00555ad66022ca98125809cd988c29417d6","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.1_1781002745942_0.17587755108904557","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@airsoko/partner-app","version":"0.1.2","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.2","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"4cbe61fe41645171f3876a414f903b9f0bf40f65","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.2.tgz","fileCount":132,"integrity":"sha512-ixdU2UTJiVNEyF70zW5XYzlMUYuXwiK70dMRKnto/M4pAtf8lziSVuimSegS8SGOolw2rTxOau0NTlEy7NewFg==","signatures":[{"sig":"MEQCIFx9itQ5TWmvD1t6DVl7jGx7/1vK4W+KNEaOuiYlsU+wAiBTSxUh4epqNiJnBFuaEVMgNzBFPCxbIzyLwvUWl/PA1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268113},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"92a41f1ec104b4b81840253c0e963e64105d4d39","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.2_1781040313700_0.10375520509403269","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@airsoko/partner-app","version":"0.1.4","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.4","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"315dbade260a142c31b0df13b0fd1382c06c41ab","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.4.tgz","fileCount":135,"integrity":"sha512-uLDcwy3tlymvavdA8shSw+6UnrfBTTBQpBE2moD7i6EHBJJn4+a04AwkvARHratGUFYmDyQzUhCt3wHULA2PYw==","signatures":[{"sig":"MEUCIBg4dBf2DR2pXXiQZsG+T5Xi9rC0Bpw8aaprHTPx6td5AiEAgQxeSoUrM6zOtL4Xz4Czt0ZYC3H6lk50NC26pNl+F0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276548},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"7dc4b46e86f85cd79b58ee00aa4257afaeba9f9b","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.4_1781094430748_0.14215702867482216","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@airsoko/partner-app","version":"0.1.6","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.6","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"81a8ed9cfc541c3ccb077d4c4a538c461bdeecbc","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.6.tgz","fileCount":135,"integrity":"sha512-096g3WZ4/M+Jbb9IkcOxOILaavhfNDparAh3S4EH4Iot8CIzLRiu4GifPWHkblqSJFhWIOEQjCIpBe6NR+M1Uw==","signatures":[{"sig":"MEQCIAvS4DderSFHbJYIe3qd+ueiQLkAz6LNnYLqzGdWwjiwAiABbtpsF29AU5rvxhiy2EAki6543ePuH6AK37WncTdPzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281833},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"7dc4b46e86f85cd79b58ee00aa4257afaeba9f9b","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.6_1781096164587_0.32622965091007794","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@airsoko/partner-app","version":"0.1.7","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"license":"MIT","_id":"@airsoko/partner-app@0.1.7","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"dist":{"shasum":"55f421a351f44a36550fb21433ce2d6b78b22682","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.7.tgz","fileCount":138,"integrity":"sha512-/sIxtP4swKI93/Im5Lihpx/I38vS2PFywrRPxO1hLLAHnwvMzj4yFFEVigGX8BMOVJ8RSytG3ua+ICfYOaZt9w==","signatures":[{"sig":"MEYCIQC4MgSQwurpGGrjldbzIMSwTRmYH0GqZB5/FaaR/fa6XgIhALjkBDrPr/AbcGPdRKKaRYLgnNxbJLIi+8Lw2NUuGmsB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290300},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"}},"gitHead":"7dc4b46e86f85cd79b58ee00aa4257afaeba9f9b","private":false,"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","clean":"tsc --build --clean","prepack":"npm run build","rebuild":"npm run clean && npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"repository":{"url":"git+https://github.com/airsoko/airsoko-backend-panels.git","type":"git","directory":"packages/airsoko-partner-app"},"_npmVersion":"10.9.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"13.5.6","react":"18.2.0","typescript":"^4.9.5","@types/node":"18.11.18","@types/react":"18.0.26","@macive/tsconfig":"*"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/partner-app_0.1.7_1781096826104_0.9196021198008419","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@airsoko/partner-app","version":"0.1.8","description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","license":"MIT","private":false,"type":"commonjs","main":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/next/entry.d.ts","default":"./dist/next/entry.js"},"./next/graphql":{"types":"./dist/next/graphql-entry.d.ts","default":"./dist/next/graphql-entry.js"},"./next/oauth":{"types":"./dist/next/oauth-entry.d.ts","default":"./dist/next/oauth-entry.js"},"./next/standalone":{"types":"./dist/next/standalone-entry.d.ts","default":"./dist/next/standalone-entry.js"},"./next/embedded":{"types":"./dist/next/embedded-entry.d.ts","default":"./dist/next/embedded-entry.js"},"./next/session":{"types":"./dist/next/session-entry.d.ts","default":"./dist/next/session-entry.js"},"./next/standalone-session":{"types":"./dist/next/standalone-session-entry.d.ts","default":"./dist/next/standalone-session-entry.js"},"./next/middleware":{"types":"./dist/next/middleware.d.ts","default":"./dist/next/middleware.js"},"./react":{"types":"./dist/react-entry.d.ts","default":"./dist/react-entry.js"}},"scripts":{"build":"tsc --build --force --verbose && node -e \"console.log('@airsoko/partner-app: build complete → dist/')\"","rebuild":"npm run clean && npm run build","clean":"tsc --build --clean","typecheck":"tsc --noEmit","prepublishOnly":"npm run build","prepack":"npm run build"},"peerDependencies":{"next":">=13.0.0","react":">=17.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"react":{"optional":true}},"devDependencies":{"@macive/tsconfig":"*","@types/node":"18.11.18","@types/react":"18.0.26","next":"13.5.6","react":"18.2.0","typescript":"^4.9.5"},"keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"repository":{"type":"git","url":"git+https://github.com/airsoko/airsoko-backend-panels.git","directory":"packages/airsoko-partner-app"},"bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@airsoko/partner-app@0.1.8","gitHead":"c7219d796d09f4d2801b69feaf3a2e8ec66ec167","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-pP0WBUiJyyugeenSX5P9FfYSf60xg9khN4LZFFnqf+s/zSqRxd+Hh0h8HG6GjJDr2CsPTsoE1SDnSyEX4YkpNw==","shasum":"e353ff8cd5b126607096f9356e1b6b281d374e99","tarball":"https://registry.npmjs.org/@airsoko/partner-app/-/partner-app-0.1.8.tgz","fileCount":141,"unpackedSize":300431,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCDTD1yfZmnpo1XxpSd+TWhHJh2UA2Hsxvd1P3QFHIMSgIhAMTZ6OaO3FI9+oNVXdCjQGjyLNcMzIRLR3dBY0VZ0XHk"}]},"_npmUser":{"name":"cluewax","email":"cluewaxing@gmail.com"},"directories":{},"maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/partner-app_0.1.8_1781335912805_0.4469140799020499"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-08T12:54:56.058Z","modified":"2026-06-13T07:31:53.070Z","0.1.0":"2026-06-08T12:54:56.304Z","0.1.1":"2026-06-09T10:59:06.122Z","0.1.2":"2026-06-09T21:25:13.924Z","0.1.4":"2026-06-10T12:27:10.958Z","0.1.6":"2026-06-10T12:56:04.744Z","0.1.7":"2026-06-10T13:07:06.268Z","0.1.8":"2026-06-13T07:31:52.943Z"},"bugs":{"url":"https://github.com/airsoko/airsoko-backend-panels/issues"},"license":"MIT","homepage":"https://github.com/airsoko/airsoko-backend-panels/tree/main/packages/airsoko-partner-app#readme","keywords":["airsoko","partner-app","mapi","graphql","oauth","webhooks","embedded","standalone","bridge","nextjs"],"repository":{"type":"git","url":"git+https://github.com/airsoko/airsoko-backend-panels.git","directory":"packages/airsoko-partner-app"},"description":"Airsoko partner app SDK — MAPI GraphQL proxy, OAuth install, webhooks, embedded bridge, merchant launch, and Next.js catch-all routes","maintainers":[{"name":"cluewax","email":"cluewaxing@gmail.com"}],"readme":"# @airsoko/partner-app\n\nOfficial SDK for **Airsoko partner apps** on Next.js — MAPI GraphQL proxy, OAuth install, webhooks, merchant launch, embedded admin bridge, middleware, and React hooks.\n\nZero runtime dependencies. Optional `next` and `react` peer dependencies for route factories and hooks.\n\n> **Customer OAuth** (shop sign-in for storefront apps) uses [`@airsoko/oauth-client`](https://www.npmjs.com/package/@airsoko/oauth-client). Partner apps use **MAPI app OAuth** (`/api/apps/oauth/*` on MAPI).\n\n## Requirements\n\n- **Node.js** 18 or later\n- **Next.js** 13+ (App Router route handlers and middleware)\n- **React** 17+ (hooks and providers)\n\nYour app also needs its own session and storage stack (for example **NextAuth** + **SQLite**). Those are not bundled by this package.\n\n## Installation\n\n```bash\nnpm install @airsoko/partner-app next react\n```\n\nFor a full project scaffold with conventions, env templates, and sample pages:\n\n```bash\nnpx @airsoko/cli app init my-partner-app\n```\n\n## Partner dashboard setup\n\n1. Create a partner app in the **partner dashboard** (handle, app URL, scopes).\n2. Set credentials in `.env.local` (see [Environment](#environment)).\n3. Register this OAuth redirect URI:\n\n```\nhttps://your-app.example.com/api/airsoko/oauth/callback\n```\n\nLegacy apps using `legacySegments: true` may use `/api/oauth/callback` instead.\n\n## Quick start\n\nLike NextAuth: **one catch-all API route** wires every partner endpoint. Omit a handler block and that route returns 404.\n\n```ts\n// app/api/airsoko/[...slug]/route.ts\nexport { GET, POST } from '@/lib/partner-api'\n```\n\n```ts\n// lib/partner-api.ts\nimport { createAirsokoPartnerAppRouteHandlers, partnerAppOAuthRedirectUri } from '@airsoko/partner-app'\n\nexport const { GET, POST } = createAirsokoPartnerAppRouteHandlers({\n  graphql: { resolveCredentials: async (request) => ({ accessToken: '…', shopId: 1 }) },\n  oauth: {\n    redirectUri: partnerAppOAuthRedirectUri(),\n    onSuccess: async ({ token, request }) => {\n      // Persist installation in your DB, then redirect to finish login\n      return new URL('/auth/complete', request.url)\n    },\n  },\n})\n```\n\nScaffolded apps from `@airsoko/cli` include a complete `lib/partner-api.ts` with SQLite + NextAuth wiring.\n\n## What the SDK handles vs your app\n\n| SDK (`@airsoko/partner-app`) | Your app |\n|------------------------------|----------|\n| OAuth authorize + token exchange | Persist `access_token` in your database |\n| GraphQL / embedded proxies | Resolve credentials from session + DB |\n| Webhook HMAC verification | Upsert installation rows |\n| Merchant launch exchange | `persistInstallation` + one-time login codes |\n| Middleware CSP + install redirect | `isAuthenticated` (e.g. NextAuth JWT) |\n| React bridge + boot hooks | UI pages, product/customer panels |\n\n## Environment\n\n`AIRSOKO_*` is preferred; legacy `MACIVE_*` from older apps still works.\n\n```env\n# MAPI + app identity\nAIRSOKO_API_BASE=https://api.airsoko.com\nAIRSOKO_APP_URL=https://your-app.example.com\nAIRSOKO_APP_CLIENT_ID=\nAIRSOKO_APP_CLIENT_SECRET=\nAIRSOKO_APP_ACCESS_TOKEN=          # optional dev bypass\nAIRSOKO_APP_WEBHOOK_SECRET=\nAIRSOKO_SHOP_ID=1\n\n# Panels\nNEXT_PUBLIC_AIRSOKO_ADMIN_ORIGIN=https://admin.airsoko.com\nNEXT_PUBLIC_MARKETPLACE_ORIGIN=https://marketplace.airsoko.com\n\n# NextAuth (your app)\nNEXTAUTH_URL=https://your-app.example.com\nNEXTAUTH_SECRET=change-me\n```\n\n## API routes\n\nRoutes are mounted under `{basePath}` (default `/api/airsoko`).\n\n| Path | Method | Enabled when |\n|------|--------|--------------|\n| `graphql` | POST | `graphql` omitted or configured (default **on**) |\n| `oauth/start` | GET | `oauth` block present |\n| `oauth/callback` | GET | `oauth` present (`onSuccess` **required**) |\n| `standalone/exchange` | POST | `standalone` not `false` (default **on**) |\n| `standalone/session` | POST | `standalone.session` configured |\n| `embedded/context` | GET | `embedded` not `false` (default **on**) |\n| `embedded/credentials` | POST | same |\n| `embedded/bridge` | GET | same |\n| `session/context` | GET | `session` block present |\n| `webhooks/macive` | POST | `webhooks` block present |\n| `install/marketplace` | GET | `install` or `legacySegments: true` |\n| `install/admin` | GET | same |\n\nDisable routes explicitly:\n\n```ts\ncreateAirsokoPartnerAppRouteHandlers({\n  oauth: false,\n  webhooks: false,\n  embedded: { bridge: false },\n  standalone: { exchange: false },\n})\n```\n\n### Legacy paths\n\nFor existing apps on `/api/macive/graphql`, `/api/oauth/*`, `/api/apps/embedded/*`:\n\n```ts\ncreateAirsokoPartnerAppRouteHandlers({\n  basePath: '/api',\n  legacySegments: true,\n  oauth: { onSuccess: async (...) => ... },\n})\n```\n\nMount at `app/api/[...slug]/route.ts`.\n\n## Middleware\n\nGate standalone routes with your session check (NextAuth example):\n\n```ts\n// middleware.ts\nimport type { NextRequest } from 'next/server'\nimport { getToken } from 'next-auth/jwt'\nimport {\n  createAirsokoPartnerAppMiddleware,\n  type PartnerAppMiddlewareRequest,\n} from '@airsoko/partner-app/next'\n\nconst { middleware } = createAirsokoPartnerAppMiddleware({\n  isAuthenticated: async (request: PartnerAppMiddlewareRequest) => {\n    const token = await getToken({\n      req: request as unknown as NextRequest,\n      secret: process.env.NEXTAUTH_SECRET,\n    })\n    return Boolean(token?.installationId)\n  },\n})\n\nexport { middleware }\n\nexport const config = {\n  matcher: ['/((?!_next/static|_next/image|favicon.ico|.*\\\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)'],\n}\n```\n\n## React\n\n```tsx\nimport {\n  AppNavigationProvider,\n  MerchantLaunchGate,\n  PartnerAppProvider,\n  PartnerAppBootScreen,\n  useAirsokoPartnerApp,\n  useAirsokoBridgeApp,\n  useAppNavigation,\n} from '@airsoko/partner-app/react'\n```\n\nWrap your app:\n\n```tsx\n<SessionProvider>\n  <PartnerAppProvider>\n    <MerchantLaunchGate>{children}</MerchantLaunchGate>\n  </PartnerAppProvider>\n</SessionProvider>\n```\n\nOverride API paths for legacy mounts:\n\n```tsx\nuseAirsokoPartnerApp({\n  sessionToken,\n  currentPath,\n  onPathChange,\n  apiPaths: {\n    graphql: '/api/macive/graphql',\n    sessionContext: '/api/session/context',\n    standaloneExchange: '/api/apps/standalone/exchange',\n  },\n})\n```\n\n## Handler options\n\nTypeScript enforces required callbacks when a block is present:\n\n| Block | Required when present | Your responsibility |\n|-------|----------------------|---------------------|\n| `oauth` | `onSuccess` | DB upsert + redirect to `/auth/complete` |\n| `session` | `resolveContext` **or** `resolvePayload` | Read session + DB |\n| `standalone.session` | `persistInstallation` | DB upsert + return `loginCode` |\n| `webhooks` | `onAppInstalled` | DB upsert from webhook payload |\n| `graphql.resolveCredentials` | optional | Default uses env token; override for session/DB |\n\n```ts\nimport type { AirsokoPartnerAppRouteOptions } from '@airsoko/partner-app/next'\n\nconst options: AirsokoPartnerAppRouteOptions = {\n  basePath: '/api/airsoko',\n  legacySegments: false,\n  oauth: {\n    redirectUri: 'https://app.example.com/api/airsoko/oauth/callback',\n    onSuccess: async ({ token, request }) => new URL('/auth/complete', request.url),\n  },\n  session: {\n    resolveContext: async () => ({ shopId: 1, grantedScopes: ['read_products'] }),\n  },\n  standalone: {\n    session: {\n      persistInstallation: async (input) => ({\n        loginCode: 'one-time-code',\n        installationId: input.installationId,\n      }),\n    },\n  },\n  webhooks: {\n    onAppInstalled: async (payload) => ({ ok: true, shopId: payload.shopId }),\n  },\n}\n```\n\n## Package exports\n\n| Import | Purpose |\n|--------|---------|\n| `@airsoko/partner-app` | Config, MAPI, bridge, webhooks, paths, install URLs |\n| `@airsoko/partner-app/next` | Catch-all + middleware + route factories |\n| `@airsoko/partner-app/next/middleware` | Middleware only |\n| `@airsoko/partner-app/next/graphql` | GraphQL route factory |\n| `@airsoko/partner-app/next/oauth` | OAuth route factories |\n| `@airsoko/partner-app/next/embedded` | Embedded proxy routes |\n| `@airsoko/partner-app/next/standalone` | Merchant launch exchange |\n| `@airsoko/partner-app/next/session` | Session context route |\n| `@airsoko/partner-app/react` | Hooks + providers |\n\n## Embedded → standalone handoff\n\nEmbedded apps cannot use MAPI `merchant_launch_token` (embedded flag on the app record). To open the same shop in a full-page tab with a persistent browser session:\n\n```ts\nimport { openStandaloneFromEmbedded } from '@airsoko/partner-app/react'\n\nawait openStandaloneFromEmbedded({\n  sessionToken: embeddedJwt,\n  shopId: context.shopId,\n  appId: context.appId,\n  installationId: context.installationId,\n  shopName: context.shopName,\n  nextPath: '/themes',\n})\n```\n\nFlow: embedded credentials → `POST /api/apps/standalone/session` → new tab `/auth/complete` → NextAuth cookie. OAuth is only required once per browser.\n\n## Related packages\n\n- [@airsoko/cli](https://www.npmjs.com/package/@airsoko/cli) — Scaffold partner apps and themes\n- [@macive/ui](https://www.npmjs.com/package/@macive/ui) — Admin design system\n- [@airsoko/oauth-client](https://www.npmjs.com/package/@airsoko/oauth-client) — Customer OAuth client\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}