@pisti-paypiller/backend 0.0.0-stage → 0.7.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/LICENSE +21 -0
- package/README.md +133 -2
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +12 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +45 -0
- package/dist/keys.js.map +1 -0
- package/dist/management-types.d.ts +311 -0
- package/dist/management-types.d.ts.map +1 -0
- package/dist/management-types.js +2 -0
- package/dist/management-types.js.map +1 -0
- package/dist/management.d.ts +162 -0
- package/dist/management.d.ts.map +1 -0
- package/dist/management.js +432 -0
- package/dist/management.js.map +1 -0
- package/dist/tokens.d.ts +43 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +458 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +170 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks.d.ts +94 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +117 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +43 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.js","sourceRoot":"","sources":["../src/management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA6C/D,+EAA+E;AAC/E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAG9B,MAAM;IACN,SAAS;IACT,IAAI;IACJ,iBAAiB;IACjB,WAAW;IACX,QAAQ;IAPrB,YACI,OAAe,EACN,MAAc,EACd,SAAS,GAAkB,IAAI,EAC/B,IAAI,GAAkB,IAAI,EAC1B,iBAAiB,GAAkB,IAAI,EACvC,WAAW,GAAuC,EAAE,EACpD,QAAQ,GAA+B,EAAE;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;sBAPN,MAAM;yBACN,SAAS;oBACT,IAAI;iCACJ,iBAAiB;2BACjB,WAAW;wBACX,QAAQ;QAGjB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACvC,CAAC;CACJ;AAED,SAAS,SAAS,CAAC,KAAa;IAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa;QAC9D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC5B,IACI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,oBAA0B;QAE1C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IACzB,IACI,CAAC,iEAAiE,CAAC,IAAI,CACnE,KAAK,CACR;QAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CACd,OAAO,GAAoD,EAAE;IAE7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IACI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,CAAC;YACjB,OAAO,CAAC,KAAK,GAAG,GAAG;YAEnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;YAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;YAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,GAAG,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAkB;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;YACrB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAChC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,oBAAoB,CAC1B,oCAAoC,EACpC,GAAG,CACN,CAAC;YACN,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC1B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACvE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AASD,6FAA6F;AAC7F,MAAM,OAAO,WAAW;IACX,OAAO,CAAM;IACb,UAAU,CAAqB;IAC/B,eAAe,CAAS;IACxB,kBAAkB,CAAuB;IAClD,SAAS,CAA8B;IAC9B,UAAU,CAAS;IAEnB,KAAK,CAAkB;IACvB,aAAa,CAA0B;IACvC,QAAQ,CAAqB;IAC7B,iBAAiB,CAA8B;IAC/C,QAAQ,CAAqB;IAC7B,OAAO,CAAoB;IAEpC,YAAY,OAAO,GAA4B,EAAE;QAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW;YAChE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACpE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACnF,IAAI,CAAC,cAAc;YACf,MAAM,IAAI,KAAK,CACX,uJAAuJ,CAC1J,CAAC;QACN,MAAM,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,SAAS,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;YACvG,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC5F,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC9C,IACI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,UAAU,GAAG,MAAM;YAExB,MAAM,IAAI,KAAK,CACX,oDAAoD,CACvD,CAAC;QACN,MAAM,OAAO,GAAoB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAC1E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,mBAAmB,CACf,OAAgB,EAChB,OAAO,GAAsD,EAAE;QAE/D,OAAO,mBAAmB,CAAC,OAAO,EAAE;YAChC,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAED,uDAAuD;IACvD,WAAW,CAAC,KAAa,EAAE,OAAO,GAAuB,EAAE;QACvD,OAAO,WAAW,CAAC,KAAK,EAAE;YACtB,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAED,iDAAiD;IACjD,WAAW,CAAC,OAAO,GAA6B,EAAE;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAkB,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;YAChB,MAAM,IAAI,KAAK,CACX,2HAA2H,CAC9H,CAAC;QACN,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,uFAAuF;IACvF,aAAa;QACT,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE;aACxC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,4BAA4B,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;aACxE,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,QAAQ,CACV,MAAc,EACd,IAAY,EACZ,IAAc,EACd,OAAO,GAA6B,EAAE;QAEtC,MAAM,UAAU,GACZ,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM;YACpD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC9D,IAAI,QAAkB,CAAC;QACvB,IAAI,OAAgB,CAAC;QACrB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC;YACD,QAAQ,GAAG,MAAM,KAAK,CAClB,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EACpC;gBACI,MAAM;gBACN,OAAO,EAAE;oBACL,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;oBACnD,MAAM,EAAE,kBAAkB;oBAC1B,GAAG,CAAC,UAAU,KAAK,SAAS;wBACxB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;iBAChD;gBACD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBACzD,MAAM,EAAE,OAAO,CAAC,MAAM;oBAClB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC5C,CAAC,CAAC,OAAO;gBACb,QAAQ,EAAE,OAAO;aACpB,CACJ,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,SAAc,CAAC;YACnD,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,oBAAoB;gBAAE,MAAM,KAAK,CAAC;YACvD,MAAM,IAAI,oBAAoB,CAC1B,OAAO,CAAC,MAAM,EAAE,OAAO;gBACnB,CAAC,CAAC,sCAAsC;gBACxC,CAAC,CAAC,iEAAiE,EACvE,CAAC,EACD,IAAI,EACJ,OAAO,CAAC,MAAM,EAAE,OAAO;gBACnB,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,OAAO,CAAC,OAAO;oBACf,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,qBAAqB,CAChC,CAAC;QACN,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,SAAS,GACX,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ;YAChC,CAAC,CAAC,KAAK,CAAC,SAAS;YACjB,CAAC,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,QAAQ;gBACnC,CAAC,CAAC,IAAI,CAAC,SAAS;gBAChB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,MAAM,GAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CACzC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAC9B;gBACG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAC1B,CAAC,OAAO,EAAqB,EAAE,CAC3B,OAAO,OAAO,KAAK,QAAQ,CAClC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC3C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,OAAO;wBACV,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;wBACpC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;wBACjC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;wBACtC,CAAC,CAAC;4BACI;gCACI,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,UAAU,EAAE,OAAO,CAAC,UAAU;6BACjC;yBACJ;wBACH,CAAC,CAAC,EAAE,CAAC;gBACb,CAAC,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,YAAY,GACd,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,MAAM,IAAI,oBAAoB,CAC1B,OAAO,KAAK,EAAE,MAAM,KAAK,QAAQ;gBAC7B,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ;oBAChC,CAAC,CAAC,KAAK,CAAC,KAAK;oBACb,CAAC,CAAC,gCAAgC,EACxC,QAAQ,CAAC,MAAM,EACf,SAAS,EACT,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACnD,YAAY,EACZ,MAAM,EACN,QAAQ,CACX,CAAC;QACN,CAAC;QACD,IACI,CAAC,KAAK;YACN,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;YAClB,CAAC,IAAI;YACL,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAElC,MAAM,IAAI,oBAAoB,CAC1B,sDAAsD,EACtD,GAAG,EACH,SAAS,CACZ,CAAC;QACN,OAAO,KAAK,CAAC,IAAS,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,OAAO,eAAe;IACK,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IACzD,WAAW,GAAG,CACV,OAAO,GAAoD,EAAE,EAChC,EAAE,CAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3E,KAAK,CAAC,CAAC,cAAc,CACjB,OAAO,GAEH,EAAE;QAEN,IAAI,MAA0B,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,GAAG,CAAC;YACA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;gBAChC,GAAG,OAAO;gBACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC7C,MAAM,IAAI,oBAAoB,CAC1B,oDAAoD,EACpD,GAAG,CACN,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,QAAQ,IAAI,EAAE;IACnB,CAAC;IACD,0DAA0D;IAC1D,QAAQ,GAAG,KAAK,EACZ,OAAO,GAA8E,EAAE,EACxE,EAAE,CACjB,CACI,MAAM,IAAI,CAAC,OAAO,CACd,KAAK,EACL,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,EACnC,SAAS,EACT,OAAO,CACV,CACJ,CAAC,UAAU,CAAC;IACjB,OAAO,GAAG,CACN,EAAU,EACV,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,UAAU,GAAG,CACT,KAAsB,EACtB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,UAAU,GAAG,CACT,EAAU,EACV,KAAsB,EACtB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,SAAS,GAAG,CAChB,EAAU,EACV,MAAkB,EAClB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,kDAAkD;IAClD,OAAO,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CACxE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,SAAS,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CAC1E,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CACzE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CAC3E,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CAC3E,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvE,uBAAuB,GAAG,CACtB,EAAU,EACV,OAAkC,EACX,EAAE,CACzB,IAAI,CAAC,OAAO,CACR,KAAK,EACL,UAAU,MAAM,CAAC,EAAE,CAAC,kBAAkB,EACtC,SAAS,EACT,OAAO,CACV,CAAC;IACN,eAAe,GAAG,CACd,EAAU,EACV,KAKC,EACD,OAAkC,EACX,EAAE,CACzB,IAAI,CAAC,OAAO,CACR,MAAM,EACN,UAAU,MAAM,CAAC,EAAE,CAAC,kBAAkB,EACtC,KAAK,EACL,OAAO,CACV,CAAC;IACN,oBAAoB,GAAG,CACnB,EAAU,EACV,OAAe,EACf,MAAiC,EACjC,OAAoE,EACvD,EAAE,CACf,IAAI,CAAC,OAAO,CACR,KAAK,EACL,UAAU,MAAM,CAAC,EAAE,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5D;QACI,MAAM;QACN,GAAG,CAAC,OAAO,EAAE,kBAAkB;YAC3B,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;YACpD,CAAC,CAAC,EAAE,CAAC;KACZ,EACD,OAAO,CACV,CAAC;IACN,eAAe,GAAG,CACd,EAAU,EACV,OAAe,EACf,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,KAAK,EACL,UAAU,MAAM,CAAC,EAAE,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,UAAU,EACpE,SAAS,EACT,OAAO,CACV,CAAC;IACN,kBAAkB,GAAG,CACjB,EAAU,EACV,OAAe,EACf,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,UAAU,MAAM,CAAC,EAAE,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5D,SAAS,EACT,OAAO,CACV,CAAC;IACN,0BAA0B,GAAG,CACzB,EAAU,EACV,OAAkC,EACC,EAAE,CACrC,IAAI,CAAC,OAAO,CACR,KAAK,EACL,UAAU,MAAM,CAAC,EAAE,CAAC,oBAAoB,EACxC,SAAS,EACT,OAAO,CACV,CAAC;CACT;AAED,MAAM,OAAO,2BAA2B;IACP,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IAEzD,IAAI,GAAG,CACH,OAAkC,EACA,EAAE,CACpC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnE,MAAM,GAAG,CACL,KAAkC,EAClC,OAAkC,EACF,EAAE,CAClC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEhE,MAAM,GAAG,CACL,EAAU,EACV,KAAkC,EAClC,OAAkC,EACF,EAAE,CAClC,IAAI,CAAC,OAAO,CACR,KAAK,EACL,uBAAuB,SAAS,CAAC,EAAE,CAAC,EAAE,EACtC,KAAK,EACL,OAAO,CACV,CAAC;IAEN,MAAM,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CACvE,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,uBAAuB,SAAS,CAAC,EAAE,CAAC,EAAE,EACtC,SAAS,EACT,OAAO,CACV,CAAC;CACT;AAED,MAAM,OAAO,kBAAkB;IACE,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IACzD,OAAO,GAAG,CACN,OAAkC,EACP,EAAE,CAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,SAAS,GAAG,CACR,OAAkC,EACD,EAAE,CACnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnE,cAAc,GAAG,CACb,KAA2B,EAC3B,OAAkC,EACN,EAAE,CAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,cAAc,GAAG,CACb,EAAU,EACV,KAAiC,EACjC,OAAkC,EACH,EAAE,CACjC,IAAI,CAAC,OAAO,CACR,KAAK,EACL,uBAAuB,SAAS,CAAC,EAAE,CAAC,EAAE,EACtC,KAAK,EACL,OAAO,CACV,CAAC;IACN,eAAe,GAAG,CACd,EAAU,EACV,iBAAyB,EACzB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,MAAM,EACN,uBAAuB,SAAS,CAAC,EAAE,CAAC,UAAU,EAC9C,EAAE,iBAAiB,EAAE,EACrB,OAAO,CACV,CAAC;IACN,YAAY,GAAG,CACX,EAAU,EACV,iBAAyB,EACzB,OAAkC,EACN,EAAE,CAC9B,IAAI,CAAC,OAAO,CACR,MAAM,EACN,uBAAuB,SAAS,CAAC,EAAE,CAAC,gBAAgB,EACpD,EAAE,iBAAiB,EAAE,EACrB,OAAO,CACV,CAAC;IACN,QAAQ,GAAG,CACP,EAAU,EACV,OAAkC,EACM,EAAE,CAC1C,IAAI,CAAC,OAAO,CACR,MAAM,EACN,uBAAuB,SAAS,CAAC,EAAE,CAAC,OAAO,EAC3C,SAAS,EACT,OAAO,CACV,CAAC;IACN,UAAU,GAAG,CACT,OAAO,GAA+B,EAAE,EACO,EAAE;QACjD,MAAM,KAAK,GAAG,IAAI,eAAe,CAC7B,SAAS,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;gBAC3B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;gBAC5B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SACpC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACd,CAAC;QACF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAChC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,OAAO,CACf,KAAK,EACL,uBAAuB,GAAG,KAAK,EAC/B,SAAS,EACT,OAAO,CACV,CAAC;IACN,CAAC,CAAC;IACF,QAAQ,GAAG,CACP,EAAU,EACV,OAAkC,EACH,EAAE,CACjC,IAAI,CAAC,OAAO,CACR,KAAK,EACL,wBAAwB,SAAS,CAAC,EAAE,CAAC,EAAE,EACvC,SAAS,EACT,OAAO,CACV,CAAC;IACN,MAAM,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CACvE,IAAI,CAAC,OAAO,CACR,MAAM,EACN,wBAAwB,SAAS,CAAC,EAAE,CAAC,SAAS,EAC9C,SAAS,EACT,OAAO,CACV,CAAC;CACT;AAED,MAAM,OAAO,iBAAiB;IACG,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IACzD,aAAa,GAAG,CAAC,OAAO,GAAsB,EAAE,EAAmC,EAAE;QACjF,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,cAAc;YAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,GAAG;gBAC5E,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClG,CAAC,CAAC;IACF,SAAS,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAmB,EAAE,CAC5E,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1E,8GAA8G;IAC9G,YAAY,GAAG,CAAC,EAAU,EAAE,KAAwB,EAAE,OAAkC,EAAmB,EAAE,CACzG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACvH,YAAY,GAAG,CAAC,EAAU,EAAE,OAAO,GAA6D,EAAE,EAAiB,EAAE,CACjH,IAAI,CAAC,OAAO,CACR,MAAM,EACN,aAAa,SAAS,CAAC,EAAE,CAAC,SAAS,EACnC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAAE,EACtD,OAAO,CACV,CAAC;IACN,mHAAmH;IACnH,YAAY,GAAG,CAAC,MAAc,EAAE,OAAkC,EAAmB,EAAE,CACnF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;CACrE;AAED,MAAM,OAAO,kBAAkB;IACE,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IACzD,kFAAkF;IAClF,cAAc,GAAG,CAAC,OAAO,GAAuB,EAAE,EAAoC,EAAE;QACpF,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,GAAG;gBAC5E,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClG,CAAC,CAAC;IACF,UAAU,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAoB,EAAE,CAC9E,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1E,aAAa,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CAC9E,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,aAAa,SAAS,CAAC,EAAE,CAAC,EAAE,EAC5B,SAAS,EACT,OAAO,CACV,CAAC;CACT;AAED,MAAM,OAAO,uBAAuB;IACH,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IACzD,mBAAmB,GAAG,CAClB,OAAO,GAA0B,EAAE,EACS,EAAE,CAC9C,IAAI,CAAC,OAAO,CACR,KAAK,EACL,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,EACrC,SAAS,EACT,OAAO,CACV,CAAC;IACN,eAAe,GAAG,CACd,EAAU,EACV,OAAkC,EAInC,EAAE,CACD,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,EAAE,EACjC,SAAS,EACT,OAAO,CACV,CAAC;IACN,kBAAkB,GAAG,CACjB,KAA8B,EAC9B,OAAkC,EACX,EAAE,CACzB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,kBAAkB,GAAG,CACjB,EAAU,EACV,KAA8B,EAC9B,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,kBAAkB,GAAG,CAAC,EAAU,EAAE,OAAkC,EAAiB,EAAE,CACnF,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,kBAAkB,SAAS,CAAC,EAAE,CAAC,EAAE,EACjC,SAAS,EACT,OAAO,CACV,CAAC;IACN,6BAA6B,GAAG,CAC5B,EAAU,EACV,OAAO,GAA0B,EAAE,EACe,EAAE,CACpD,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,EAClE,SAAS,EACT,OAAO,CACV,CAAC;IACN,4BAA4B,GAAG,CAC3B,EAAU,EACV,QAAgB,EAChB,MAAc,EACd,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,EACjE,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EACrC,OAAO,CACV,CAAC;IACN,4BAA4B,GAAG,CAC3B,EAAU,EACV,QAAgB,EAChB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,kBAAkB,SAAS,CAAC,EAAE,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,EACjE,SAAS,EACT,OAAO,CACV,CAAC;IACN,6BAA6B,GAAG,CAC5B,EAAU,EACV,OAAO,GAA0B,EAAE,EACO,EAAE,CAC5C,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,EAClE,SAAS,EACT,OAAO,CACV,CAAC;IACN,4BAA4B,GAAG,CAC3B,EAAU,EACV,KAA+D,EAC/D,OAAkC,EACT,EAAE,CAC3B,IAAI,CAAC,OAAO,CACR,MAAM,EACN,kBAAkB,SAAS,CAAC,EAAE,CAAC,cAAc,EAC7C,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EACrD,OAAO,CACV,CAAC;IACN,6BAA6B,GAAG,CAC5B,EAAU,EACV,YAAoB,EACpB,KAA2D,EAC3D,OAAkC,EACT,EAAE,CAC3B,IAAI,CAAC,OAAO,CACR,MAAM,EACN,kBAAkB,SAAS,CAAC,EAAE,CAAC,gBAAgB,SAAS,CAAC,YAAY,CAAC,UAAU,EAChF,KAAK,EACL,OAAO,CACV,CAAC;IACN,4BAA4B,GAAG,CAC3B,EAAU,EACV,YAAoB,EACpB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,kBAAkB,SAAS,CAAC,EAAE,CAAC,gBAAgB,SAAS,CAAC,YAAY,CAAC,EAAE,EACxE,SAAS,EACT,OAAO,CACV,CAAC;IACN,WAAW,GAAG,CACV,EAAU,EACV,OAAkC,EACZ,EAAE,CACxB,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,QAAQ,EACvC,SAAS,EACT,OAAO,CACV,CAAC;IACN,UAAU,GAAG,CACT,EAAU,EACV,KAAgB,EAChB,OAAkC,EACX,EAAE,CACzB,IAAI,CAAC,OAAO,CACR,MAAM,EACN,kBAAkB,SAAS,CAAC,EAAE,CAAC,QAAQ,EACvC,KAAK,EACL,OAAO,CACV,CAAC;IACN,UAAU,GAAG,CACT,EAAU,EACV,MAAc,EACd,KAAgB,EAChB,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,KAAK,EACL,kBAAkB,SAAS,CAAC,EAAE,CAAC,UAAU,SAAS,CAAC,MAAM,CAAC,EAAE,EAC5D,KAAK,EACL,OAAO,CACV,CAAC;IACN,UAAU,GAAG,CACT,EAAU,EACV,MAAc,EACd,OAAkC,EACrB,EAAE,CACf,IAAI,CAAC,OAAO,CACR,QAAQ,EACR,kBAAkB,SAAS,CAAC,EAAE,CAAC,UAAU,SAAS,CAAC,MAAM,CAAC,EAAE,EAC5D,SAAS,EACT,OAAO,CACV,CAAC;IACN,iBAAiB,GAAG,CAChB,OAAkC,EACN,EAAE,CAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IAC/D,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AcceptsToken, AuthenticateRequestOptions, AuthObject, AuthObjectFor, RequestState, SessionClaims, SignedOutAuthObject, TokenType, VerifyTokenOptions } from "./types.js";
|
|
2
|
+
/** Cookies and parameters shared with @pisti-paypiller/react and the Frontend API. */
|
|
3
|
+
export declare const SESSION_COOKIE = "__session";
|
|
4
|
+
export declare const CLIENT_UAT_COOKIE = "__client_uat";
|
|
5
|
+
export declare const HANDSHAKE_PARAMETER = "__pisti_handshake";
|
|
6
|
+
/**
|
|
7
|
+
* Verifies a session token and returns its claims. Throws `PistiError` (401) when the token is
|
|
8
|
+
* invalid, expired (`code: "token_expired"`), or belongs to another environment.
|
|
9
|
+
*/
|
|
10
|
+
export declare function verifyToken(token: string, options?: VerifyTokenOptions): Promise<SessionClaims>;
|
|
11
|
+
export declare const signedOutAuthObject: SignedOutAuthObject;
|
|
12
|
+
/** The signed-out auth object for a token type. */
|
|
13
|
+
export declare function unauthenticatedObject<T extends TokenType>(type: T): AuthObjectFor<T>;
|
|
14
|
+
/** Builds the auth object for verified session claims. */
|
|
15
|
+
export declare function authObject(claims: SessionClaims, token: string): AuthObject;
|
|
16
|
+
/** The token types an `acceptsToken` value allows. */
|
|
17
|
+
export declare function acceptedTokenTypes(acceptsToken: AcceptsToken | undefined): readonly TokenType[];
|
|
18
|
+
/** Reads one cookie from a Cookie header. */
|
|
19
|
+
export declare function readCookie(header: string | null | undefined, name: string): string | undefined;
|
|
20
|
+
/** Reads the session token from an `Authorization: Bearer` header or the `__session` cookie. */
|
|
21
|
+
export declare function tokenFrom(headers: {
|
|
22
|
+
authorization?: string | null;
|
|
23
|
+
cookie?: string | null;
|
|
24
|
+
}, cookieName?: string): {
|
|
25
|
+
token: string | null;
|
|
26
|
+
fromHeader: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Authenticates a Fetch API `Request` (Next.js route handlers, Hono, Bun, Deno, Workers), like
|
|
30
|
+
* Clerk's `authenticateRequest`. It never throws for a missing or bad token.
|
|
31
|
+
*
|
|
32
|
+
* - `status: "signed-in"` or `"signed-out"`: use `toAuth()`.
|
|
33
|
+
* - `status: "handshake"`: the session cookie expired on a page load. Respond with
|
|
34
|
+
* `new Response(null, { status: 307, headers: state.headers })`; the browser returns with a
|
|
35
|
+
* fresh cookie.
|
|
36
|
+
*
|
|
37
|
+
* Bearer tokens may be session tokens, OAuth access tokens, M2M tokens or API keys; `acceptsToken`
|
|
38
|
+
* (default `"session_token"`) chooses which are allowed.
|
|
39
|
+
*/
|
|
40
|
+
export declare function authenticateRequest<T extends AcceptsToken = "session_token">(request: Request, options?: AuthenticateRequestOptions & {
|
|
41
|
+
acceptsToken?: T;
|
|
42
|
+
}): Promise<RequestState<AuthObjectFor<T>>>;
|
|
43
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACR,YAAY,EAEZ,0BAA0B,EAI1B,UAAU,EACV,aAAa,EAEb,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EACrB,MAAM,YAAY,CAAC;AAEpB,sFAAsF;AACtF,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AA2FvD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC,CASzG;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAchC,CAAC;AAEH,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAYpF;AAUD,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAuC3E;AA0GD,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,SAAS,EAAE,CAI/F;AAED,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAa9F;AAED,gGAAgG;AAChG,wBAAgB,SAAS,CACrB,OAAO,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAClE,UAAU,SAAiB,GAC5B;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAI/C;AAwED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,YAAY,GAAG,eAAe,EAC9E,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,0BAA0B,GAAG;IAAE,YAAY,CAAC,EAAE,CAAC,CAAA;CAAO,GAChE,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CA0DzC"}
|
package/dist/tokens.js
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createRemoteJWKSet, decodeJwt, errors as joseErrors, importSPKI, jwtVerify, } from "jose";
|
|
3
|
+
import { PistiError } from "./errors.js";
|
|
4
|
+
import { parsePublishableKey, trustedUrl } from "./keys.js";
|
|
5
|
+
/** Cookies and parameters shared with @pisti-paypiller/react and the Frontend API. */
|
|
6
|
+
export const SESSION_COOKIE = "__session";
|
|
7
|
+
export const CLIENT_UAT_COOKIE = "__client_uat";
|
|
8
|
+
export const HANDSHAKE_PARAMETER = "__pisti_handshake";
|
|
9
|
+
const REDIRECT_LOOP_COOKIE = "__pisti_redirect_loop";
|
|
10
|
+
const keySets = new Map();
|
|
11
|
+
const pemKeys = new Map();
|
|
12
|
+
function publishableKeyFrom(value) {
|
|
13
|
+
const key = value ?? process.env.PISTI_PUBLISHABLE_KEY;
|
|
14
|
+
if (!key)
|
|
15
|
+
throw new Error("Missing Pisti publishable key. Set PISTI_PUBLISHABLE_KEY (copy it from your application's Home page in the Pisti console) or pass { publishableKey }.");
|
|
16
|
+
return key;
|
|
17
|
+
}
|
|
18
|
+
// Signing keys are fetched once per issuer and cached for the life of the process.
|
|
19
|
+
function signingKeys(issuer, development) {
|
|
20
|
+
let keys = keySets.get(issuer.href);
|
|
21
|
+
if (!keys) {
|
|
22
|
+
keys = discoverKeys(issuer, development).catch((error) => {
|
|
23
|
+
keySets.delete(issuer.href);
|
|
24
|
+
throw error;
|
|
25
|
+
});
|
|
26
|
+
keySets.set(issuer.href, keys);
|
|
27
|
+
}
|
|
28
|
+
return keys;
|
|
29
|
+
}
|
|
30
|
+
async function discoverKeys(issuer, development) {
|
|
31
|
+
const discovery = new URL(".well-known/openid-configuration", issuer);
|
|
32
|
+
let metadata;
|
|
33
|
+
try {
|
|
34
|
+
const response = await fetch(discovery, { signal: AbortSignal.timeout(10_000), redirect: "error" });
|
|
35
|
+
if (!response.ok)
|
|
36
|
+
throw new Error(String(response.status));
|
|
37
|
+
metadata = (await response.json());
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new PistiError(503, "Pisti's signing keys could not be loaded. Try again shortly.", "service_unavailable");
|
|
41
|
+
}
|
|
42
|
+
if (metadata.issuer !== issuer.href || typeof metadata.jwks_uri !== "string")
|
|
43
|
+
throw new PistiError(503, "Pisti's discovery document does not match the publishable key.", "service_unavailable");
|
|
44
|
+
const jwks = trustedUrl(metadata.jwks_uri, development);
|
|
45
|
+
if (jwks.origin !== issuer.origin)
|
|
46
|
+
throw new PistiError(503, "Pisti's signing keys must come from its issuer.", "service_unavailable");
|
|
47
|
+
return createRemoteJWKSet(jwks, { timeoutDuration: 10_000, cooldownDuration: 30_000 });
|
|
48
|
+
}
|
|
49
|
+
// With a PEM key (jwtKey / PISTI_JWT_KEY) verification never touches the network.
|
|
50
|
+
function verificationKey(key, jwtKey) {
|
|
51
|
+
const pem = jwtKey ?? process.env.PISTI_JWT_KEY;
|
|
52
|
+
if (!pem)
|
|
53
|
+
return signingKeys(key.issuer, key.environment === "test");
|
|
54
|
+
let imported = pemKeys.get(pem);
|
|
55
|
+
if (!imported) {
|
|
56
|
+
// Environment variables often carry the PEM on one line with literal \n.
|
|
57
|
+
imported = importSPKI(pem.replaceAll("\\n", "\n"), "RS256").catch(() => {
|
|
58
|
+
pemKeys.delete(pem);
|
|
59
|
+
throw new Error("The JWT key is not a valid PEM public key. Copy it from API keys in the Pisti console.");
|
|
60
|
+
});
|
|
61
|
+
pemKeys.set(pem, imported);
|
|
62
|
+
}
|
|
63
|
+
return imported;
|
|
64
|
+
}
|
|
65
|
+
/** Verifies any Pisti-signed JWT for this environment and returns its payload. */
|
|
66
|
+
async function verifyJwt(token, key, options, kind) {
|
|
67
|
+
if (!token || token.length > 16_384)
|
|
68
|
+
throw new PistiError(401, `The ${kind} is missing or too large.`, "invalid_token");
|
|
69
|
+
const verifier = await verificationKey(key, options.jwtKey);
|
|
70
|
+
let payload;
|
|
71
|
+
try {
|
|
72
|
+
const verifyOptions = { issuer: key.issuer.href, algorithms: ["RS256"], clockTolerance: 5, requiredClaims: ["exp", "iat"] };
|
|
73
|
+
({ payload } =
|
|
74
|
+
typeof verifier === "function"
|
|
75
|
+
? await jwtVerify(token, verifier, verifyOptions)
|
|
76
|
+
: await jwtVerify(token, verifier, verifyOptions));
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof PistiError)
|
|
80
|
+
throw error;
|
|
81
|
+
if (error instanceof joseErrors.JWTExpired)
|
|
82
|
+
throw new PistiError(401, `The ${kind} has expired.`, "token_expired");
|
|
83
|
+
throw new PistiError(401, `The ${kind} is invalid.`, "invalid_token");
|
|
84
|
+
}
|
|
85
|
+
if (payload.fid !== key.frontendApiId)
|
|
86
|
+
throw new PistiError(401, `The ${kind} belongs to another environment.`, "invalid_token");
|
|
87
|
+
return payload;
|
|
88
|
+
}
|
|
89
|
+
function authorizedParties(options, development) {
|
|
90
|
+
return (options.authorizedParties ??
|
|
91
|
+
process.env.PISTI_AUTHORIZED_PARTIES?.split(",")
|
|
92
|
+
.map((value) => value.trim())
|
|
93
|
+
.filter(Boolean))?.map((origin) => trustedUrl(origin, development).origin);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verifies a session token and returns its claims. Throws `PistiError` (401) when the token is
|
|
97
|
+
* invalid, expired (`code: "token_expired"`), or belongs to another environment.
|
|
98
|
+
*/
|
|
99
|
+
export async function verifyToken(token, options = {}) {
|
|
100
|
+
const key = parsePublishableKey(publishableKeyFrom(options.publishableKey));
|
|
101
|
+
const parties = authorizedParties(options, key.environment === "test");
|
|
102
|
+
const payload = await verifyJwt(token, key, options, "session token");
|
|
103
|
+
if (payload.ptyp !== "session" || typeof payload.sub !== "string" || typeof payload.sid !== "string")
|
|
104
|
+
throw new PistiError(401, "This is not a session token.", "invalid_token");
|
|
105
|
+
if (parties && (typeof payload.azp !== "string" || !parties.includes(payload.azp)))
|
|
106
|
+
throw new PistiError(401, "The session token was issued to an unexpected origin.", "invalid_token");
|
|
107
|
+
return payload;
|
|
108
|
+
}
|
|
109
|
+
export const signedOutAuthObject = Object.freeze({
|
|
110
|
+
isAuthenticated: false,
|
|
111
|
+
tokenType: "session_token",
|
|
112
|
+
userId: null,
|
|
113
|
+
sessionId: null,
|
|
114
|
+
sessionStatus: null,
|
|
115
|
+
sessionClaims: null,
|
|
116
|
+
orgId: null,
|
|
117
|
+
orgSlug: null,
|
|
118
|
+
orgRole: null,
|
|
119
|
+
orgPermissions: null,
|
|
120
|
+
factorVerificationAge: null,
|
|
121
|
+
has: () => false,
|
|
122
|
+
getToken: async () => null,
|
|
123
|
+
});
|
|
124
|
+
/** The signed-out auth object for a token type. */
|
|
125
|
+
export function unauthenticatedObject(type) {
|
|
126
|
+
if (type === "session_token")
|
|
127
|
+
return signedOutAuthObject;
|
|
128
|
+
return Object.freeze({
|
|
129
|
+
isAuthenticated: false,
|
|
130
|
+
tokenType: type,
|
|
131
|
+
id: null,
|
|
132
|
+
subject: null,
|
|
133
|
+
userId: null,
|
|
134
|
+
scopes: null,
|
|
135
|
+
claims: null,
|
|
136
|
+
getToken: async () => null,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Clerk's presets. "second_factor" falls back to the first factor for users without one.
|
|
140
|
+
const presets = {
|
|
141
|
+
strict_mfa: { level: "multi_factor", afterMinutes: 10 },
|
|
142
|
+
strict: { level: "second_factor", afterMinutes: 10 },
|
|
143
|
+
moderate: { level: "second_factor", afterMinutes: 60 },
|
|
144
|
+
lax: { level: "second_factor", afterMinutes: 1440 },
|
|
145
|
+
};
|
|
146
|
+
/** Builds the auth object for verified session claims. */
|
|
147
|
+
export function authObject(claims, token) {
|
|
148
|
+
const permissions = Array.isArray(claims.org_permissions)
|
|
149
|
+
? claims.org_permissions.filter((value) => typeof value === "string")
|
|
150
|
+
: typeof claims.org_permissions === "string"
|
|
151
|
+
? [claims.org_permissions]
|
|
152
|
+
: null;
|
|
153
|
+
const now = Date.now() / 1000;
|
|
154
|
+
const age = (time) => (typeof time === "number" ? Math.floor((now - time) / 60) : -1);
|
|
155
|
+
const factorVerificationAge = [age(claims.auth_time), age(claims.mfa_authenticated_at)];
|
|
156
|
+
const orgRole = typeof claims.org_role === "string" ? claims.org_role : null;
|
|
157
|
+
const has = ({ permission, role, reverification }) => {
|
|
158
|
+
if (permission && !permissions?.includes(permission))
|
|
159
|
+
return false;
|
|
160
|
+
if (role && orgRole !== role)
|
|
161
|
+
return false;
|
|
162
|
+
if (reverification) {
|
|
163
|
+
const { level, afterMinutes } = typeof reverification === "string" ? presets[reverification] : reverification;
|
|
164
|
+
const [first, second] = factorVerificationAge;
|
|
165
|
+
const fresh = (minutes) => minutes >= 0 && minutes <= afterMinutes;
|
|
166
|
+
if (level === "first_factor" && !fresh(first))
|
|
167
|
+
return false;
|
|
168
|
+
// Sign-in enforces enrolled authenticators, so a session without one never had a second factor.
|
|
169
|
+
if (level === "second_factor" && !(second < 0 ? fresh(first) : fresh(second)))
|
|
170
|
+
return false;
|
|
171
|
+
if (level === "multi_factor" && !(fresh(first) && fresh(second)))
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
return Boolean(permission || role || reverification);
|
|
175
|
+
};
|
|
176
|
+
return Object.freeze({
|
|
177
|
+
isAuthenticated: true,
|
|
178
|
+
tokenType: "session_token",
|
|
179
|
+
userId: claims.sub,
|
|
180
|
+
sessionId: claims.sid,
|
|
181
|
+
sessionStatus: "active",
|
|
182
|
+
sessionClaims: Object.freeze({ ...claims }),
|
|
183
|
+
orgId: typeof claims.org_id === "string" ? claims.org_id : null,
|
|
184
|
+
orgSlug: typeof claims.org_slug === "string" ? claims.org_slug : null,
|
|
185
|
+
orgRole,
|
|
186
|
+
orgPermissions: permissions,
|
|
187
|
+
factorVerificationAge,
|
|
188
|
+
has,
|
|
189
|
+
getToken: async () => token,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function scopesOf(payload) {
|
|
193
|
+
return typeof payload.scope === "string" ? payload.scope.split(" ").filter(Boolean) : [];
|
|
194
|
+
}
|
|
195
|
+
/** Verifies an OAuth access token or M2M token offline. */
|
|
196
|
+
async function verifyMachineJwt(token, type, key, options) {
|
|
197
|
+
const payload = await verifyJwt(token, key, options, type === "m2m_token" ? "machine token" : "OAuth access token");
|
|
198
|
+
if (payload.ptyp !== (type === "m2m_token" ? "m2m" : "oauth") || typeof payload.sub !== "string")
|
|
199
|
+
throw new PistiError(401, "The token type doesn't match.", "invalid_token");
|
|
200
|
+
const claims = Object.freeze({ ...payload });
|
|
201
|
+
const id = typeof payload.jti === "string" ? payload.jti : null;
|
|
202
|
+
if (type === "m2m_token")
|
|
203
|
+
return Object.freeze({
|
|
204
|
+
isAuthenticated: true,
|
|
205
|
+
tokenType: "m2m_token",
|
|
206
|
+
id,
|
|
207
|
+
subject: payload.sub,
|
|
208
|
+
machineId: payload.sub,
|
|
209
|
+
scopes: scopesOf(payload),
|
|
210
|
+
claims,
|
|
211
|
+
getToken: async () => token,
|
|
212
|
+
});
|
|
213
|
+
return Object.freeze({
|
|
214
|
+
isAuthenticated: true,
|
|
215
|
+
tokenType: "oauth_token",
|
|
216
|
+
id,
|
|
217
|
+
subject: payload.sub,
|
|
218
|
+
userId: payload.sub,
|
|
219
|
+
clientId: typeof payload.client_id === "string" ? payload.client_id : null,
|
|
220
|
+
scopes: scopesOf(payload),
|
|
221
|
+
claims,
|
|
222
|
+
getToken: async () => token,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
const clients = new Map();
|
|
226
|
+
// Verified API keys are reused briefly, so a busy API does not call Pisti on every request. A revoked key can keep
|
|
227
|
+
// working in each process for up to this long.
|
|
228
|
+
const API_KEY_CACHE_MS = 10_000;
|
|
229
|
+
const API_KEY_CACHE_LIMIT = 1_000;
|
|
230
|
+
const verifiedApiKeys = new Map();
|
|
231
|
+
/** Verifies an end user's API key with the backend API, reusing a recent verification. */
|
|
232
|
+
async function verifyApiKey(token, options, publishableKey) {
|
|
233
|
+
const secretKey = options.secretKey ?? process.env.PISTI_SECRET_KEY;
|
|
234
|
+
if (!secretKey)
|
|
235
|
+
throw new Error("Verifying API keys needs your secret key. Set PISTI_SECRET_KEY or pass { secretKey }.");
|
|
236
|
+
// Keyed by a digest, so the cache never holds the presented secrets themselves.
|
|
237
|
+
const verification = createHash("sha256").update(`${secretKey}\n${publishableKey}\n${token}`).digest("base64url");
|
|
238
|
+
const cached = verifiedApiKeys.get(verification);
|
|
239
|
+
if (cached && cached.expiresAt > Date.now())
|
|
240
|
+
return cached.key;
|
|
241
|
+
verifiedApiKeys.delete(verification);
|
|
242
|
+
// Imported lazily: the management client itself depends on this module.
|
|
243
|
+
const { createPistiClient, PistiManagementError } = await import("./management.js");
|
|
244
|
+
const cacheKey = `${secretKey}\n${publishableKey}`;
|
|
245
|
+
let client = clients.get(cacheKey);
|
|
246
|
+
if (!client) {
|
|
247
|
+
client = createPistiClient({ secretKey, publishableKey });
|
|
248
|
+
clients.set(cacheKey, client);
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const key = await client.apiKeys.verifySecret(token);
|
|
252
|
+
const authenticated = Object.freeze({
|
|
253
|
+
isAuthenticated: true,
|
|
254
|
+
tokenType: "api_key",
|
|
255
|
+
id: key.id,
|
|
256
|
+
name: key.name,
|
|
257
|
+
subject: key.subject,
|
|
258
|
+
userId: key.userId,
|
|
259
|
+
scopes: key.scopes,
|
|
260
|
+
claims: key.claims,
|
|
261
|
+
getToken: async () => token,
|
|
262
|
+
});
|
|
263
|
+
const expiresAt = Math.min(Date.now() + API_KEY_CACHE_MS, key.expiresAt ? Date.parse(key.expiresAt) : Infinity);
|
|
264
|
+
if (verifiedApiKeys.size >= API_KEY_CACHE_LIMIT) {
|
|
265
|
+
for (const [entry, value] of verifiedApiKeys)
|
|
266
|
+
if (value.expiresAt <= Date.now())
|
|
267
|
+
verifiedApiKeys.delete(entry);
|
|
268
|
+
// Maps iterate in insertion order, so the first entry is the oldest.
|
|
269
|
+
const oldest = verifiedApiKeys.keys().next();
|
|
270
|
+
if (verifiedApiKeys.size >= API_KEY_CACHE_LIMIT && !oldest.done)
|
|
271
|
+
verifiedApiKeys.delete(oldest.value);
|
|
272
|
+
}
|
|
273
|
+
verifiedApiKeys.set(verification, { key: authenticated, expiresAt });
|
|
274
|
+
return authenticated;
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof PistiManagementError && (error.status === 401 || error.status === 404))
|
|
278
|
+
throw new PistiError(401, "The API key is invalid, expired or revoked.", "invalid_token");
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** Which token type a bearer value looks like, without verifying it. */
|
|
283
|
+
function classify(token) {
|
|
284
|
+
if (token.startsWith("ak_"))
|
|
285
|
+
return "api_key";
|
|
286
|
+
try {
|
|
287
|
+
const ptyp = decodeJwt(token).ptyp;
|
|
288
|
+
return ptyp === "session" ? "session_token" : ptyp === "oauth" ? "oauth_token" : ptyp === "m2m" ? "m2m_token" : null;
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/** The token types an `acceptsToken` value allows. */
|
|
295
|
+
export function acceptedTokenTypes(acceptsToken) {
|
|
296
|
+
const value = acceptsToken ?? "session_token";
|
|
297
|
+
if (value === "any")
|
|
298
|
+
return ["session_token", "api_key", "m2m_token", "oauth_token"];
|
|
299
|
+
return typeof value === "string" ? [value] : value;
|
|
300
|
+
}
|
|
301
|
+
/** Reads one cookie from a Cookie header. */
|
|
302
|
+
export function readCookie(header, name) {
|
|
303
|
+
if (!header)
|
|
304
|
+
return undefined;
|
|
305
|
+
for (const part of header.split(";")) {
|
|
306
|
+
const separator = part.indexOf("=");
|
|
307
|
+
if (separator > 0 && part.slice(0, separator).trim() === name) {
|
|
308
|
+
try {
|
|
309
|
+
return decodeURIComponent(part.slice(separator + 1).trim());
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
/** Reads the session token from an `Authorization: Bearer` header or the `__session` cookie. */
|
|
319
|
+
export function tokenFrom(headers, cookieName = SESSION_COOKIE) {
|
|
320
|
+
const authorization = headers.authorization;
|
|
321
|
+
if (authorization?.startsWith("Bearer "))
|
|
322
|
+
return { token: authorization.slice(7).trim(), fromHeader: true };
|
|
323
|
+
return { token: readCookie(headers.cookie, cookieName) ?? null, fromHeader: false };
|
|
324
|
+
}
|
|
325
|
+
function isDocumentRequest(request) {
|
|
326
|
+
if (request.method !== "GET")
|
|
327
|
+
return false;
|
|
328
|
+
const destination = request.headers.get("sec-fetch-dest");
|
|
329
|
+
if (destination)
|
|
330
|
+
return destination === "document";
|
|
331
|
+
return (request.headers.get("accept") ?? "").includes("text/html");
|
|
332
|
+
}
|
|
333
|
+
function state(status, auth, details = {}) {
|
|
334
|
+
return {
|
|
335
|
+
isAuthenticated: auth.isAuthenticated,
|
|
336
|
+
status,
|
|
337
|
+
reason: details.reason ?? null,
|
|
338
|
+
message: details.message ?? null,
|
|
339
|
+
token: details.token ?? null,
|
|
340
|
+
tokenType: auth.isAuthenticated ? auth.tokenType : null,
|
|
341
|
+
headers: details.headers ?? new Headers(),
|
|
342
|
+
toAuth: () => auth,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
function cookie(name, value, maxAge, secure) {
|
|
346
|
+
return `${name}=${value}; Path=/; Max-Age=${maxAge}; SameSite=Lax${secure ? "; Secure" : ""}`;
|
|
347
|
+
}
|
|
348
|
+
/** Sends the browser through the Frontend API to refresh an expired session cookie, like Clerk's handshake. */
|
|
349
|
+
function startHandshake(request, url, key, reason) {
|
|
350
|
+
const loops = Number(readCookie(request.headers.get("cookie"), REDIRECT_LOOP_COOKIE) ?? 0) || 0;
|
|
351
|
+
if (loops >= 3)
|
|
352
|
+
return state("signed-out", signedOutAuthObject, {
|
|
353
|
+
reason: "handshake-loop",
|
|
354
|
+
message: "The session couldn't be refreshed. Check that this origin is allowed under Domains in the Pisti console.",
|
|
355
|
+
});
|
|
356
|
+
const target = new URL(`${key.frontendApi.href.replace(/\/$/, "")}/handshake`);
|
|
357
|
+
target.searchParams.set("redirect_url", url.href);
|
|
358
|
+
const headers = new Headers({ Location: target.href, "Cache-Control": "no-store" });
|
|
359
|
+
headers.append("Set-Cookie", cookie(REDIRECT_LOOP_COOKIE, String(loops + 1), 5, url.protocol === "https:"));
|
|
360
|
+
return state("handshake", signedOutAuthObject, { reason, message: "Refreshing the session cookie.", headers });
|
|
361
|
+
}
|
|
362
|
+
/** Turns a returned handshake into cookies and a redirect to the clean URL. */
|
|
363
|
+
async function completeHandshake(handshake, url, key, options) {
|
|
364
|
+
let payload;
|
|
365
|
+
try {
|
|
366
|
+
payload = await verifyJwt(handshake, key, options, "handshake");
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
if (!(error instanceof PistiError))
|
|
370
|
+
throw error;
|
|
371
|
+
return state("signed-out", signedOutAuthObject, { reason: "handshake-invalid", message: error.message });
|
|
372
|
+
}
|
|
373
|
+
if (payload.ptyp !== "handshake" || payload.azp !== url.origin || typeof payload.client_uat !== "number")
|
|
374
|
+
return state("signed-out", signedOutAuthObject, { reason: "handshake-invalid", message: "The handshake is for another app." });
|
|
375
|
+
const secure = url.protocol === "https:";
|
|
376
|
+
const clean = new URL(url);
|
|
377
|
+
clean.searchParams.delete(HANDSHAKE_PARAMETER);
|
|
378
|
+
const headers = new Headers({ Location: clean.href, "Cache-Control": "no-store" });
|
|
379
|
+
const session = typeof payload.session_token === "string" ? payload.session_token : null;
|
|
380
|
+
headers.append("Set-Cookie", session ? cookie(SESSION_COOKIE, session, 60, secure) : cookie(SESSION_COOKIE, "", 0, secure));
|
|
381
|
+
headers.append("Set-Cookie", cookie(CLIENT_UAT_COOKIE, String(Math.trunc(payload.client_uat)), 31_536_000, secure));
|
|
382
|
+
headers.append("Set-Cookie", cookie(REDIRECT_LOOP_COOKIE, "", 0, secure));
|
|
383
|
+
return state("handshake", signedOutAuthObject, { reason: "handshake-complete", message: "The session cookie was refreshed.", headers });
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Authenticates a Fetch API `Request` (Next.js route handlers, Hono, Bun, Deno, Workers), like
|
|
387
|
+
* Clerk's `authenticateRequest`. It never throws for a missing or bad token.
|
|
388
|
+
*
|
|
389
|
+
* - `status: "signed-in"` or `"signed-out"`: use `toAuth()`.
|
|
390
|
+
* - `status: "handshake"`: the session cookie expired on a page load. Respond with
|
|
391
|
+
* `new Response(null, { status: 307, headers: state.headers })`; the browser returns with a
|
|
392
|
+
* fresh cookie.
|
|
393
|
+
*
|
|
394
|
+
* Bearer tokens may be session tokens, OAuth access tokens, M2M tokens or API keys; `acceptsToken`
|
|
395
|
+
* (default `"session_token"`) chooses which are allowed.
|
|
396
|
+
*/
|
|
397
|
+
export async function authenticateRequest(request, options = {}) {
|
|
398
|
+
const publishableKey = publishableKeyFrom(options.publishableKey);
|
|
399
|
+
const key = parsePublishableKey(publishableKey);
|
|
400
|
+
const types = acceptedTokenTypes(options.acceptsToken);
|
|
401
|
+
const fallback = unauthenticatedObject(types[0] ?? "session_token");
|
|
402
|
+
const url = new URL(request.url);
|
|
403
|
+
const authorization = request.headers.get("authorization");
|
|
404
|
+
const handshake = url.searchParams.get(HANDSHAKE_PARAMETER);
|
|
405
|
+
if (handshake && types.includes("session_token"))
|
|
406
|
+
return (await completeHandshake(handshake, url, key, options));
|
|
407
|
+
if (authorization?.startsWith("Bearer ")) {
|
|
408
|
+
const token = authorization.slice(7).trim();
|
|
409
|
+
const type = classify(token);
|
|
410
|
+
if (!type)
|
|
411
|
+
return state("signed-out", fallback, { reason: "token-invalid", message: "The bearer token isn't a Pisti token." });
|
|
412
|
+
if (!types.includes(type))
|
|
413
|
+
return state("signed-out", fallback, { reason: "token-type-mismatch", message: `This endpoint doesn't accept ${type} tokens.` });
|
|
414
|
+
try {
|
|
415
|
+
const auth = type === "session_token"
|
|
416
|
+
? authObject(await verifyToken(token, options), token)
|
|
417
|
+
: type === "api_key"
|
|
418
|
+
? await verifyApiKey(token, options, publishableKey)
|
|
419
|
+
: await verifyMachineJwt(token, type, key, options);
|
|
420
|
+
return state("signed-in", auth, { token });
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
if (error instanceof PistiError && error.status === 401)
|
|
424
|
+
return state("signed-out", unauthenticatedObject(type), { reason: "token-invalid", message: error.message });
|
|
425
|
+
throw error;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (!types.includes("session_token"))
|
|
429
|
+
return state("signed-out", fallback, { reason: "token-missing", message: "No token in the request." });
|
|
430
|
+
const cookies = request.headers.get("cookie");
|
|
431
|
+
const session = readCookie(cookies, options.cookieName ?? SESSION_COOKIE);
|
|
432
|
+
const uatValue = readCookie(cookies, CLIENT_UAT_COOKIE);
|
|
433
|
+
const uat = uatValue === undefined ? undefined : Number(uatValue) || 0;
|
|
434
|
+
const document = isDocumentRequest(request);
|
|
435
|
+
// Only page loads can take the handshake redirect; API calls are refreshed by the browser SDK.
|
|
436
|
+
const refresh = (reason, message) => (document ? startHandshake(request, url, key, reason) : state("signed-out", signedOutAuthObject, { reason, message }));
|
|
437
|
+
if (!session) {
|
|
438
|
+
if (uat !== undefined && uat > 0)
|
|
439
|
+
return refresh("client-uat-without-session-token", "The session cookie is missing.");
|
|
440
|
+
return state("signed-out", signedOutAuthObject, { reason: "session-token-missing", message: "No session token in the request." });
|
|
441
|
+
}
|
|
442
|
+
if (uat === 0)
|
|
443
|
+
return state("signed-out", signedOutAuthObject, { reason: "client-signed-out", message: "The browser signed out." });
|
|
444
|
+
try {
|
|
445
|
+
const claims = await verifyToken(session, options);
|
|
446
|
+
if (uat !== undefined && claims.iat < uat)
|
|
447
|
+
return refresh("session-token-outdated", "The session cookie predates the latest sign-in.");
|
|
448
|
+
return state("signed-in", authObject(claims, session), { token: session });
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
if (!(error instanceof PistiError) || error.status !== 401)
|
|
452
|
+
throw error;
|
|
453
|
+
if (error.code === "token_expired")
|
|
454
|
+
return refresh("session-token-expired", error.message);
|
|
455
|
+
return state("signed-out", signedOutAuthObject, { reason: "session-token-invalid", message: error.message });
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
|