@proxyrequest/sdk 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +58 -8
- package/SECURITY.md +1 -1
- package/dist/index.cjs +665 -266
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +249 -74
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +249 -74
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +666 -265
- package/dist/index.js.map +1 -1
- package/dist/{models-VMmyyuf_.d.cts → models-Ci7ojtEW.d.cts} +13 -9
- package/dist/models-Ci7ojtEW.d.cts.map +1 -0
- package/dist/{models-ECy_bhdn.d.ts → models-rpFTQLRE.d.ts} +13 -9
- package/dist/models-rpFTQLRE.d.ts.map +1 -0
- package/dist/models.d.cts +2 -2
- package/dist/models.d.ts +2 -2
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.ts +1 -1
- package/dist/{schema-CvCxeox5.d.cts → schema-B2orTIrr.d.cts} +970 -453
- package/dist/schema-B2orTIrr.d.cts.map +1 -0
- package/dist/{schema-CvCxeox5.d.ts → schema-B2orTIrr.d.ts} +970 -453
- package/dist/schema-B2orTIrr.d.ts.map +1 -0
- package/docs/SDK-AUDIT.md +273 -0
- package/docs/backend-compatibility.md +66 -0
- package/docs/errors-and-pagination.md +1 -1
- package/docs/getting-started.md +1 -2
- package/docs/releasing.md +13 -3
- package/docs/reseller-workflow.md +1 -1
- package/docs/webhooks.md +4 -7
- package/package.json +3 -2
- package/dist/models-ECy_bhdn.d.ts.map +0 -1
- package/dist/models-VMmyyuf_.d.cts.map +0 -1
- package/dist/schema-CvCxeox5.d.cts.map +0 -1
- package/dist/schema-CvCxeox5.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-B2orTIrr.d.ts","names":[],"sources":["../src/generated/schema.ts"],"mappings":";UAAiB;EACf;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;IACA;;;;;IAKA,QAAQ;IACR;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;;;;;IAKL,KAAK;IACL;;;;;IAKA,QAAQ;IACR;IACA;;;;;IAKA,OAAO;IACP;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;;;;;IAKA,QAAQ;IACR;IACA;;;;;IAKA,OAAO;IACP;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;;;;;IAKA,QAAQ;IACR;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;;;;;IAKA,QAAQ;IACR;IACA;;;;;IAKA,OAAO;IACP;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;;;;;IAKA,QAAQ;IACR;IACA;;;;;IAKA,OAAO;IACP;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;;;;;IAMF,KAAK;IACL;IACA;;;;;IAKA,QAAQ;IACR;IACA;;;;;IAKA,OAAO;IACP;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;IAEF;IACA;;;;;IAKA,MAAM;IACN;IACA;IACA;IACA;IACA;;EAEF;IACE;MACE;MACA;MACA;MACA;;I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UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;;;MAGF;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;;QAEE;QAqCA;;QAEA;;QAEA;;QAEA;QACA;;QAEA;;QAEA;;QAEA;QACA;QACA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;;UAEE;;UAEA;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;;YAEA;YACA;YACA;;;;;;EAMV;IACE;MACE;MACA;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;;UAEE;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;QAEA;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;;UAEE;WACC;;QAEH;;;MAGF;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;;UAEpB;WACC;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE;;;;MAIJ;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;QACA;;QAEA;;QAEA;QACA;;QAEA;;QAEA;;QAEA;;QAEA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;QACA;;QAEA;QACA;;QAEA;;QAEA;;QAEA;QACA;;QAEA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;;QAEE;;MAEF;;QAEE;;MAEF;QACE;;MAEF;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;;QAEA;QACA;;QAEA;;QAEA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;QAEA;;QAEA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;;QAEA;;QAEA;;QAEA;;QAEA;;QAEA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;;UAEE;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;;;MAGF;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;;UAEpB;WACC;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;;UAEE;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;;UAEpB;WACC;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;;QAEE;;QAEA;;QAEA;;QAEA;QACA;QACA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;;;MAGF;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;QACA;;QAEA;;QAEA;;QAEA;;QAEA;;QAEA;QACA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;;UAEE;;UAEA;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;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AAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;QACE;QACA;;QAEA;;QAEA;;QAEA;QACA;;MAEF;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;;QAEE;;QAEA;;MAEF;;QAEE;;MAEF;MACA;;IAEF;IACA;;MAEE;QACE;WACG;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;MAEF;MACA;;IAEF;MACE;QACE,oBAAoB;QACpB,qCAAqC;QACrC,uBAAuB;;;IAG3B;;MAEE;QACE;;UAEE;;UAEA;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;;UAEE;WACC;;QAEH;UACE,oBAAoB;;;;MAIxB;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;;EAMX;IACE;MACE;MACA;;QAEE;;QAEA;;QAEA;;MAEF;;QAEE;;MAEF;;IAEF;IACA;;MAEE;QACE;;UAEE;WACC;;QAEH;;;MAGF;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;WACnB;;QAEH;UACE;YACE;YACA;;aAEC;;;;;MAKP;QACE;UACE,oBAAoB;;UAEpB;WACC;;QAEH;UACE;YACE;YACA;;aAEC"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Аудит TypeScript / JavaScript SDK
|
|
2
|
+
|
|
3
|
+
## Статус исправлений — 2026-09-07
|
|
4
|
+
|
|
5
|
+
Все перечисленные ниже SDK-находки исправлены. Каноническая публичная схема
|
|
6
|
+
перегенерирована: **81 операция, 129 схем**. Все три SDK используют побайтово
|
|
7
|
+
одинаковую копию; SHA-256 и коммит источника закреплены в `openapi/source.json`.
|
|
8
|
+
Сгенерировано **79 поддерживаемых операций / 17 ресурсов**: две отключённые
|
|
9
|
+
sessions-management операции исключены по согласованному решению, без удаления
|
|
10
|
+
sticky-параметров генерации прокси и без изменения маршрутов бэкенда.
|
|
11
|
+
|
|
12
|
+
| Находка | Исправление |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| TS-01 | Добавлены verifyOtp и union 200/202 для password/Google login. |
|
|
15
|
+
| TS-02 | setupTwoFactor передаёт body с password/credential и текущим code при замене MFA. |
|
|
16
|
+
| TS-03 | Обновлены gateway, валюта, суммы и checkout-поля; будущие gateway-строки не ломают типы. |
|
|
17
|
+
| TS-04 | User описывает оба режима; InvoiceRead — union Invoice и InvoiceShort; допустимые null отражены в схеме. |
|
|
18
|
+
| TS-05 | Счётчики вычисляются, operationId проверяются, manifest сверяется с SHA-256 и покрытием. |
|
|
19
|
+
| BE-01 | Исправлены pk-сигнатуры invoice PDF/pay-link и coupon redeems; добавлены router-регрессии. |
|
|
20
|
+
| BE-02 | Удалены публичный sessions-ресурс, его методы и отдельные сгенерированные модели/документы из SDK. |
|
|
21
|
+
|
|
22
|
+
Проверки SDK: `npm run verify` (21 тест, типизация, линтер, сборка, package validation/smoke), `npm run test:browser` (1 тест).
|
|
23
|
+
Фикстуры форм User/Invoice получены из реальных сериализаторов бэкенда на
|
|
24
|
+
синтетических объектах; серверный тест проверяет их соответствие текущему коду.
|
|
25
|
+
Тесты SDK проверяют MFA, платежи, вариативные ответы и регрессионные сценарии.
|
|
26
|
+
Это локальная проверка, не подтверждение развёртывания в production.
|
|
27
|
+
|
|
28
|
+
Версии пакетов не изменялись; релизы, теги и публикации пакетов не создавались.
|
|
29
|
+
Примеры миграции и MFA: `docs/backend-compatibility.md` внутри репозитория SDK.
|
|
30
|
+
|
|
31
|
+
## Исходный аудит (до исправлений)
|
|
32
|
+
|
|
33
|
+
Ссылки на SDK закреплены на исходном коммите. Пути и номера строк бэкенда
|
|
34
|
+
сохранены как исторические ориентиры: его исходное рабочее состояние содержало
|
|
35
|
+
незакоммиченные изменения.
|
|
36
|
+
|
|
37
|
+
Далее сохранён исторический отчёт. Его выводы, счётчики, матрица и номера строк
|
|
38
|
+
относятся к исходному состоянию и не являются описанием обновлённой SDK.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
SDK: `@proxyrequest/sdk` 1.0.0, каталог `javascript-sdk`, HEAD `0b2ddca2255367c9404ae3af2d1c167162a6a76b`.
|
|
42
|
+
|
|
43
|
+
**Вывод:** HTTP-покрытие старого контракта полное, но текущие MFA-сценарии несовместимы, платёжные и конфигурационно-зависимые модели устарели. JavaScript часто сохраняет новые поля в объекте ответа, тогда как TypeScript запрещает корректные запросы или обещает поля, которых сервер не возвращает.
|
|
44
|
+
|
|
45
|
+
## Границы и методика
|
|
46
|
+
|
|
47
|
+
Аудит выполнен 2026-09-07 по рабочим файлам. Бэкенд: `/home/yuri/Projects/papaproxy/api`, HEAD `f10464717b19f98916b45cc25e7405610865957d`, с существующими незакоммиченными изменениями. Выводы относятся к этому рабочему состоянию, а не только к коммиту и не к проверенному production-развёртыванию.
|
|
48
|
+
|
|
49
|
+
Проверены публичная OpenAPI-схема (`api/openapi.yml`), состав публичного schema URLConf (`api/apps/routing/infrastructure/django/schema.py:35`), router, существенные serializers/viewsets, сгенерированные операции, клиентский транспорт, пагинация, ошибки, подписи webhook и процесс синхронизации схемы. Внутренние/admin API и входящие callback-маршруты платёжных провайдеров не считаются обязательными методами клиентской SDK.
|
|
50
|
+
|
|
51
|
+
Сохранённый публичный контракт содержит **81 операцию и 127 схем**. Независимая генерация публичной схемы в тестовом окружении также дала 81 операцию и 127 схем. Отдельно проверены оба значения `SITE_PACKAGE_BASED_AUTH`: формы ответов действительно зависят от настройки. Различия числовых ограничений при генерации под SQLite не объявлялись дефектами production-контракта.
|
|
52
|
+
|
|
53
|
+
Во всех SDK сохранена одна и та же старая схема: **80 операций и 124 схемы**. Сопоставление HTTP-методов, шаблонов путей и публичных обёрток не выявило пропущенных операций из этой старой схемы. Единственная отсутствующая операция относительно текущего публичного списка — `POST /login/otp`. Это номинальное покрытие методов, а не оценка фактической совместимости.
|
|
54
|
+
|
|
55
|
+
SHA-256 схем:
|
|
56
|
+
|
|
57
|
+
- текущая API: `423fc57ebe9406a9a1a80ee7acfd8e0827f6196b317af90b0c24f64172e16b03`;
|
|
58
|
+
- сохранённая SDK: `0ed69e781aa752ac8e9c9b1974cd82810adbf1fd99a461724bd73432740d8737`.
|
|
59
|
+
|
|
60
|
+
Поиск выполнен через knowledge graph с проверкой покрытия и чтением исходников. Частично разобранные TypeScript re-export строки проверены непосредственно. Проигрывались синтетические ответы и локальные вызовы serializers/router; обращений к рабочему API, создания пользователей/счетов и изменений реализаций SDK/бэкенда не выполнялось.
|
|
61
|
+
|
|
62
|
+
Приоритеты: **P1** — блокирует основной сценарий при указанных условиях; **P2** — ограничивает часть API, искажает данные или ухудшает диагностику/сопровождение. Порядок внутри приоритета отражает рекомендуемую последовательность исправлений.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## Находки в SDK
|
|
66
|
+
|
|
67
|
+
### TS-01 · P1 · Невозможно завершить вход с OTP; ответ 202 имеет неверный тип
|
|
68
|
+
|
|
69
|
+
`authorization.login()` и `loginWithGoogle()` объявляют только результат с `token` и `refresh`. Бэкенд для аккаунта с MFA возвращает HTTP 202:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{"status":"otp_required","challenge":"single-use-challenge","expires_in":300}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Транспорт принимает любой успешный HTTP-статус и приводит JSON к заявленному `Result`. В локальной проверке `loginWithResponse()` вернул `statusCode=202` и объект challenge, но `data.token === undefined`. Компилятор при этом сообщает, что `challenge` отсутствует на типе результата. Метода для `POST /login/otp` нет.
|
|
76
|
+
|
|
77
|
+
Последствие: код, который после разрешения Promise считает пользователя авторизованным, получает отсутствующие токены; штатного продолжения MFA в типизированной SDK нет.
|
|
78
|
+
|
|
79
|
+
Источники: [AuthorizationResource](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/resources.ts#L649), [приведение ответа к Result](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/client.ts#L192), контракт OTP (`api/openapi.yml:8553`), VerifyLoginOTPView (`api/apps/core/authentication/api.py:57`), Google sign-in (`api/apps/core/api/viewsets.py:1407`).
|
|
80
|
+
|
|
81
|
+
Исправление: добавить модели challenge/verify, метод завершения входа и различимый результат 200/202. Проверить оба способа входа и последующий обмен `challenge + code` на токены.
|
|
82
|
+
|
|
83
|
+
### TS-02 · P1 · setupTwoFactor не передаёт обязательное подтверждение личности
|
|
84
|
+
|
|
85
|
+
`profile.setupTwoFactor()` не имеет параметра `body` и отправляет пустой POST. Бэкенд теперь требует действующий пароль либо Google `credential`; при замене включённого аутентификатора также нужен текущий `code`. `disableTwoFactor()` типизирует тело только как `{code: string}`, хотя отключение активной 2FA также требует пароль/credential.
|
|
86
|
+
|
|
87
|
+
Локально подтверждено пустое тело setup-запроса. Компилятор отвергает и `setupTwoFactor({body: ...})`, и `disableTwoFactor({body: {code, password}})`.
|
|
88
|
+
|
|
89
|
+
Источники: [setupTwoFactor](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/resources.ts#L2521), [TwoFactorDisableRequest](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/schema.ts#L2925), TwoFactorViewSet (`api/apps/core/api/viewsets.py:1522`), require_primary_factor (`api/apps/core/authentication/service.py:192`).
|
|
90
|
+
|
|
91
|
+
Исправление: регенерировать обе модели запросов, передавать body для setup, описать первоначальную настройку/замену/отключение. После успешного изменения MFA учитывать отзыв ранее выданных JWT. `confirmTwoFactor({body:{code}})` по форме запроса остаётся совместимым; изменение примеров в OpenAPI само по себе не является дефектом этого метода.
|
|
92
|
+
|
|
93
|
+
### TS-03 · P2 · Новые платёжные шлюзы, валюта и состояние checkout отсутствуют в типах
|
|
94
|
+
|
|
95
|
+
В запросе создания счёта разрешены только `crypto | wallet | manual | stripe`. Бэкенд также поддерживает `credit_card` и конкретные провайдеры, например `whitepay`, `wayforpay`, `monobank`, `liqpay`. Отсутствует `payment_currency`, необходимая для явного выбора валюты регионального провайдера.
|
|
96
|
+
|
|
97
|
+
Устарели также тип фильтра `invoices.list({gateway})` и модель ответа `Invoice`. В ней отсутствуют `currency`, `payment_amount`, `payment_currency`, `provider_checkout_id`, `provider_payment_id`, `checkout_status`, поля `fx_*`; сохранены уже удалённые из публичного ответа `coinbase_charge_id` и `coingate_order_token`. В `SettingsResponse` нет `payment_gateways` с возможностями и валютами провайдеров.
|
|
98
|
+
|
|
99
|
+
Компилятор воспроизвёл:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
TS2322: Type '"whitepay"' is not assignable to type '"stripe" | "wallet" | "manual" | "crypto"'.
|
|
103
|
+
TS2353: 'payment_currency' does not exist in the invoice request type.
|
|
104
|
+
TS2339: Property 'payment_amount' does not exist on the invoice response type.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Runtime JSON не фильтруется: новые поля ответа физически сохраняются. Поэтому это ограничение типизированного API, а не доказательство, что JavaScript не способен вызвать новый gateway. Обход через `request()` возможен, но теряет типовую поддержку.
|
|
108
|
+
|
|
109
|
+
Источники: [платёжные типы](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/schema.ts#L1754), [SettingsResponse](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/schema.ts#L2804), InvoiceCreateSerializer (`api/apps/billing/api/serializers.py:126`), InvoiceSerializer (`api/apps/billing/api/serializers.py:28`), PaymentGateway (`api/openapi.yml:18607`).
|
|
110
|
+
|
|
111
|
+
Исправление: обновить запросы, фильтры, ответы и примеры checkout. Для новых значений gateway предусмотреть расширяемый string-тип. Ошибку создания checkout HTTP 502 транспорт уже нормализует; `invoice_id` и `retryable` следует разбирать из payload, а не повторять создание счёта как заведомо не состоявшееся.
|
|
112
|
+
|
|
113
|
+
### TS-04 · P2 · Типы User и Invoice не отражают допустимые ответы бэкенда
|
|
114
|
+
|
|
115
|
+
Есть два независимых расхождения.
|
|
116
|
+
|
|
117
|
+
1. `Invoice.package`, `country` и `coupon` объявлены объектами без `null`. Реальные поля модели nullable, а `InvoiceSerializer` на счёте пополнения баланса возвращает все три как `null`. Например, `invoice.package.name` проходит проверку типов, но падает при исполнении.
|
|
118
|
+
2. При `SITE_PACKAGE_BASED_AUTH=True` `UserSerializer` возвращает `orders` вместо `data`, `data_spent`, `data_updated`, `proxy_password`, `proxy_password_reset`. Тип `User` содержит второй набор как обязательные поля и не содержит `orders`. При `False` методы чтения счетов используют `InvoiceShortSerializer`, который исключает, среди прочего, `package`, `user_id`, `type`, `payment_url`, но SDK всё равно обещает полный `Invoice`.
|
|
119
|
+
|
|
120
|
+
В тестовой генерации схемы и при проверке serializers оба режима подтверждены. Значение настройки на production не устанавливалось; это условные проблемы поддерживаемых конфигураций.
|
|
121
|
+
|
|
122
|
+
Источники: [Invoice/User types](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/schema.ts#L1754), [User](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/src/generated/schema.ts#L2934), динамические поля User (`api/apps/core/api/serializers/users.py:269`), выбор InvoiceSerializer (`api/apps/billing/api/viewsets.py:121`), InvoiceShortSerializer (`api/apps/billing/api/serializers.py:101`).
|
|
123
|
+
|
|
124
|
+
Исправление: сначала привести серверную OpenAPI к реальной nullable/вариативной форме, затем регенерировать модели. Нужны отдельные модели/union для режимов либо стабильная общая форма ответа. Простая синхронизация текущего `openapi.yml` не устранит все эти расхождения.
|
|
125
|
+
|
|
126
|
+
### TS-05 · P2 · Метаданные схемы неверны, штатное обновление контракта заблокировано
|
|
127
|
+
|
|
128
|
+
[openapi/source.json](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/openapi/source.json#L1) заявляет **82 операции, 127 схем** и SHA-256 `bd1528198b74ac295396aef23333368e9a358b31e558d6cd0a01d286983f0ae6`. Фактический файл содержит **80/124** и другой SHA-256, приведённый выше.
|
|
129
|
+
|
|
130
|
+
[sync-openapi.ts](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/scripts/sync-openapi.ts#L30) принимает только 82/127. Выполненный запуск с текущим бэкендом завершился до записи файлов:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
Error: Unexpected contract size: 81 operations and 127 schemas.
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
[Контрактный тест](https://github.com/proxyrequest/javascript-sdk/blob/0b2ddca2255367c9404ae3af2d1c167162a6a76b/tests/contract.test.ts#L10) проверяет наличие 80 методов относительно собственной старой схемы, но не проверяет соответствие SHA-256 манифесту. Поэтому обычные тесты проходят при недостоверных метаданных.
|
|
137
|
+
|
|
138
|
+
Исправление: пересоздать manifest из фактического файла, убрать зависимость sync от единственного числа операций, проверять digest и семантический diff с выбранной ревизией публичного API. После обновления добавить mapping для OTP и контрактные сценарии из этого отчёта.
|
|
139
|
+
|
|
140
|
+
## Проблемы бэкенда, влияющие на эту SDK
|
|
141
|
+
|
|
142
|
+
### BE-01 · P1 · Три публичных detail-маршрута падают при передаче `pk`
|
|
143
|
+
|
|
144
|
+
| HTTP-маршрут | Обработчик |
|
|
145
|
+
| --- | --- |
|
|
146
|
+
| `GET /invoices/{id}/download/pdf` | `InvoicesViewSet.download_pdf(self, request)` |
|
|
147
|
+
| `GET /invoices/{id}/pay` | `InvoicesViewSet.pay_link(self, request)` |
|
|
148
|
+
| `GET /coupons/{id}/redeems` | `CouponsViewSet.redeems(self, request)` |
|
|
149
|
+
|
|
150
|
+
DRF router передаёт идентификатор как `pk`, но обработчики не принимают ни `pk`, ни `**kwargs`. Через настоящий `django.urls.resolve()` и вызов соответствующего view воспроизведены:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
TypeError: InvoicesViewSet.download_pdf() got an unexpected keyword argument 'pk'
|
|
154
|
+
TypeError: InvoicesViewSet.pay_link() got an unexpected keyword argument 'pk'
|
|
155
|
+
TypeError: CouponsViewSet.redeems() got an unexpected keyword argument 'pk'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
При проверке были заменены только `initial()` и обработка исключения, чтобы изолировать диспетчеризацию от авторизации и БД. Это подтверждённая ошибка вызова обработчика, а не результат запроса к развёрнутому серверу. SDK формируют правильные HTTP-методы и пути; исправление требуется на стороне API.
|
|
159
|
+
|
|
160
|
+
Источники: InvoicesViewSet (`api/apps/billing/api/viewsets.py:197`), CouponsViewSet.redeems (`api/apps/marketing/api/viewsets.py:444`), регистрация router (`api/apps/routing/infrastructure/django/public.py:95`).
|
|
161
|
+
|
|
162
|
+
Исправление: принимать `pk=None` или `*args, **kwargs`; добавить HTTP-тесты всех трёх detail-action через router. После этого повторить интеграционные проверки SDK для платёжной ссылки, PDF и погашений купона.
|
|
163
|
+
|
|
164
|
+
### BE-02 · P2 · Управление sessions отключено, хотя SDK обещает успешные ответы
|
|
165
|
+
|
|
166
|
+
Авторизованные `GET /sessions` и `DELETE /sessions/{id}` безусловно вызывают `_unavailable()` и возвращают 403 с причиной `errors.proxy.session_ownership_unavailable`. Актуальная схема уже не содержит успешного ответа для этих операций; сохранённая схема SDK всё ещё содержит старые `SessionListResponse` / `SessionDeleteResponse`.
|
|
167
|
+
|
|
168
|
+
Это ограничение текущего API, а не неправильный ключ пользователя. Следует отметить методы как временно недоступные/deprecated и обновить документацию. Возвращать возможность управления сессиями нужно только после реализации проверки владельца на сервере.
|
|
169
|
+
|
|
170
|
+
Источник: SessionViewSet (`api/apps/core/api/viewsets.py:1622`).
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
## Что проверено и работает в рассмотренных сценариях
|
|
174
|
+
|
|
175
|
+
- Все 80 старых операций имеют публичные методы и варианты `WithResponse`; HTTP-методы/пути соответствуют сохранённому контракту.
|
|
176
|
+
- Заголовки `Authorization: Static ...` и `Bearer ...`, язык, ETag/If-Match и idempotency реализованы; поддерживаемые операции получают один ключ на попытки повторного запроса.
|
|
177
|
+
- Пагинатор извлекает offset и повторно вызывает тот же ресурс, а не отправляет авторизацию на URL из `next`.
|
|
178
|
+
- Проверка webhook соответствует фактическому accountant sender: `X-Signature` содержит стандартный Base64 от HMAC-SHA256 по точным байтам исходного тела. Timestamp в подпись не входит.
|
|
179
|
+
- `request()` позволяет временно вызвать новый endpoint; отсутствие типизированного метода не означает отсутствие низкоуровневого обхода.
|
|
180
|
+
|
|
181
|
+
## Проверки и порядок исправлений
|
|
182
|
+
|
|
183
|
+
`npm test -- --reporter=dot`: **17 passed**, 4 файла. `npm run typecheck`: **успешно**. Отдельная проверка TypeScript Compiler API на корректных для нового API вызовах дала шесть ожидаемых ошибок типов: OTP challenge, body setup, password disable, gateway, payment_currency, payment_amount. Мок HTTP 202 подтвердил различие между объявленным типом и реальным результатом.
|
|
184
|
+
|
|
185
|
+
Рекомендуемый порядок: исправить BE-01 в API; согласовать серверные формы User/Invoice; обновить схему/mapping/manifest; реализовать MFA; обновить платежи; добавить тесты на реальные варианты ответов. Проверять нужно не только существование методов, но и разбор 202, nullable invoice, оба auth-режима и новые шлюзы.
|
|
186
|
+
|
|
187
|
+
## Полная матрица методов
|
|
188
|
+
|
|
189
|
+
В таблице «есть» означает наличие HTTP-операции в публичной обёртке. Ограничения и ошибки описаны выше. Указаны основные методы; варианты `WithResponse` не дублируются.
|
|
190
|
+
|
|
191
|
+
| HTTP | Путь | Метод SDK |
|
|
192
|
+
| --- | --- | --- |
|
|
193
|
+
| GET | `/affiliates` | `affiliates.list()` |
|
|
194
|
+
| GET | `/affiliates/rewards` | `affiliates.listRewards()` |
|
|
195
|
+
| GET | `/affiliates/rewards/overall` | `affiliates.getRewardsOverall()` |
|
|
196
|
+
| GET | `/analytics/{id}/transactions` | `analytics.getTransactions()` |
|
|
197
|
+
| GET | `/analytics/connections` | `analytics.getConnections()` |
|
|
198
|
+
| GET | `/analytics/domains` | `analytics.listDomains()` |
|
|
199
|
+
| GET | `/analytics/feed` | `analytics.listFeed()` |
|
|
200
|
+
| GET | `/analytics/logs` | `analytics.listLogs()` |
|
|
201
|
+
| GET | `/analytics/overall` | `analytics.getOverall()` |
|
|
202
|
+
| GET | `/api-keys` | `apiKeys.list()` |
|
|
203
|
+
| POST | `/api-keys` | `apiKeys.create()` |
|
|
204
|
+
| DELETE | `/api-keys/{id}` | `apiKeys.delete()` |
|
|
205
|
+
| GET | `/coupons` | `coupons.list()` |
|
|
206
|
+
| POST | `/coupons` | `coupons.create()` |
|
|
207
|
+
| GET | `/coupons/{id}` | `coupons.get()` |
|
|
208
|
+
| PUT | `/coupons/{id}` | `coupons.replace()` |
|
|
209
|
+
| PATCH | `/coupons/{id}` | `coupons.update()` |
|
|
210
|
+
| DELETE | `/coupons/{id}` | `coupons.delete()` |
|
|
211
|
+
| GET | `/coupons/{id}/redeems` | `coupons.listRedeems()` |
|
|
212
|
+
| POST | `/coupons/calculate-price` | `coupons.calculatePrice()` |
|
|
213
|
+
| GET | `/integrations/telegram/connection` | `telegram.getConnection()` |
|
|
214
|
+
| PATCH | `/integrations/telegram/connection` | `telegram.updateConnection()` |
|
|
215
|
+
| DELETE | `/integrations/telegram/connection` | `telegram.deleteConnection()` |
|
|
216
|
+
| POST | `/integrations/telegram/link` | `telegram.createLink()` |
|
|
217
|
+
| GET | `/invoices` | `invoices.list()` |
|
|
218
|
+
| POST | `/invoices` | `invoices.create()` |
|
|
219
|
+
| GET | `/invoices/{id}` | `invoices.get()` |
|
|
220
|
+
| DELETE | `/invoices/{id}` | `invoices.delete()` |
|
|
221
|
+
| GET | `/invoices/{id}/download/pdf` | `invoices.downloadPdf()` |
|
|
222
|
+
| GET | `/invoices/{id}/pay` | `invoices.getPaymentLink()` |
|
|
223
|
+
| GET | `/locations/asn` | `locations.listAsns()` |
|
|
224
|
+
| GET | `/locations/cities` | `locations.listCities()` |
|
|
225
|
+
| GET | `/locations/cities/{id}` | `locations.getCity()` |
|
|
226
|
+
| GET | `/locations/continents` | `locations.listContinents()` |
|
|
227
|
+
| GET | `/locations/continents/{id}` | `locations.getContinent()` |
|
|
228
|
+
| GET | `/locations/countries` | `locations.listCountries()` |
|
|
229
|
+
| GET | `/locations/countries/{id}` | `locations.getCountry()` |
|
|
230
|
+
| GET | `/locations/isps` | `locations.listIsps()` |
|
|
231
|
+
| GET | `/locations/regions` | `locations.listRegions()` |
|
|
232
|
+
| GET | `/locations/regions/{id}` | `locations.getRegion()` |
|
|
233
|
+
| POST | `/login` | `authorization.login()` |
|
|
234
|
+
| POST | `/login/google` | `authorization.loginWithGoogle()` |
|
|
235
|
+
| POST | `/login/otp` | **Отсутствует — TS-01** |
|
|
236
|
+
| GET | `/news` | `news.list()` |
|
|
237
|
+
| GET | `/orders` | `orders.list()` |
|
|
238
|
+
| GET | `/orders/{id}` | `orders.get()` |
|
|
239
|
+
| PATCH | `/orders/{id}` | `orders.updateAutoRenewal()` |
|
|
240
|
+
| DELETE | `/orders/{id}` | `orders.delete()` |
|
|
241
|
+
| GET | `/packages` | `packages.list()` |
|
|
242
|
+
| GET | `/packages/commissions` | `packages.listCommissions()` |
|
|
243
|
+
| GET | `/profile` | `profile.get()` |
|
|
244
|
+
| PATCH | `/profile` | `profile.update()` |
|
|
245
|
+
| DELETE | `/profile` | `profile.delete()` |
|
|
246
|
+
| POST | `/profile/2fa/confirm` | `profile.confirmTwoFactor()` |
|
|
247
|
+
| POST | `/profile/2fa/disable` | `profile.disableTwoFactor()` |
|
|
248
|
+
| POST | `/profile/2fa/setup` | `profile.setupTwoFactor()` |
|
|
249
|
+
| GET | `/profile/2fa/status` | `profile.getTwoFactorStatus()` |
|
|
250
|
+
| POST | `/profile/change-password` | `profile.changePassword()` |
|
|
251
|
+
| POST | `/proxies/generate` | `proxies.generate()` |
|
|
252
|
+
| POST | `/recover-password` | `authorization.recoverPassword()` |
|
|
253
|
+
| POST | `/refresh` | `authorization.refresh()` |
|
|
254
|
+
| POST | `/reset-password` | `orders.resetPassword()` |
|
|
255
|
+
| GET | `/rewards` | `rewards.list()` |
|
|
256
|
+
| POST | `/rewards/claim` | `rewards.claim()` |
|
|
257
|
+
| GET | `/sessions` | `sessions.list()` |
|
|
258
|
+
| DELETE | `/sessions/{id}` | `sessions.delete()` |
|
|
259
|
+
| GET | `/settings` | `settings.get()` |
|
|
260
|
+
| POST | `/signup` | `authorization.signup()` |
|
|
261
|
+
| GET | `/users` | `users.list()` |
|
|
262
|
+
| POST | `/users` | `users.create()` |
|
|
263
|
+
| GET | `/users/{id}` | `users.get()` |
|
|
264
|
+
| PATCH | `/users/{id}` | `users.update()` |
|
|
265
|
+
| DELETE | `/users/{id}` | `users.delete()` |
|
|
266
|
+
| POST | `/users/{id}/data/add` | `users.addData()` |
|
|
267
|
+
| POST | `/users/{id}/data/subtract` | `users.subtractData()` |
|
|
268
|
+
| GET | `/users/{id}/orders` | `users.listOrders()` |
|
|
269
|
+
| POST | `/users/{id}/password` | `users.resetPassword()` |
|
|
270
|
+
| GET | `/webhooks` | `webhooks.list()` |
|
|
271
|
+
| POST | `/webhooks` | `webhooks.create()` |
|
|
272
|
+
| GET | `/webhooks/{id}` | `webhooks.get()` |
|
|
273
|
+
| DELETE | `/webhooks/{id}` | `webhooks.delete()` |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Backend compatibility and MFA
|
|
2
|
+
|
|
3
|
+
The canonical schema in `openapi/openapi.yaml` is copied without filtering from
|
|
4
|
+
the public backend. `openapi/source.json` pins its SHA-256 and source commit.
|
|
5
|
+
Generators derive a projection that excludes only `sessions_list` and
|
|
6
|
+
`sessions_destroy`: 79 supported operations in 17 groups. Do not call the removed
|
|
7
|
+
`client.sessions` resource. Proxy-generation sticky-session options are unchanged.
|
|
8
|
+
|
|
9
|
+
## Login with an OTP challenge
|
|
10
|
+
|
|
11
|
+
Password login and Google login return either tokens (HTTP 200) or an OTP challenge
|
|
12
|
+
(HTTP 202). A challenge is not an authenticated session. Complete it using the
|
|
13
|
+
anonymous client and the code supplied by the user:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { ProxyRequestClient } from "@proxyrequest/sdk";
|
|
17
|
+
|
|
18
|
+
async function signIn(email: string, password: string, readCode: () => Promise<string>) {
|
|
19
|
+
const anonymous = ProxyRequestClient.anonymous();
|
|
20
|
+
const result = await anonymous.authorization.login({ body: { email, password } });
|
|
21
|
+
const tokens = "challenge" in result
|
|
22
|
+
? await anonymous.authorization.verifyOtp({
|
|
23
|
+
body: { challenge: result.challenge, code: await readCode() },
|
|
24
|
+
})
|
|
25
|
+
: result;
|
|
26
|
+
return ProxyRequestClient.withBearerToken(tokens.token);
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`loginWithGoogle({ body: { credential } })` uses the same response union.
|
|
31
|
+
Store refresh tokens securely; the SDK does not silently refresh or restart login.
|
|
32
|
+
|
|
33
|
+
## Set up or disable MFA
|
|
34
|
+
|
|
35
|
+
Supply the current password, or a freshly obtained Google `credential` for a
|
|
36
|
+
Google-authenticated account. Replacing an existing authenticator also requires
|
|
37
|
+
its current `code` during setup.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
const setup = await client.profile.setupTwoFactor({ body: { password } });
|
|
41
|
+
// Show setup.otpauth_url securely; the user enrolls it in their authenticator.
|
|
42
|
+
await client.profile.confirmTwoFactor({ body: { code: enrollmentCode } });
|
|
43
|
+
// After signing in again, disabling requires the primary factor and current OTP:
|
|
44
|
+
await client.profile.disableTwoFactor({ body: { password, code: currentCode } });
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
MFA confirmation/disable and password changes can invalidate existing JWTs.
|
|
48
|
+
Reauthenticate and replace the client token; do not automatically replay security
|
|
49
|
+
mutations after an authentication failure.
|
|
50
|
+
|
|
51
|
+
## Response models and failures
|
|
52
|
+
|
|
53
|
+
- `User` includes optional legacy allocation fields and optional `orders` because
|
|
54
|
+
the backend selects one representation according to its configuration.
|
|
55
|
+
- Invoice list/get returns `Invoice | InvoiceShort`. Creation returns `Invoice`;
|
|
56
|
+
`package`, `country`, and `coupon` can be `null`. Narrow with `"package" in invoice`
|
|
57
|
+
before accessing full-only fields.
|
|
58
|
+
- Payment amounts/currencies, checkout state, and current gateway values are typed.
|
|
59
|
+
Gateway types also accept future strings; the server validates request values.
|
|
60
|
+
- `*WithResponse` methods expose HTTP status and headers alongside data.
|
|
61
|
+
Preserve the local operation record when investigating an ambiguous create
|
|
62
|
+
result; inspect platform state before repeating a paid operation.
|
|
63
|
+
|
|
64
|
+
Compatibility tests use synthetic responses produced by actual backend serializers
|
|
65
|
+
for both configuration modes, plus mocked MFA and failure scenarios. They do not
|
|
66
|
+
contact production. See [audit and resolution status](SDK-AUDIT.md).
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- `contentLanguage`, `headers`, and `rawBody` preserve response context;
|
|
13
13
|
- `cause` preserves the underlying transport or decoding error.
|
|
14
14
|
|
|
15
|
-
The SDK
|
|
15
|
+
The SDK performs a small number of automatic retries for supported writes after transient network failures and retryable conflicts. Other failed writes are returned immediately. If the final outcome is uncertain, inspect the affected resource before submitting another payment or mutation. Apply bounded exponential backoff to safe reads and honor `retryAfter`.
|
|
16
16
|
|
|
17
17
|
## Pagination
|
|
18
18
|
|
package/docs/getting-started.md
CHANGED
|
@@ -5,9 +5,8 @@
|
|
|
5
5
|
- Use a Static API key for server-to-server operator and reseller automation.
|
|
6
6
|
- Use a Bearer access token for a signed-in dashboard user.
|
|
7
7
|
- Use an anonymous client only for endpoints explicitly documented as public.
|
|
8
|
-
- Pass the Telegram service secret only to `client.telegramService` calls.
|
|
9
8
|
|
|
10
|
-
Static keys
|
|
9
|
+
Static keys must never be included in browser bundles. Create and rotate keys through `client.apiKeys` or the dashboard, restrict source IPs where appropriate, and use separate keys per integration.
|
|
11
10
|
|
|
12
11
|
## Configure the client
|
|
13
12
|
|
package/docs/releasing.md
CHANGED
|
@@ -10,7 +10,16 @@
|
|
|
10
10
|
6. The `publish.yml` workflow validates the tag, rebuilds the package, and publishes through npm Trusted Publishing with provenance.
|
|
11
11
|
7. Verify the npm package, then create the GitHub Release from the same tag.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Configure the npm Trusted Publisher with these exact values:
|
|
14
|
+
|
|
15
|
+
- Provider: GitHub Actions
|
|
16
|
+
- Organization or user: `proxyrequest`
|
|
17
|
+
- Repository: `javascript-sdk`
|
|
18
|
+
- Workflow filename: `publish.yml`
|
|
19
|
+
- Environment name: `npm`
|
|
20
|
+
- Allowed actions: `npm publish`
|
|
21
|
+
|
|
22
|
+
The workflow requires `id-token: write` and runs on GitHub-hosted infrastructure. It uses the temporary `NPM_TOKEN` only while that environment secret exists; after the secret is deleted, it removes the token placeholder written by `setup-node` so npm can perform the OIDC exchange.
|
|
14
23
|
|
|
15
24
|
## First release bootstrap
|
|
16
25
|
|
|
@@ -19,7 +28,8 @@ npm can configure a Trusted Publisher only after a package exists. For the first
|
|
|
19
28
|
1. Create a short-lived granular npm token that can publish public packages in the `@proxyrequest` organization and can satisfy the initial 2FA publishing requirement.
|
|
20
29
|
2. Store it only as the GitHub environment secret `NPM_TOKEN` in the `npm` environment.
|
|
21
30
|
3. Push `v1.0.0` and verify the workflow publishes the package with provenance.
|
|
22
|
-
4. Configure the Trusted Publisher described above.
|
|
23
|
-
5. Delete the GitHub secret
|
|
31
|
+
4. Configure the Trusted Publisher described above in the package settings on npmjs.com.
|
|
32
|
+
5. Delete the GitHub environment secret with `gh secret delete NPM_TOKEN --env npm --repo proxyrequest/javascript-sdk`.
|
|
33
|
+
6. Revoke the bootstrap token immediately in the npm access-token settings.
|
|
24
34
|
|
|
25
35
|
Never put a token in `.npmrc`, workflow YAML, shell history, issues, release notes, or repository files.
|
|
@@ -27,7 +27,7 @@ const invoice = await client.invoices.create({
|
|
|
27
27
|
const { payment_url } = await client.invoices.getPaymentLink({ id: invoice.id! });
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Store the ProxyRequest invoice ID with your local checkout record. Treat invoice state and verified webhooks as the authoritative payment result.
|
|
30
|
+
Store the ProxyRequest invoice ID with your local checkout record. Treat invoice state and verified webhooks as the authoritative payment result. If a write ends without a final result, inspect the affected resource before repeating it.
|
|
31
31
|
|
|
32
32
|
Further reading:
|
|
33
33
|
|
package/docs/webhooks.md
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# Webhook verification
|
|
2
2
|
|
|
3
|
-
ProxyRequest
|
|
3
|
+
ProxyRequest sends `X-Signature`: standard padded Base64 of HMAC-SHA256 over the exact raw body. Parsing and re-serializing JSON before verification changes the signed bytes and invalidates the signature. Use SDK 2.0.0 or newer; version 1.0.0 does not support the current delivery format.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
|
-
const valid = await WebhookVerifier.verify(rawBody, signature, webhookSecret
|
|
7
|
-
timestampHeader,
|
|
8
|
-
tolerance: 300,
|
|
9
|
-
});
|
|
6
|
+
const valid = await WebhookVerifier.verify(rawBody, signature, webhookSecret);
|
|
10
7
|
```
|
|
11
8
|
|
|
12
9
|
`verifyOrThrow()` raises `InvalidSignatureError`. `decodeVerifiedJson()` verifies first and then returns a typed JSON object.
|
|
@@ -15,9 +12,9 @@ Operational requirements:
|
|
|
15
12
|
|
|
16
13
|
- preserve the raw request bytes in the web framework;
|
|
17
14
|
- store webhook secrets only on the server;
|
|
18
|
-
- reject
|
|
15
|
+
- reject invalid signatures; current deliveries have no signed timestamp, so signature verification alone cannot prevent replay;
|
|
19
16
|
- return quickly and move slow processing to a queue;
|
|
20
|
-
- make event handling
|
|
17
|
+
- make event handling safe for duplicate delivery;
|
|
21
18
|
- reconcile critical invoice/order state through the API.
|
|
22
19
|
|
|
23
20
|
Refer to [webhook integration](https://proxyrequest.com/docs/integration/webhooks/) and the [event reference](https://proxyrequest.com/docs/reference/webhook-events/).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proxyrequest/sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Official TypeScript SDK for the ProxyRequest public API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -94,7 +94,8 @@
|
|
|
94
94
|
"white-label"
|
|
95
95
|
],
|
|
96
96
|
"scripts": {
|
|
97
|
-
"
|
|
97
|
+
"sync:openapi": "tsx scripts/sync-openapi.ts",
|
|
98
|
+
"generate:types": "tsx scripts/generate-types.ts",
|
|
98
99
|
"generate:resources": "tsx scripts/generate-sdk.ts",
|
|
99
100
|
"generate": "npm run generate:types && npm run generate:resources && biome format --write src/generated",
|
|
100
101
|
"generate:check": "npm run generate && git diff --exit-code -- src/generated",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models-ECy_bhdn.d.ts","names":[],"sources":["../src/generated/models.ts"],"mappings":";;KAGY,iBAAiB;KACjB,YAAY;KACZ,kBAAkB;KAClB,sBAAsB;KACtB,yBAAyB;KACzB,eAAe;KACf,sBAAsB;KACtB,aAAa;KACb,wBAAwB;KACxB,OAAO;KACP,qBAAqB;KACrB,mBAAmB;KACnB,sBAAsB;KACtB,YAAY;KACZ,UAAU;KACV,SAAS;KACT,8BAA8B;KAC9B,sBAAsB;KACtB,sBAAsB;KACtB,eAAe;KACf,cAAc;KACd,iBAAiB;KACjB,sBAAsB;KACtB,eAAe;KACf,kBAAkB;KAClB,kBAAkB;KAClB,aAAa;KACb,eAAe;KACf,iBAAiB;KACjB,uBAAuB;KACvB,wBAAwB;KACxB,oBAAoB;KACpB,UAAU;KACV,kCACV;KACU,8BAA8B;KAC9B,qBAAqB;KACrB,oBAAoB;KACpB,kBAAkB;KAClB,MAAM;KACN,eAAe;KACf,YAAY;KACZ,qBAAqB;KACrB,oBAAoB;KACpB,mBAAmB;KACnB,yBAAyB;KACzB,wBAAwB;KACxB,sBAAsB;KACtB,YAAY;KACZ,eAAe;KACf,kBAAkB;KAClB,OAAO;KACP,QAAQ;KACR,gBAAgB;KAChB,eAAe;KACf,kBAAkB;KAClB,UAAU;KACV,oBAAoB;KACpB,eAAe;KACf,yBAAyB;KACzB,+BAA+B;KAC/B,0BAA0B;KAC1B,oBAAoB;KACpB,yBAAyB;KACzB,uBAAuB;KACvB,4BAA4B;KAC5B,2BAA2B;KAC3B,uBAAuB;KACvB,mBAAmB;KACnB,iCACV;KACU,oBAAoB;KACpB,qBAAqB;KACrB,iCACV;KACU,uBAAuB;KACvB,sBAAsB;KACtB,sBAAsB;KACtB,oBAAoB;KACpB,2BAA2B;KAC3B,2BAA2B;KAC3B,6BAA6B;KAC7B,iCACV;KACU,8BAA8B;KAC9B,yCACV;KACU,2BAA2B;KAC3B,sBAAsB;KACtB,cAAc;KACd,kBAAkB;KAClB,eAAe;KACf,mCACV;KACU,gCAAgC;KAChC,kCACV;KACU,6BAA6B;KAC7B,gBAAgB;KAChB,yBAAyB;KACzB,SAAS;KACT,uBAAuB;KACvB,SAAS;KACT,4BAA4B;KAC5B,mBAAmB;KACnB,wBAAwB;KACxB,sBAAsB;KACtB,iBAAiB;KACjB,kBAAkB;KAClB,mBAAmB;KACnB,mBAAmB;KACnB,gBAAgB;KAChB,sBAAsB;KACtB,mBAAmB;KACnB,6BAA6B;KAC7B,6BAA6B;KAC7B,uBAAuB;KACvB,yBAAyB;KACzB,0BAA0B;KAC1B,oBAAoB;KACpB,6BAA6B;KAC7B,uBAAuB;KACvB,oBAAoB;KACpB,uBAAuB;KACvB,0BAA0B;KAC1B,0BAA0B;KAC1B,yBAAyB;KACzB,OAAO;KACP,oBAAoB;KACpB,kCACV;KACU,iBAAiB;KACjB,uBAAuB;KACvB,cAAc;KACd,mBAAmB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models-VMmyyuf_.d.cts","names":[],"sources":["../src/generated/models.ts"],"mappings":";;KAGY,iBAAiB;KACjB,YAAY;KACZ,kBAAkB;KAClB,sBAAsB;KACtB,yBAAyB;KACzB,eAAe;KACf,sBAAsB;KACtB,aAAa;KACb,wBAAwB;KACxB,OAAO;KACP,qBAAqB;KACrB,mBAAmB;KACnB,sBAAsB;KACtB,YAAY;KACZ,UAAU;KACV,SAAS;KACT,8BAA8B;KAC9B,sBAAsB;KACtB,sBAAsB;KACtB,eAAe;KACf,cAAc;KACd,iBAAiB;KACjB,sBAAsB;KACtB,eAAe;KACf,kBAAkB;KAClB,kBAAkB;KAClB,aAAa;KACb,eAAe;KACf,iBAAiB;KACjB,uBAAuB;KACvB,wBAAwB;KACxB,oBAAoB;KACpB,UAAU;KACV,kCACV;KACU,8BAA8B;KAC9B,qBAAqB;KACrB,oBAAoB;KACpB,kBAAkB;KAClB,MAAM;KACN,eAAe;KACf,YAAY;KACZ,qBAAqB;KACrB,oBAAoB;KACpB,mBAAmB;KACnB,yBAAyB;KACzB,wBAAwB;KACxB,sBAAsB;KACtB,YAAY;KACZ,eAAe;KACf,kBAAkB;KAClB,OAAO;KACP,QAAQ;KACR,gBAAgB;KAChB,eAAe;KACf,kBAAkB;KAClB,UAAU;KACV,oBAAoB;KACpB,eAAe;KACf,yBAAyB;KACzB,+BAA+B;KAC/B,0BAA0B;KAC1B,oBAAoB;KACpB,yBAAyB;KACzB,uBAAuB;KACvB,4BAA4B;KAC5B,2BAA2B;KAC3B,uBAAuB;KACvB,mBAAmB;KACnB,iCACV;KACU,oBAAoB;KACpB,qBAAqB;KACrB,iCACV;KACU,uBAAuB;KACvB,sBAAsB;KACtB,sBAAsB;KACtB,oBAAoB;KACpB,2BAA2B;KAC3B,2BAA2B;KAC3B,6BAA6B;KAC7B,iCACV;KACU,8BAA8B;KAC9B,yCACV;KACU,2BAA2B;KAC3B,sBAAsB;KACtB,cAAc;KACd,kBAAkB;KAClB,eAAe;KACf,mCACV;KACU,gCAAgC;KAChC,kCACV;KACU,6BAA6B;KAC7B,gBAAgB;KAChB,yBAAyB;KACzB,SAAS;KACT,uBAAuB;KACvB,SAAS;KACT,4BAA4B;KAC5B,mBAAmB;KACnB,wBAAwB;KACxB,sBAAsB;KACtB,iBAAiB;KACjB,kBAAkB;KAClB,mBAAmB;KACnB,mBAAmB;KACnB,gBAAgB;KAChB,sBAAsB;KACtB,mBAAmB;KACnB,6BAA6B;KAC7B,6BAA6B;KAC7B,uBAAuB;KACvB,yBAAyB;KACzB,0BAA0B;KAC1B,oBAAoB;KACpB,6BAA6B;KAC7B,uBAAuB;KACvB,oBAAoB;KACpB,uBAAuB;KACvB,0BAA0B;KAC1B,0BAA0B;KAC1B,yBAAyB;KACzB,OAAO;KACP,oBAAoB;KACpB,kCACV;KACU,iBAAiB;KACjB,uBAAuB;KACvB,cAAc;KACd,mBAAmB"}
|