expo-iap 5.3.0 → 5.3.2
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/{CLAUDE.md → AGENTS.md} +1 -3
- package/CONTRIBUTING.md +5 -12
- package/README.md +3 -3
- package/android/src/main/java/expo/modules/iap/ExpoIapHelper.kt +87 -39
- package/android/src/main/java/expo/modules/iap/ExpoIapLog.kt +4 -0
- package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +35 -27
- package/build/index.d.ts.map +1 -1
- package/build/index.js +65 -30
- package/build/index.js.map +1 -1
- package/build/index.kepler.d.ts.map +1 -1
- package/build/index.kepler.js +9 -1
- package/build/index.kepler.js.map +1 -1
- package/build/kit-api.d.ts +119 -2
- package/build/kit-api.d.ts.map +1 -1
- package/build/kit-api.js +3 -1
- package/build/kit-api.js.map +1 -1
- package/build/types.d.ts +33 -9
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/vega-adapter.d.ts.map +1 -1
- package/build/vega-adapter.js +5 -6
- package/build/vega-adapter.js.map +1 -1
- package/bun.lock +421 -1139
- package/ios/ExpoIapHelper.swift +80 -17
- package/ios/ExpoIapLog.swift +6 -6
- package/ios/ExpoIapModule.swift +20 -7
- package/ios/onside/OnsideIapModule.swift +28 -56
- package/openiap-versions.json +3 -3
- package/osv-scanner.toml +9 -0
- package/package.json +8 -2
- package/plugin/build/withVega.js +10 -0
- package/plugin/src/withVega.ts +10 -0
- package/src/index.kepler.ts +9 -1
- package/src/index.ts +54 -9
- package/src/kit-api.ts +125 -4
- package/src/types.ts +34 -9
- package/src/vega-adapter.ts +6 -11
- package/tests/ios/ExpoIapLogTests.swift +37 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vega-adapter.js","sourceRoot":"","sources":["../src/vega-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAqBlC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,qCAAqC,GAAG,KAAK,CAAC;AACpD,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC3C,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAChD,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AAC9C,MAAM,+BAA+B,GAAG,KAAK,CAAC;AA8H9C,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAC1D,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AACjD,MAAM,0BAA0B,GAAG;IACjC,0CAA0C;IAC1C,wCAAwC;CACzC,CAAC;AAEF,SAAS,eAAe,CACtB,IAAe,EACf,OAAe,EACf,YAAsB,EACtB,SAAkB;IAElB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAS9B,CAAC;IACF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC;IAC7B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,CAAC,KAAK,CACV,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CACtE,CACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;QACpE,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IACE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QACvB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,gBAAgB,IAAI,CAAC,CAAC;IAC7C,IACE,CAAC,cAAc,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EACzE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;IAClD,OAAO,cAAc,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,QAAQ,CAAC;IACb,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAC7D,IAAI,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,kBAAkB;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CACJ,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,CACzE,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAuB;IACjD,MAAM,gBAAgB,GACpB,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;QAChB,CAAC,CAAC,uBAAuB,CAAC;IAC9B,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/D,sEAAsE;IACtE,qEAAqE;IACrE,MAAM,WAAW,GAAG,gCAAgC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;IAClC,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,eAAe;QACpC,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,MAAM,YAAY,GAChB,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAChB,UAAU,KAAK,IAAI;QACnB,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;IAC3E,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;QACtD,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,IAAK,GAAG,CAAC,CAAC,CAAC,IAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,GAAG,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,kBAAkB,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,eAAuB,EACvB,SAAkB;IAElB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,KASvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,SAAS,CAAC,aAAa;YACrD,YAAY,EAAE,eAAe,CAAC,YAAY;YAC1C,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;YACtD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;YACzC,SAAS,EAAE,eAAe,CAAC,SAAS,IAAI,SAAS;YACjD,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,YAAY,EAAE,eAAe,CAAC,YAAY;YAC1C,sBAAsB,EAAE,eAAe,CAAC,sBAAsB;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,aAAa;QAC7B,OAAO,EAAE,eAAe;QACxB,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAqB;IAC7C,OAAO,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,SAAqB,EACrB,SAAiB,EACjB,YAAmB;IAEnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;QACpE,SAAS,CAAC,IAAI,CACZ,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAChB,SAA4B,EAC5B,YAAqB;IAErB,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,SAAS,KAAK,UAAU;YAC7B,CAAC,CAAC,YAAY,KAAK,yBAAyB;YAC5C,CAAC,CAAC,YAAY,KAAK,gBAAgB,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CACnB,SAA4B,EAC5B,YAAqB;IAErB,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,SAAS,CAAC,YAAY,CAAC;IACtE,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC,WAAW,CAAC;IAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,SAAS,CAAC,mBAAmB,CAAC;IACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC;IACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,KAAK,UAAU;YAC7B,CAAC,CAAC,SAAS,CAAC,aAAa;YACzB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,YAAY,CAAC;YACtD,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,WAAW,CAAC;YACrD,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,mBAAmB,CAAC;YAC7D,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,aAAa,CAAC;QACzD,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC,mBAAmB,CAAC;QACvC,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC,YAAY,CAAC;QAChC,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC,YAAY,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC,YAAY,CAAC;IAChE,IAAI,SAAS,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC,cAAc,CAAC;IAC/D,OAAO,SAAS,CAAC,aAAa,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAA4B,EAC5B,YAAqB;IAErB,IAAI,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,SAAS,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,OAAO,YAAY,KAAK,CAAC,CAAC;IAChE,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,6BAA6B,CAAC,YAAqB;IAC1D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CACvB,SAA4B,EAC5B,QAAyC,EACzC,OAAe,EACf,SAAkB;IAElB,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,CAAC;IAC5C,IAAI,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;QAAE,OAAO;IAC/C,MAAM,eAAe,CACnB,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,EACrC,GAAG,OAAO,8BAA8B,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC,EAAE,EAC3E,YAAY,EACZ,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,OAAoB;IAC1C,OAAO,OAAO,CAAC,KAAK,IAAI,IAAI;QAC1B,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,OAAO,CAAC,KAAK;QACf,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAoB;IAChD,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,MAAM,GAAG,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAoB;IACpC,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM;YACrC,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAChC,CAAC;IACD,OAAO,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,OAAoB;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;QACnE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,OAAoB;IACvC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,WAAoB;IAC1C,IAAI,OAAO,WAAW,KAAK,QAAQ;QACjC,OAAO,WAAW,KAAK,yBAAyB,CAAC;IACnD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAoB;IAChD,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,OAAoB;IAC1C,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAoB;IACjD,IAAI,OAAO,CAAC,kBAAkB;QAAE,OAAO,OAAO,CAAC,kBAAkB,CAAC;IAElE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,OAAoB;IACzC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAoB,EACpB,iBAAuC,EACvC,WAAoB;IAEpB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,WAAW,IAAI,EAAE,CAAC;IACxD,OAAO,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CACzB,WAA2E;IAE3E,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,WAAW,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,GAAG,OAAO;YACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG;SACxB,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG;KACxB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAI,KAAU,EAAE,IAAY;IAC7C,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;QACL,mCAAmC,EAAE,KAAK;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,SAAiB;IAC9D,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,eAAe,CACpB,SAAS,CAAC,6BAA6B,EACvC,GAAG,SAAS,mCAAmC,MAAM,EAAE,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoB;IAC9C,OAAO;QACL,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,qBAAqB,CAAC,OAAO,CAAC;QAC7C,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC;QACxC,iBAAiB,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrE,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC;QACvC,cAAc,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,OAAoB;IAC/D,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9B,OAAO;QACL,iBAAiB,EAAE,GAAG;QACtB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;QAC9B,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;QACtC,EAAE,EAAE,GAAG;QACP,gBAAgB,EAAE,EAAE;QACpB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,eAAwB;QACrC,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,oBAAoB,EAAE;YACpB,gBAAgB,EAAE,CAAC,YAAY,CAAC;SACjC;QACD,IAAI,EAAE,cAAuB;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAAoB;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QAC3B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,WAAW,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QACjC,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;QACtC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;QACxB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,SAAkB;QAC5B,WAAW,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QACjC,oBAAoB,EAAE,IAAa;QACnC,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,GAAG,IAAI;YACP,IAAI;YACJ,kBAAkB,EAAE,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,IAAI;QACJ,kBAAkB,EAAE,IAAI;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,OAAoB,EACpB,mBAA6B,EAC7B,iBAA0B,EAC1B,QAA8B;IAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,iBAAiB,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC;IAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAExD,OAAO;QACL,EAAE,EAAE,SAAS;QACb,SAAS;QACT,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;QAClD,aAAa,EAAE,SAAS;QACxB,aAAa,EACX,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QACzE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACjC,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACjD,cAAc,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ;QAC3C,aAAa,EAAE,SAAS;QACxB,mBAAmB,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ;QAChD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACpC,gBAAgB,EAAE,IAAI;QACtB,qBAAqB,EAAE,KAAK;QAC5B,kBAAkB,EAAE,IAAI;QACxB,0BAA0B,EAAE,IAAI;QAChC,0BAA0B,EAAE,IAAI;QAChC,uBAAuB,EAAE,IAAI;QAC7B,kBAAkB,EAAE,KAAK;QACzB,4BAA4B,EAC1B,OAAO,CAAC,UAAU,IAAI,WAAW;YAC/B,CAAC,CAAC,EAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,SAAS,EAAC;YACrD,CAAC,CAAC,IAAI;QACV,YAAY,EAAE,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC9C,qBAAqB,EAAE,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3D,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAClE,IAAI,cAAc,GAAwB,IAAI,CAAC;IAE/C,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAE,OAAgB,EAAQ,EAAE;QACzD,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACjE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,OAAoB,EAAQ,EAAE;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO;QAEzB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC5C,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAClE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACtE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,0BAA0B,GAAG,CACjC,OAAoB,EACpB,GAAW,EACF,EAAE;QACX,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,IAAI,UAAU,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC/D,IAAI,UAAU,KAAK,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAChE,IAAI,UAAU,KAAK,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClE,OAAO,UAAU,KAAK,GAAG,GAAG,OAAO,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,CAC9B,OAAoB,EACpB,iBAA0B,EAClB,EAAE;QACV,IAAI,iBAAiB;YAAE,OAAO,iBAAiB,CAAC;QAEhD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,sBAAsB,EAAE,CAAC;YACpE,IAAI,UAAU,KAAK,gBAAgB;gBAAE,OAAO,UAAU,CAAC;QACzD,CAAC;QAED,KAAK,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,wBAAwB,EAAE,CAAC;YACxE,IAAI,UAAU,KAAK,kBAAkB;gBAAE,OAAO,UAAU,CAAC;QAC3D,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACzD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,IAAkC,EAAE;QAC3D,IAAI,QAA8B,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QAC5E,cAAc,GAAG,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC3C,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,IAAqB,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW,IAAI,QAAQ,EAAE,WAAW,CAAC;YAClE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrE,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,GACb,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAE,KAAkC,CAAC,IAAI;gBAC1C,CAAC,CAAC,SAAS,CAAC;YAChB,IACE,OAAO,SAAS,KAAK,QAAQ;gBAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAsB,CAAC,EACzD,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,yCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,KAAK,IAA4B,EAAE;QACnE,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,GAAG,CAAC;YACF,IAAI,SAAS,IAAI,yBAAyB,EAAE,CAAC;gBAC3C,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YACD,SAAS,EAAE,CAAC;YAEZ,IAAI,QAAQ,GAAuC,IAAI,CAAC;YACxD,KACE,IAAI,OAAO,GAAG,CAAC,EACf,OAAO,IAAI,6BAA6B,EACxC,OAAO,IAAI,CAAC,EACZ,CAAC;gBACD,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC;gBACvD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,MAAM,qBAAqB,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;oBACrE,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IACE,CAAC,QAAQ;oBACT,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAAC;oBAC/D,OAAO,KAAK,6BAA6B,EACzC,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YACD,gBAAgB,CACd,kBAAkB,EAClB,QAAQ,EACR,yCAAyC,CAC1C,CAAC;YACF,cAAc,GAAG,QAAQ,CAAC,QAAQ,IAAI,cAAc,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC,QAAQ,OAAO,EAAE;QAElB,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAC1B,IAAc,EACd,OAAe,EACS,EAAE;QAC1B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;YAC7D,gBAAgB,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,KAAK,EAC1C,QAAuB,EACR,EAAE;QACjB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;gBAChC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;gBAChC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAEnC,IAAI,QAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,cAAc,CAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EACvB,+DAA+D,CAChE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,qBAAqB,CACzB,KAAK,EACL,uCAAuC,CACxC,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,QAA0B,EACL,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,yBAAyB,EAAE,CAAC;QACnD,MAAM,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,QAAQ;aACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;YACtE,OAAO,CAAC,UAAU,CAAC;QACrB,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,UAAU,CACR,OAAO,EACP,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAChD,uBAAuB,CAAC,OAAO,CAAC,EAChC,cAAc,CACf,CACF,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,aAAqB,EAAiB,EAAE;QACnE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,iEAAiE,CAClE,CAAC;QACJ,CAAC;QAED,IAAI,YAAY,GAAwB,IAAI,CAAC;QAC7C,KACE,IAAI,OAAO,GAAG,CAAC,EACf,OAAO,IAAI,+BAA+B,EAC1C,OAAO,IAAI,CAAC,EACZ,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,OAAO,CAAC,iBAAiB,CAAC;gBACxB,iBAAiB,EAAE,4BAA4B;gBAC/C,SAAS,EAAE,aAAa;aACzB,CAAC,EACF,qCAAqC,EACrC,eAAe,CACb,SAAS,CAAC,cAAc,EACxB,0CAA0C,CAC3C,CACF,CAAC;YACF,IAAI,SAAS,CAAC,oBAAoB,EAAE,QAAQ,EAAE,YAAY,CAAC;gBAAE,OAAO;YACpE,YAAY,GAAG,QAAQ,CAAC;YACxB,IAAI,OAAO,GAAG,+BAA+B,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,gBAAgB,CACd,oBAAoB,EACpB,YAAY,EACZ,0CAA0C,CAC3C,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,KAAK,EACvC,GAAW,EACX,mBAA6B,EAC7B,OAAiC,EACU,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,yBAAyB,EAAE,CAAC;QACnD,MAAM,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAe,EAAE,CAAC;QAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;YACtE,IAAI,UAAU;gBAAE,SAAS;YAEzB,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5D,IACE,OAAO,EAAE,iBAAiB,IAAI,IAAI;gBAClC,CAAC,iBAAiB,KAAK,CAAC;oBACtB,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,EAChD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,CACzB,OAAO,EACP,OAAO,CAAC,WAAW;gBACjB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC;gBACrD,mBAAmB,EACrB,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,EACrC,cAAc,CACf,CAAC;YACF,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,EAAC,kBAAkB,EAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAC5B,OAAwC,EACG,EAAE;QAC7C,SAAS,oBAAoB,CAAC,KAAc;YAC1C,MAAM,UAAU,GACd,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAsB;gBAC1C,UAAU;gBACV,wBAAwB;gBACxB,SAAS;gBACT,UAAU;gBACV,SAAS;gBACT,kBAAkB;gBAClB,UAAU;gBACV,SAAS;gBACT,aAAa;aACd,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,GAAG,CAAC,UAAiC,CAAC;gBAClD,CAAC,CAAE,UAAkC;gBACrC,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAED,SAAS,yBAAyB,CAChC,IAAa,EACb,KAAK,GAAG,CAAC;YAET,IAAI,KAAK,GAAG,sBAAsB;gBAAE,OAAO,IAAI,CAAC;YAChD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACnD,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,SAAS,oBAAoB,CAAC,KAAa;gBACzC,IAAI,KAAK,IAAI,sBAAsB;oBAAE,OAAO,KAAK,CAAC;gBAClD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACjC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;wBACzC,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;wBACzD,CAAC,CAAC,KAAK,CAAC;gBACZ,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,aAAa,GAAI,OAAmC;qBACvD,aAAa,CAAC;gBACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,OAAO,OAAO,UAAU,KAAK,QAAQ;oBACnC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC;oBAClC,CAAC,CAAC,yBAAyB,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS,uBAAuB,CAAC,IAAY;YAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,SAAS,oBAAoB,CAC3B,IAAa;YAEb,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,SAAS,eAAe,CAAC,IAAa;YACpC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpD,CAAC;QAED,SAAS,gBAAgB,CACvB,IAA6B,EAC7B,MAAc;YAEd,IACE,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;gBACjC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAC9B,IAAI,CAAC,KAAK,KAAK,QAAQ,EACvB,CAAC;gBACD,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,4CAA4C,MAAM,IAAI,CACvD,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,4CAA4C,MAAM,IAAI,CACvD,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACrC,IACE,WAAW,IAAI,IAAI;gBACnB,CAAC,OAAO,WAAW,KAAK,QAAQ;oBAC9B,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,YAAY,CAAC,CAAC,EAC9D,CAAC;gBACD,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,4CAA4C,MAAM,IAAI,CACvD,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,WAAW,EAAC,CAAC;gBAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,SAAS,EAAC,CAAC;gBACzC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;gBACvC,KAAK,EAAE,QAAQ;aAChB,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,eAAe,CACnB,SAAS,CAAC,mBAAmB,EAC7B,+CAA+C,OAAO,CAAC,QAAQ,GAAG,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,YAAY,GAChB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;QAC9B,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,wBAAwB,CACzB,CAAC;YACF,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,UAAU,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,QAAQ;oBACf,MAAM;oBACN,SAAS;oBACT,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI;wBAClC,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAC,CAAC;oBAClD,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC;iBAC7D,CAAC;gBACF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,+CAA+C,CACpD,CAAC;QACJ,CAAC;QACD,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,eAAe,CACnB,SAAS,CAAC,YAAY,EACtB,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,8CAA8C,CACnD,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,yBAAyB,CAAC,IAAI,CAAC,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAC7D,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,2CAA2C,QAAQ,CAAC,MAAM,IAAI,CAC/D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,4CAA4C,QAAQ,CAAC,MAAM,IAAI,CAChE,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,eAAe,CACnB,SAAS,CAAC,0BAA0B,EACpC,yBAAyB,CAAC,IAAI,CAAC,IAAI,6BAA6B,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,UAAU,GAAsB;QACpC,WAAW,EAAE,SAAS;QACtB,KAAK,CAAC,cAAc;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,aAAa;YACjB,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC1B,sBAAsB,CAAC,KAAK,EAAE,CAAC;YAC/B,wBAAwB,CAAC,KAAK,EAAE,CAAC;YACjC,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,IAAc;YAEd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,eAAe,CAAC,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,EACJ,sCAAsC,CACvC,CAAC;YAEF,OAAO,QAAQ;iBACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClB,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClE,IAAI,IAAI,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAChC,IAAI,IAAI,KAAK,MAAM;oBAAE,OAAO,WAAW,KAAK,MAAM,CAAC;gBACnD,OAAO,WAAW,KAAK,QAAQ,CAAC;YAClC,CAAC,CAAC;iBACD,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,MAAM;YAC1B,IAAI,GAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,eAAe,CACnB,SAAS,CAAC,cAAc,EACxB,2DAA2D,CAC5D,CAAC;gBACJ,CAAC;gBAED,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;gBACf,MAAM,mBAAmB,GACvB,MAAM,CAAC,IAAI,KAAK,MAAM;oBACpB,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;oBAChC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;gBAClD,CAAC;gBACD,IAAI,QAA8B,CAAC;gBACnC,MAAM,mBAAmB,GACvB,IAAI,CAAC,GAAG,EAAE,GAAG,+BAA+B,CAAC;gBAC/C,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAC,GAAG,EAAC,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,MAAM,2BAA2B,CACjD,GAAG,EACH,mBAAmB,EACnB,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,CACzC,CAAC;4BACF,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC5C,OAAO,SAAS,CAAC,kBAAkB,CAAC;4BACtC,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,yDAAyD;wBAC3D,CAAC;oBACH,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IACE,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC;oBAC7C,6BAA6B,CAAC,QAAQ,CAAC,YAAY,CAAC,EACpD,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,2BAA2B,CACjD,GAAG,EACH,mBAAmB,CACpB,CAAC;wBACF,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC5C,OAAO,SAAS,CAAC,kBAAkB,CAAC;wBACtC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,8DAA8D;oBAChE,CAAC;gBACH,CAAC;gBAED,gBAAgB,CACd,UAAU,EACV,QAAQ,EACR,yCAAyC,EACzC,GAAG,CACJ,CAAC;gBACF,cAAc,GAAG,QAAQ,CAAC,QAAQ,IAAI,cAAc,CAAC;gBAErD,IAAI,CAAC,QAAQ,CAAC,OAAO;oBAAE,OAAO,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,UAAU,CACzB,QAAQ,CAAC,OAAO,EAChB,mBAAmB,EACnB,GAAG,EACH,QAAQ,CAAC,QAAQ,IAAI,cAAc,CACpC,CAAC;gBACF,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CACF,gBAAgB,EAChB,sBAAsB,CACpB,KAAK,EACL,yCAAyC,EACzC,GAAG,CACJ,CACF,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,iBAAiB;QACjB,KAAK,CAAC,sBAAsB,CAC1B,eAAiC;YAEjC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC;gBACxC,uBAAuB,EAAE,KAAK;aAC/B,CAAC,CAAC;YACH,OAAO,SAAS;iBACb,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,cAAc;gBACvB,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACpE;iBACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;gBACpD,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;gBAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe;gBACzC,iBAAiB,EAAE,IAAI;gBACvB,cAAc,EAAE,IAAI;gBACpB,sBAAsB,EAAE,IAAI;gBAC5B,cAAc,EAAE,IAAI;gBACpB,mBAAmB,EAEf,QAGD,CAAC,mBAAmB,IAAI,IAAI;gBAC/B,iBAAiB,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,SAAS;gBAC/D,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,SAAS;gBAC3D,oBAAoB,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;aACrD,CAAC,CAAC,CAAC;QACR,CAAC;QACD,KAAK,CAAC,sBAAsB,CAC1B,eAAiC;YAEjC,MAAM,aAAa,GACjB,MAAM,UAAU,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;YAC3D,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,0BAA0B,CAAC,aAAa;YAC5C,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,sBAAsB,CAAC,aAAa;YACxC,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,aAAa;YACjB,OAAO,aAAa,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,0BAA0B,CAAC,OAAO;YACtC,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,WAAW,CAAC,SAAS,EAAE,QAAQ;YAC7B,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YACnE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/C,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE;oBACX,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;aACF,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,SAAS,EAAE,QAAQ;YAChC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import {ErrorCode} from './types';\nimport type {\n ActiveSubscription,\n IapkitPurchaseState,\n Product,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n RequestVerifyPurchaseWithIapkitResult,\n SubResponseCodeAndroid,\n VerifyPurchaseWithProviderProps,\n VerifyPurchaseWithProviderResult,\n} from './types';\n\ntype ResponseOperation =\n | 'product-data'\n | 'purchase'\n | 'purchase-updates'\n | 'user-data'\n | 'notify-fulfillment';\n\nconst IAPKIT_VERIFY_TIMEOUT_MS = 10_000;\nconst MAX_IAPKIT_ERROR_DEPTH = 5;\nconst MAX_PRODUCT_DATA_BATCH_SIZE = 100;\nconst MAX_PURCHASE_UPDATE_PAGES = 100;\nconst NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS = 2_000;\nconst NOTIFY_FULFILLMENT_MAX_ATTEMPTS = 15;\nconst NOTIFY_FULFILLMENT_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_UPDATES_MAX_ATTEMPTS = 5;\nconst PURCHASE_UPDATES_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_RECOVERY_CLOCK_SKEW_MS = 5_000;\n\ntype VegaListener = (payload: any) => void;\n\ninterface VegaPurchaseErrorPayload {\n code: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n message: string;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n}\n\ninterface RecoverPurchasesOptions {\n minPurchaseDateMs?: number;\n}\n\ninterface VegaPrice {\n priceCurrencyCode?: string | null;\n priceStr?: string | null;\n valueInMicros?: bigint | number | string | null;\n}\n\ninterface VegaProduct {\n description?: string | null;\n freeTrialPeriod?: string | null;\n itemType?: unknown;\n price?: VegaPrice | number | string | null;\n productType?: unknown;\n sku?: string | null;\n subscriptionBase?: string | null;\n subscriptionParent?: string | null;\n subscriptionPeriod?: string | null;\n term?: string | null;\n title?: string | null;\n}\n\ninterface VegaReceipt {\n cancelDate?: Date | number | string | null;\n deferredDate?: Date | number | string | null;\n deferredSku?: string | null;\n isCancelled?: boolean | null;\n isDeferred?: boolean | null;\n productType?: unknown;\n purchaseDate?: Date | number | string | null;\n receiptId?: string | null;\n sku?: string | null;\n termSku?: string | null;\n}\n\ninterface VegaUserData {\n countryCode?: string | null;\n marketplace?: string | null;\n userId?: string | null;\n}\n\ninterface VegaResponse {\n responseCode?: unknown;\n}\n\ninterface VegaProductDataResponse extends VegaResponse {\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null;\n}\n\ninterface VegaPurchaseResponse extends VegaResponse {\n receipt?: VegaReceipt | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaPurchaseUpdatesResponse extends VegaResponse {\n hasMore?: boolean | null;\n receiptList?: VegaReceipt[] | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataResponse extends VegaResponse {\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataRequest {\n fetchUserProfileAccessConsentStatus: boolean;\n}\n\nexport interface VegaPurchasingService {\n getProductData(request: {skus: string[]}): Promise<VegaProductDataResponse>;\n getPurchaseUpdates(request: {\n reset: boolean;\n }): Promise<VegaPurchaseUpdatesResponse>;\n getUserData(request: VegaUserDataRequest): Promise<VegaUserDataResponse>;\n notifyFulfillment(request: {\n fulfillmentResult: number;\n receiptId: string;\n }): Promise<VegaResponse>;\n purchase(request: {sku: string}): Promise<VegaPurchaseResponse>;\n}\n\nexport interface ExpoIapVegaModule {\n ERROR_CODES: Record<string, string>;\n acknowledgePurchaseAndroid(purchaseToken: string): Promise<void>;\n addListener(eventName: string, listener: VegaListener): {remove: () => void};\n consumePurchaseAndroid(purchaseToken: string): Promise<void>;\n endConnection(): Promise<boolean>;\n fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]>;\n getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]>;\n getAvailableItems(options?: PurchaseOptions): Promise<Purchase[]>;\n getStorefront(): Promise<string>;\n hasActiveSubscriptions(subscriptionIds?: string[] | null): Promise<boolean>;\n initConnection(config?: unknown): Promise<boolean>;\n removeListener(eventName: string, listener: VegaListener): void;\n requestPurchase(params: {\n skus?: string[];\n type?: string;\n }): Promise<Purchase[]>;\n verifyPurchaseWithProvider(\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult>;\n}\n\nconst PRODUCT_TYPE_SUBSCRIPTION = 3;\nconst FULFILLMENT_RESULT_FULFILLED = 1;\nconst RESPONSE_SUCCESS = 1;\nconst PURCHASE_RESPONSE_SUCCESS = 0;\nconst IAPKIT_DEFAULT_BASE_URL = 'https://kit.openiap.dev';\nconst IAPKIT_VERIFY_PATH = '/v1/purchase/verify';\nconst VEGA_PARSER_ERROR_MESSAGES = [\n 'Cannot convert undefined value to object',\n 'userId is not found while parsing Json',\n];\n\nfunction createVegaError(\n code: ErrorCode,\n message: string,\n responseCode?: unknown,\n productId?: string,\n): Error {\n const error = new Error(message) as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n error.code = code;\n error.debugMessage = message;\n error.productId = productId;\n if (typeof responseCode === 'number') {\n error.responseCode = responseCode;\n }\n return error;\n}\n\nfunction isValidIpv4Address(address: string): boolean {\n const octets = address.split('.');\n return (\n octets.length === 4 &&\n octets.every(\n (octet) => /^(?:0|[1-9]\\d{0,2})$/.test(octet) && Number(octet) <= 255,\n )\n );\n}\n\nfunction isValidIpv6Address(address: string): boolean {\n let ipv6Part = address;\n let ipv4GroupCount = 0;\n\n if (address.includes('.')) {\n const lastColon = address.lastIndexOf(':');\n if (lastColon < 0 || !isValidIpv4Address(address.slice(lastColon + 1))) {\n return false;\n }\n const ipv6Prefix = address.slice(0, lastColon);\n ipv6Part = ipv6Prefix.endsWith(':') ? `${ipv6Prefix}:` : ipv6Prefix;\n ipv4GroupCount = 2;\n }\n\n if (\n !ipv6Part.includes(':') ||\n !/^[0-9a-f:]+$/i.test(ipv6Part) ||\n ipv6Part.includes(':::')\n ) {\n return false;\n }\n\n const compressionIndex = ipv6Part.indexOf('::');\n const hasCompression = compressionIndex >= 0;\n if (\n (hasCompression && ipv6Part.indexOf('::', compressionIndex + 2) >= 0) ||\n (!hasCompression && (ipv6Part.startsWith(':') || ipv6Part.endsWith(':')))\n ) {\n return false;\n }\n\n const sections = hasCompression ? ipv6Part.split('::') : [ipv6Part];\n const groups: string[] = [];\n for (const section of sections) {\n if (section.length > 0) groups.push(...section.split(':'));\n }\n if (!groups.every((group) => /^[0-9a-f]{1,4}$/i.test(group))) {\n return false;\n }\n\n const groupCount = groups.length + ipv4GroupCount;\n return hasCompression ? groupCount < 8 : groupCount === 8;\n}\n\nfunction isValidHostname(hostname: string): boolean {\n if (/^[0-9.]+$/.test(hostname)) {\n return isValidIpv4Address(hostname);\n }\n\n const normalizedHostname = hostname.endsWith('.')\n ? hostname.slice(0, -1)\n : hostname;\n if (normalizedHostname.length === 0 || normalizedHostname.length > 253) {\n return false;\n }\n const hostnameLabels = normalizedHostname.split('.');\n const lastLabel = hostnameLabels[hostnameLabels.length - 1]!;\n if (/^(?:[0-9]+|0x[0-9a-f]+)$/i.test(lastLabel)) {\n return false;\n }\n\n return normalizedHostname\n .split('.')\n .every(\n (label) =>\n label.length <= 63 && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label),\n );\n}\n\nfunction getIapkitVerifyUrl(baseUrl?: string | null): string {\n const requestedBaseUrl =\n typeof baseUrl === 'string' && baseUrl.trim().length > 0\n ? baseUrl.trim()\n : IAPKIT_DEFAULT_BASE_URL;\n const normalizedBaseUrl = requestedBaseUrl.replace(/\\/+$/, '');\n // Kepler's URL polyfill throws for standard getters such as protocol,\n // host, and pathname. Parse the small origin-only contract directly.\n const originMatch = /^(https?):\\/\\/([^/?#@\\s\\\\]+)$/i.exec(normalizedBaseUrl);\n if (!originMatch) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const authority = originMatch[2]!;\n const isBracketedIpv6 = authority.startsWith('[');\n const authorityMatch = isBracketedIpv6\n ? /^\\[([^\\]]+)\\](?::([0-9]+))?$/.exec(authority)\n : /^([^:]+)(?::([0-9]+))?$/.exec(authority);\n const host = authorityMatch?.[1];\n const requestedPort = authorityMatch?.[2];\n const portNumber = requestedPort ? Number(requestedPort) : null;\n const hasValidHost =\n typeof host === 'string' &&\n (isBracketedIpv6 ? isValidIpv6Address(host) : isValidHostname(host));\n const hasValidPort =\n portNumber === null ||\n (Number.isInteger(portNumber) && portNumber >= 1 && portNumber <= 65535);\n if (!authorityMatch || !hasValidHost || !hasValidPort) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const scheme = originMatch[1]!.toLowerCase();\n const serializedHost = isBracketedIpv6 ? `[${host!}]` : host!;\n const port = requestedPort ? `:${requestedPort}` : '';\n return `${scheme}://${serializedHost}${port}${IAPKIT_VERIFY_PATH}`;\n}\n\nfunction toPurchaseErrorPayload(\n error: unknown,\n fallbackMessage: string,\n productId?: string,\n): VegaPurchaseErrorPayload {\n if (error instanceof Error) {\n const errorWithFields = error as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n return {\n code: errorWithFields.code ?? ErrorCode.PurchaseError,\n debugMessage: errorWithFields.debugMessage,\n isEmptyProductList: errorWithFields.isEmptyProductList,\n message: error.message || fallbackMessage,\n productId: errorWithFields.productId ?? productId,\n productIds: errorWithFields.productIds,\n productType: errorWithFields.productType,\n responseCode: errorWithFields.responseCode,\n subResponseCodeAndroid: errorWithFields.subResponseCodeAndroid,\n };\n }\n\n return {\n code: ErrorCode.PurchaseError,\n message: fallbackMessage,\n productId,\n };\n}\n\nfunction responseCodeName(responseCode: unknown): string {\n return typeof responseCode === 'string' ? responseCode.toUpperCase() : '';\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n timeoutError: Error,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(timeoutError), timeoutMs);\n operation.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n );\n });\n}\n\nfunction isSuccess(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (typeof responseCode === 'number') {\n return operation === 'purchase'\n ? responseCode === PURCHASE_RESPONSE_SUCCESS\n : responseCode === RESPONSE_SUCCESS;\n }\n\n const name = responseCodeName(responseCode);\n return name === 'SUCCESSFUL' || name === 'SUCCESS' || name === 'OK';\n}\n\nfunction mapErrorCode(\n operation: ResponseOperation,\n responseCode: unknown,\n): ErrorCode {\n const name = responseCodeName(responseCode);\n if (name.includes('ALREADY_PURCHASED')) return ErrorCode.AlreadyOwned;\n if (name.includes('INVALID_SKU')) return ErrorCode.SkuNotFound;\n if (name.includes('NOT_SUPPORTED')) return ErrorCode.FeatureNotSupported;\n if (name.includes('PENDING')) return ErrorCode.Pending;\n if (name.includes('FAILED')) {\n return operation === 'purchase'\n ? ErrorCode.UserCancelled\n : ErrorCode.ServiceError;\n }\n\n if (typeof responseCode === 'number') {\n if (operation === 'purchase') {\n if (responseCode === 1) return ErrorCode.AlreadyOwned;\n if (responseCode === 2) return ErrorCode.SkuNotFound;\n if (responseCode === 3) return ErrorCode.FeatureNotSupported;\n if (responseCode === 4) return ErrorCode.UserCancelled;\n }\n if (operation !== 'purchase' && responseCode === 2) {\n return ErrorCode.FeatureNotSupported;\n }\n if (operation !== 'purchase' && responseCode === 3) {\n return ErrorCode.ServiceError;\n }\n if (operation !== 'purchase' && responseCode === 4) {\n return ErrorCode.ServiceError;\n }\n }\n\n if (operation === 'product-data') return ErrorCode.QueryProduct;\n if (operation === 'user-data') return ErrorCode.InitConnection;\n return ErrorCode.PurchaseError;\n}\n\nfunction shouldRetryResponse(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (isSuccess(operation, responseCode)) return false;\n if (operation === 'purchase') return false;\n if (typeof responseCode === 'number') return responseCode === 3;\n return responseCodeName(responseCode).includes('FAILED');\n}\n\nfunction shouldRecoverPurchaseResponse(responseCode: unknown): boolean {\n if (typeof responseCode === 'number') {\n return responseCode === 1 || responseCode === 4;\n }\n const name = responseCodeName(responseCode);\n return name.includes('ALREADY_PURCHASED') || name.includes('FAILED');\n}\n\nfunction ensureSuccessful(\n operation: ResponseOperation,\n response: VegaResponse | null | undefined,\n message: string,\n productId?: string,\n): void {\n const responseCode = response?.responseCode;\n if (isSuccess(operation, responseCode)) return;\n throw createVegaError(\n mapErrorCode(operation, responseCode),\n `${message}. Amazon Vega responseCode=${String(responseCode ?? 'unknown')}`,\n responseCode,\n productId,\n );\n}\n\nfunction toTimestamp(value: unknown): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) ? timestamp : 0;\n }\n return 0;\n}\n\nfunction priceNumberToMicros(value: number): number {\n return Math.trunc(Math.abs(value) < 10_000 ? value * 1_000_000 : value);\n}\n\nfunction toPriceAmountMicros(value: unknown): string {\n if (typeof value === 'bigint') return value.toString();\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.trunc(value).toString();\n }\n if (typeof value === 'string' && value.length > 0) return value;\n return '0';\n}\n\nfunction getPriceObject(product: VegaProduct): VegaPrice {\n return product.price != null &&\n typeof product.price === 'object' &&\n !Array.isArray(product.price)\n ? product.price\n : {};\n}\n\nfunction getPriceAmountMicros(product: VegaProduct): unknown {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return priceNumberToMicros(product.price);\n }\n return getPriceObject(product).valueInMicros;\n}\n\nfunction microsToPrice(value: unknown): number | null {\n const micros =\n typeof value === 'bigint' ? Number(value) : Number(value ?? Number.NaN);\n if (!Number.isFinite(micros)) return null;\n return micros / 1_000_000;\n}\n\nfunction getPrice(product: VegaProduct): number | null {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return Math.abs(product.price) < 10_000\n ? product.price\n : product.price / 1_000_000;\n }\n return microsToPrice(getPriceObject(product).valueInMicros);\n}\n\nfunction getDisplayPrice(product: VegaProduct): string {\n const price = product.price;\n if (typeof price === 'number' && Number.isFinite(price)) {\n const value = Math.abs(price) < 10_000 ? price : price / 1_000_000;\n return value.toFixed(2);\n }\n if (typeof price === 'string') return price;\n return getPriceObject(product).priceStr ?? '';\n}\n\nfunction getCurrency(product: VegaProduct): string {\n return getPriceObject(product).priceCurrencyCode ?? '';\n}\n\nfunction isSubscription(productType: unknown): boolean {\n if (typeof productType === 'number')\n return productType === PRODUCT_TYPE_SUBSCRIPTION;\n if (typeof productType === 'string') {\n return productType.toUpperCase().includes('SUBSCRIPTION');\n }\n return false;\n}\n\nfunction productTypeToOpenIap(productType: unknown): 'in-app' | 'subs' {\n return isSubscription(productType) ? 'subs' : 'in-app';\n}\n\nfunction getProductType(product: VegaProduct): unknown {\n return product.productType ?? product.itemType;\n}\n\nfunction getSubscriptionPeriod(product: VegaProduct): string {\n if (product.subscriptionPeriod) return product.subscriptionPeriod;\n\n const term = product.term?.toLowerCase() ?? '';\n if (term.includes('year')) return 'P1Y';\n if (term.includes('month')) return 'P1M';\n if (term.includes('week')) return 'P1W';\n if (term.includes('day')) return 'P1D';\n return '';\n}\n\nfunction nonBlankString(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return value.trim().length > 0 ? value : null;\n}\n\nfunction getReceiptSku(receipt: VegaReceipt): string {\n return nonBlankString(receipt.sku) ?? nonBlankString(receipt.termSku) ?? '';\n}\n\nfunction getCachedProductType(\n receipt: VegaReceipt,\n productTypesBySku: Map<string, unknown>,\n fallbackSku?: string,\n): unknown {\n const sku = getReceiptSku(receipt) || fallbackSku || '';\n return sku ? productTypesBySku.get(sku) : undefined;\n}\n\nfunction productDataToArray(\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null,\n): VegaProduct[] {\n if (!productData) return [];\n if (productData instanceof Map) {\n return Array.from(productData.entries()).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n }\n return Object.entries(productData).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n}\n\nfunction chunkArray<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction createUserDataRequest(): VegaUserDataRequest {\n return {\n fetchUserProfileAccessConsentStatus: false,\n };\n}\n\nfunction isVegaParserError(error: unknown): boolean {\n return (\n error instanceof Error &&\n VEGA_PARSER_ERROR_MESSAGES.some((message) =>\n error.message.includes(message),\n )\n );\n}\n\nfunction malformedVegaResponse(error: unknown, operation: string): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return createVegaError(\n ErrorCode.BillingResponseJsonParseError,\n `${operation} returned a malformed response: ${detail}`,\n );\n}\n\nfunction createPricingPhase(product: VegaProduct) {\n return {\n billingCycleCount: 0,\n billingPeriod: getSubscriptionPeriod(product),\n formattedPrice: getDisplayPrice(product),\n priceAmountMicros: toPriceAmountMicros(getPriceAmountMicros(product)),\n priceCurrencyCode: getCurrency(product),\n recurrenceMode: 1,\n };\n}\n\nfunction createStandardizedSubscriptionOffer(product: VegaProduct) {\n const pricingPhase = createPricingPhase(product);\n const sku = product.sku ?? '';\n return {\n basePlanIdAndroid: sku,\n currency: getCurrency(product),\n displayPrice: getDisplayPrice(product),\n id: sku,\n offerTagsAndroid: [],\n offerTokenAndroid: '',\n paymentMode: 'pay-as-you-go' as const,\n period: null,\n price: getPrice(product) ?? 0,\n pricingPhasesAndroid: {\n pricingPhaseList: [pricingPhase],\n },\n type: 'introductory' as const,\n };\n}\n\nfunction mapProduct(product: VegaProduct): Product | ProductSubscription {\n const sku = product.sku ?? '';\n const type = productTypeToOpenIap(getProductType(product));\n const base = {\n id: sku,\n title: product.title ?? sku,\n description: product.description ?? '',\n displayName: product.title ?? sku,\n displayPrice: getDisplayPrice(product),\n currency: getCurrency(product),\n price: getPrice(product),\n debugDescription: null,\n platform: 'android' as const,\n nameAndroid: product.title ?? sku,\n productStatusAndroid: 'ok' as const,\n discountOffers: null,\n };\n\n if (type === 'subs') {\n return {\n ...base,\n type,\n subscriptionOffers: [createStandardizedSubscriptionOffer(product)],\n };\n }\n\n return {\n ...base,\n type,\n subscriptionOffers: null,\n };\n}\n\nfunction mapReceipt(\n receipt: VegaReceipt,\n fallbackProductType?: unknown,\n productIdOverride?: string,\n userData?: VegaUserData | null,\n): Purchase {\n const receiptId = receipt.receiptId ?? '';\n const productId = productIdOverride ?? getReceiptSku(receipt);\n const type = productTypeToOpenIap(receipt.productType ?? fallbackProductType);\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n const isActive = !isCanceled;\n const deferredSku = nonBlankString(receipt.deferredSku);\n\n return {\n id: receiptId,\n productId,\n transactionDate: toTimestamp(receipt.purchaseDate),\n purchaseToken: receiptId,\n currentPlanId:\n type === 'subs' ? (nonBlankString(receipt.termSku) ?? productId) : null,\n ids: productId ? [productId] : [],\n store: 'amazon',\n quantity: 1,\n purchaseState: isActive ? 'purchased' : 'unknown',\n isAutoRenewing: type === 'subs' && isActive,\n transactionId: receiptId,\n autoRenewingAndroid: type === 'subs' && isActive,\n dataAndroid: JSON.stringify(receipt),\n signatureAndroid: null,\n isAcknowledgedAndroid: false,\n packageNameAndroid: null,\n obfuscatedAccountIdAndroid: null,\n obfuscatedProfileIdAndroid: null,\n developerPayloadAndroid: null,\n isSuspendedAndroid: false,\n pendingPurchaseUpdateAndroid:\n receipt.isDeferred && deferredSku\n ? {products: [deferredSku], purchaseToken: receiptId}\n : null,\n userIdAmazon: nonBlankString(userData?.userId),\n userMarketplaceAmazon: nonBlankString(userData?.marketplace),\n };\n}\n\nexport function createExpoIapVegaModule(\n service: VegaPurchasingService,\n): ExpoIapVegaModule {\n const productTypesBySku = new Map<string, unknown>();\n const subscriptionBasesBySku = new Map<string, string>();\n const subscriptionParentsBySku = new Map<string, string>();\n const listenersByEventName = new Map<string, Set<VegaListener>>();\n let cachedUserData: VegaUserData | null = null;\n\n const emit = (eventName: string, payload: unknown): void => {\n for (const listener of listenersByEventName.get(eventName) ?? []) {\n listener(payload);\n }\n };\n\n const cacheProductMetadata = (product: VegaProduct): void => {\n if (!product.sku) return;\n\n const productType = getProductType(product);\n productTypesBySku.set(product.sku, productType);\n\n if (product.subscriptionBase) {\n subscriptionBasesBySku.set(product.sku, product.subscriptionBase);\n productTypesBySku.set(product.subscriptionBase, productType);\n }\n if (product.subscriptionParent) {\n subscriptionParentsBySku.set(product.sku, product.subscriptionParent);\n productTypesBySku.set(product.subscriptionParent, productType);\n }\n };\n\n const receiptMatchesRequestedSku = (\n receipt: VegaReceipt,\n sku: string,\n ): boolean => {\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return false;\n if (receiptSku === sku || receipt.termSku === sku) return true;\n if (receiptSku === subscriptionBasesBySku.get(sku)) return true;\n if (receiptSku === subscriptionParentsBySku.get(sku)) return true;\n return receiptSku === `${sku}.base`;\n };\n\n const resolveReceiptProductId = (\n receipt: VegaReceipt,\n productIdOverride?: string,\n ): string => {\n if (productIdOverride) return productIdOverride;\n\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return '';\n\n for (const [productSku, subscriptionBase] of subscriptionBasesBySku) {\n if (receiptSku === subscriptionBase) return productSku;\n }\n\n for (const [productSku, subscriptionParent] of subscriptionParentsBySku) {\n if (receiptSku === subscriptionParent) return productSku;\n }\n\n if (receiptSku.endsWith('.base')) {\n const parentSku = receiptSku.slice(0, -'.base'.length);\n if (productTypesBySku.has(parentSku)) return parentSku;\n }\n\n return receiptSku;\n };\n\n const getUserData = async (): Promise<VegaUserData | null> => {\n let response: VegaUserDataResponse;\n try {\n response = await service.getUserData(createUserDataRequest());\n } catch (error) {\n if (isVegaParserError(error)) {\n return null;\n }\n throw error;\n }\n ensureSuccessful('user-data', response, 'Failed to fetch Amazon user data');\n cachedUserData = response.userData ?? null;\n return cachedUserData;\n };\n\n const getStorefront = async (): Promise<string> => {\n try {\n const userData = await getUserData();\n const storefront = userData?.marketplace ?? userData?.countryCode;\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega storefront lookup returned no country code.',\n );\n }\n return storefront;\n } catch (error) {\n const errorCode =\n error instanceof Error\n ? (error as Error & {code?: unknown}).code\n : undefined;\n if (\n typeof errorCode === 'string' &&\n Object.values(ErrorCode).includes(errorCode as ErrorCode)\n ) {\n throw error;\n }\n throw createVegaError(\n ErrorCode.ServiceError,\n `Failed to get Amazon Vega storefront: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n const getPurchaseUpdateReceipts = async (): Promise<VegaReceipt[]> => {\n const receipts: VegaReceipt[] = [];\n let reset = true;\n let hasMore = false;\n let pageCount = 0;\n\n do {\n if (pageCount >= MAX_PURCHASE_UPDATE_PAGES) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates exceeded the pagination limit.',\n );\n }\n pageCount++;\n\n let response: VegaPurchaseUpdatesResponse | null = null;\n for (\n let attempt = 1;\n attempt <= PURCHASE_UPDATES_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n response = await service.getPurchaseUpdates({reset});\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(error, 'Amazon Vega purchase updates');\n }\n throw error;\n }\n\n if (\n !response ||\n !shouldRetryResponse('purchase-updates', response.responseCode) ||\n attempt === PURCHASE_UPDATES_MAX_ATTEMPTS\n ) {\n break;\n }\n await delay(PURCHASE_UPDATES_RETRY_DELAY_MS);\n }\n if (!response) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates returned no response.',\n );\n }\n ensureSuccessful(\n 'purchase-updates',\n response,\n 'Failed to fetch Amazon purchase updates',\n );\n cachedUserData = response.userData ?? cachedUserData;\n receipts.push(...(response.receiptList ?? []));\n hasMore = Boolean(response.hasMore);\n reset = false;\n } while (hasMore);\n\n return receipts;\n };\n\n const getProductData = async (\n skus: string[],\n message: string,\n ): Promise<VegaProduct[]> => {\n const products: VegaProduct[] = [];\n for (const batch of chunkArray(skus, MAX_PRODUCT_DATA_BATCH_SIZE)) {\n const response = await service.getProductData({skus: batch});\n ensureSuccessful('product-data', response, message);\n products.push(...productDataToArray(response.productData));\n }\n return products;\n };\n\n const hydrateProductTypesForReceipts = async (\n receipts: VegaReceipt[],\n ): Promise<void> => {\n const missingSkus = new Set<string>();\n\n for (const receipt of receipts) {\n const sku = getReceiptSku(receipt);\n if (!sku) continue;\n if (receipt.productType != null) {\n productTypesBySku.set(sku, receipt.productType);\n continue;\n }\n\n const resolvedSku = resolveReceiptProductId(receipt);\n const resolvedProductType = productTypesBySku.get(resolvedSku);\n if (resolvedProductType != null) {\n productTypesBySku.set(sku, resolvedProductType);\n } else if (!productTypesBySku.has(sku)) {\n missingSkus.add(sku);\n }\n }\n\n if (missingSkus.size === 0) return;\n\n let products: VegaProduct[];\n try {\n products = await getProductData(\n Array.from(missingSkus),\n 'Failed to fetch Amazon Vega product data for purchase updates',\n );\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(\n error,\n 'Amazon Vega purchase product metadata',\n );\n }\n throw error;\n }\n\n for (const product of products) {\n cacheProductMetadata(product);\n }\n };\n\n const getAvailableItems = async (\n _options?: PurchaseOptions,\n ): Promise<Purchase[]> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n return receipts\n .filter((receipt) => {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n return !isCanceled;\n })\n .map((receipt) =>\n mapReceipt(\n receipt,\n getCachedProductType(receipt, productTypesBySku),\n resolveReceiptProductId(receipt),\n cachedUserData,\n ),\n );\n };\n\n const finishReceipt = async (purchaseToken: string): Promise<void> => {\n if (!purchaseToken) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'purchaseToken is required to finish an Amazon Vega transaction.',\n );\n }\n\n let lastResponse: VegaResponse | null = null;\n for (\n let attempt = 1;\n attempt <= NOTIFY_FULFILLMENT_MAX_ATTEMPTS;\n attempt += 1\n ) {\n const response = await withTimeout(\n service.notifyFulfillment({\n fulfillmentResult: FULFILLMENT_RESULT_FULFILLED,\n receiptId: purchaseToken,\n }),\n NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS,\n createVegaError(\n ErrorCode.ServiceTimeout,\n 'Amazon Vega notifyFulfillment timed out.',\n ),\n );\n if (isSuccess('notify-fulfillment', response?.responseCode)) return;\n lastResponse = response;\n if (attempt < NOTIFY_FULFILLMENT_MAX_ATTEMPTS) {\n await delay(NOTIFY_FULFILLMENT_RETRY_DELAY_MS);\n }\n }\n\n ensureSuccessful(\n 'notify-fulfillment',\n lastResponse,\n 'Failed to notify Amazon Vega fulfillment',\n );\n };\n\n const recoverFulfillablePurchases = async (\n sku: string,\n fallbackProductType?: unknown,\n options?: RecoverPurchasesOptions,\n ): Promise<{requestedPurchases: Purchase[]}> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n const requestedPurchases: Purchase[] = [];\n\n for (const receipt of receipts) {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n if (isCanceled) continue;\n\n const purchaseTimestamp = toTimestamp(receipt.purchaseDate);\n if (\n options?.minPurchaseDateMs != null &&\n (purchaseTimestamp === 0 ||\n purchaseTimestamp < options.minPurchaseDateMs)\n ) {\n continue;\n }\n\n const matchesRequestedSku = receiptMatchesRequestedSku(receipt, sku);\n if (!matchesRequestedSku) {\n continue;\n }\n\n const purchase = mapReceipt(\n receipt,\n receipt.productType ??\n getCachedProductType(receipt, productTypesBySku, sku) ??\n fallbackProductType,\n resolveReceiptProductId(receipt, sku),\n cachedUserData,\n );\n requestedPurchases.push(purchase);\n emit('purchase-updated', purchase);\n }\n\n return {requestedPurchases};\n };\n\n const verifyWithIapkit = async (\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult> => {\n function normalizeIapkitState(state: unknown): IapkitPurchaseState {\n const normalized =\n typeof state === 'string'\n ? state.toLowerCase().replace(/_/g, '-')\n : 'unknown';\n const states = new Set<IapkitPurchaseState>([\n 'entitled',\n 'pending-acknowledgment',\n 'pending',\n 'canceled',\n 'expired',\n 'ready-to-consume',\n 'consumed',\n 'unknown',\n 'inauthentic',\n ]);\n return states.has(normalized as IapkitPurchaseState)\n ? (normalized as IapkitPurchaseState)\n : 'unknown';\n }\n\n function extractIapkitErrorMessage(\n json: unknown,\n depth = 0,\n ): string | null {\n if (depth > MAX_IAPKIT_ERROR_DEPTH) return null;\n if (!json || typeof json !== 'object') return null;\n const record = json as Record<string, unknown>;\n function extractStringMessage(value: string): string {\n if (depth >= MAX_IAPKIT_ERROR_DEPTH) return value;\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object'\n ? (extractIapkitErrorMessage(parsed, depth + 1) ?? value)\n : value;\n } catch {\n return value;\n }\n }\n\n const details = record.details;\n if (details && typeof details === 'object') {\n const originalError = (details as Record<string, unknown>)\n .originalError;\n if (typeof originalError === 'string') {\n return extractStringMessage(originalError);\n }\n }\n\n const errors = record.errors;\n if (Array.isArray(errors) && errors.length > 0) {\n const firstError = errors[0];\n return typeof firstError === 'string'\n ? extractStringMessage(firstError)\n : extractIapkitErrorMessage(firstError, depth + 1);\n }\n\n if (typeof record.message === 'string') {\n return extractStringMessage(record.message);\n }\n if (typeof record.error === 'string') {\n return extractStringMessage(record.error);\n }\n return null;\n }\n\n function parseIapkitJsonResponse(text: string): unknown | null {\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n }\n\n function isIapkitResultObject(\n json: unknown,\n ): json is Record<string, unknown> {\n return Boolean(json) && typeof json === 'object' && !Array.isArray(json);\n }\n\n function hasIapkitErrors(json: unknown): boolean {\n if (!isIapkitResultObject(json)) return false;\n const errors = json.errors;\n return Array.isArray(errors) && errors.length > 0;\n }\n\n function readIapkitResult(\n json: Record<string, unknown>,\n status: number,\n ): RequestVerifyPurchaseWithIapkitResult {\n if (\n typeof json.isValid !== 'boolean' ||\n typeof json.state !== 'string' ||\n json.store !== 'amazon'\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n const productId = json.productId;\n if (productId != null && typeof productId !== 'string') {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n const environment = json.environment;\n if (\n environment != null &&\n (typeof environment !== 'string' ||\n (environment !== 'Sandbox' && environment !== 'Production'))\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n return {\n ...(environment == null ? {} : {environment}),\n isValid: json.isValid,\n ...(productId == null ? {} : {productId}),\n state: normalizeIapkitState(json.state),\n store: 'amazon',\n };\n }\n\n if (options.provider !== 'iapkit') {\n throw createVegaError(\n ErrorCode.FeatureNotSupported,\n `Unsupported purchase verification provider: ${options.provider}.`,\n );\n }\n\n const iapkit = options.iapkit;\n const payloadCount =\n Number(Boolean(iapkit?.amazon)) +\n Number(Boolean(iapkit?.apple)) +\n Number(Boolean(iapkit?.google));\n const amazon = iapkit?.amazon;\n if (payloadCount !== 1 || !amazon) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires exactly one amazon payload.',\n );\n }\n\n const receiptId =\n typeof amazon.receiptId === 'string' ? amazon.receiptId.trim() : '';\n if (!receiptId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires amazon.receiptId.',\n );\n }\n\n let userId = typeof amazon.userId === 'string' ? amazon.userId.trim() : '';\n if (!userId) {\n await getUserData();\n userId = cachedUserData?.userId?.trim() ?? '';\n }\n if (!userId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification could not resolve userId.',\n );\n }\n\n const apiKey =\n typeof iapkit?.apiKey === 'string' ? iapkit.apiKey.trim() : '';\n const verificationUrl = getIapkitVerifyUrl(iapkit?.baseUrl);\n let response: Response;\n try {\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n IAPKIT_VERIFY_TIMEOUT_MS,\n );\n response = await fetch(verificationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(apiKey ? {Authorization: `Bearer ${apiKey}`} : {}),\n },\n body: JSON.stringify({\n store: 'amazon',\n userId,\n receiptId,\n ...(amazon.expectedProductId == null\n ? {}\n : {expectedProductId: amazon.expectedProductId}),\n ...(amazon.sandbox == null ? {} : {sandbox: amazon.sandbox}),\n }),\n signal: controller.signal,\n }).finally(() => clearTimeout(timeout));\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to reach IAPKit verification endpoint.',\n );\n }\n let text: string;\n try {\n text = await response.text();\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to read IAPKit verification response.',\n );\n }\n const json = parseIapkitJsonResponse(text);\n\n if (!response.ok) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? `HTTP ${response.status}`,\n );\n }\n\n if (json === null) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned non-JSON response (HTTP ${response.status}).`,\n );\n }\n\n if (!isIapkitResultObject(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${response.status}).`,\n );\n }\n\n if (hasIapkitErrors(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? 'IAPKit verification failed.',\n );\n }\n\n const result = readIapkitResult(json, response.status);\n return {\n provider: 'iapkit',\n iapkit: result,\n };\n };\n\n const vegaModule: ExpoIapVegaModule = {\n ERROR_CODES: ErrorCode,\n async initConnection(): Promise<boolean> {\n return true;\n },\n async endConnection(): Promise<boolean> {\n productTypesBySku.clear();\n subscriptionBasesBySku.clear();\n subscriptionParentsBySku.clear();\n cachedUserData = null;\n return true;\n },\n async fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]> {\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createVegaError(ErrorCode.EmptySkuList, 'No SKUs provided');\n }\n\n const products = await getProductData(\n skus,\n 'Failed to fetch Amazon Vega products',\n );\n\n return products\n .filter((product) => {\n cacheProductMetadata(product);\n const openIapType = productTypeToOpenIap(getProductType(product));\n if (type === 'all') return true;\n if (type === 'subs') return openIapType === 'subs';\n return openIapType === 'in-app';\n })\n .map(mapProduct);\n },\n async requestPurchase(params): Promise<Purchase[]> {\n let sku: string | undefined;\n try {\n const skus = params.skus ?? [];\n if (skus.length !== 1) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega purchase expects exactly one SKU per request.',\n );\n }\n\n sku = skus[0]!;\n const fallbackProductType =\n params.type === 'subs'\n ? PRODUCT_TYPE_SUBSCRIPTION\n : productTypesBySku.get(sku);\n if (fallbackProductType != null) {\n productTypesBySku.set(sku, fallbackProductType);\n }\n let response: VegaPurchaseResponse;\n const purchaseStartedAtMs =\n Date.now() - PURCHASE_RECOVERY_CLOCK_SKEW_MS;\n try {\n response = await service.purchase({sku});\n } catch (error) {\n if (isVegaParserError(error)) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n {minPurchaseDateMs: purchaseStartedAtMs},\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original parser error as the source of truth.\n }\n }\n throw error;\n }\n\n if (\n !isSuccess('purchase', response.responseCode) &&\n shouldRecoverPurchaseResponse(response.responseCode)\n ) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original purchase response as the source of truth.\n }\n }\n\n ensureSuccessful(\n 'purchase',\n response,\n 'Failed to complete Amazon Vega purchase',\n sku,\n );\n cachedUserData = response.userData ?? cachedUserData;\n\n if (!response.receipt) return [];\n const purchase = mapReceipt(\n response.receipt,\n fallbackProductType,\n sku,\n response.userData ?? cachedUserData,\n );\n emit('purchase-updated', purchase);\n return [purchase];\n } catch (error) {\n emit(\n 'purchase-error',\n toPurchaseErrorPayload(\n error,\n 'Failed to complete Amazon Vega purchase',\n sku,\n ),\n );\n throw error;\n }\n },\n getAvailableItems,\n async getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]> {\n const requestedIds = new Set(subscriptionIds ?? []);\n const purchases = await getAvailableItems({\n includeSuspendedAndroid: false,\n });\n return purchases\n .filter(\n (purchase) =>\n purchase.isAutoRenewing &&\n (requestedIds.size === 0 || requestedIds.has(purchase.productId)),\n )\n .map((purchase) => ({\n productId: purchase.productId,\n isActive: true,\n transactionId: purchase.transactionId ?? purchase.id,\n purchaseToken: purchase.purchaseToken ?? null,\n transactionDate: purchase.transactionDate,\n expirationDateIOS: null,\n environmentIOS: null,\n daysUntilExpirationIOS: null,\n renewalInfoIOS: null,\n autoRenewingAndroid:\n (\n purchase as Purchase & {\n autoRenewingAndroid?: boolean | null;\n }\n ).autoRenewingAndroid ?? null,\n basePlanIdAndroid: purchase.currentPlanId ?? purchase.productId,\n currentPlanId: purchase.currentPlanId ?? purchase.productId,\n purchaseTokenAndroid: purchase.purchaseToken ?? null,\n }));\n },\n async hasActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<boolean> {\n const subscriptions =\n await vegaModule.getActiveSubscriptions(subscriptionIds);\n return subscriptions.length > 0;\n },\n async acknowledgePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async consumePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async getStorefront(): Promise<string> {\n return getStorefront();\n },\n async verifyPurchaseWithProvider(options) {\n return verifyWithIapkit(options);\n },\n addListener(eventName, listener) {\n const listeners = listenersByEventName.get(eventName) ?? new Set();\n listeners.add(listener);\n listenersByEventName.set(eventName, listeners);\n return {\n remove: () => {\n listeners.delete(listener);\n },\n };\n },\n removeListener(eventName, listener): void {\n listenersByEventName.get(eventName)?.delete(listener);\n },\n };\n\n return vegaModule;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vega-adapter.js","sourceRoot":"","sources":["../src/vega-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {ErrorCode} from './types';\nimport type {\n ActiveSubscription,\n IapkitPurchaseState,\n Product,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n RequestVerifyPurchaseWithIapkitResult,\n SubResponseCodeAndroid,\n VerifyPurchaseWithProviderProps,\n VerifyPurchaseWithProviderResult,\n} from './types';\n\ntype ResponseOperation =\n | 'product-data'\n | 'purchase'\n | 'purchase-updates'\n | 'user-data'\n | 'notify-fulfillment';\n\nconst IAPKIT_VERIFY_TIMEOUT_MS = 10_000;\nconst MAX_IAPKIT_ERROR_DEPTH = 5;\nconst MAX_PRODUCT_DATA_BATCH_SIZE = 100;\nconst MAX_PURCHASE_UPDATE_PAGES = 100;\nconst NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS = 2_000;\nconst NOTIFY_FULFILLMENT_MAX_ATTEMPTS = 15;\nconst NOTIFY_FULFILLMENT_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_UPDATES_MAX_ATTEMPTS = 5;\nconst PURCHASE_UPDATES_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_RECOVERY_CLOCK_SKEW_MS = 5_000;\n\ntype VegaListener = (payload: any) => void;\n\ninterface VegaPurchaseErrorPayload {\n code: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n message: string;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n}\n\ninterface RecoverPurchasesOptions {\n minPurchaseDateMs?: number;\n}\n\ninterface VegaPrice {\n priceCurrencyCode?: string | null;\n priceStr?: string | null;\n valueInMicros?: bigint | number | string | null;\n}\n\ninterface VegaProduct {\n description?: string | null;\n freeTrialPeriod?: string | null;\n itemType?: unknown;\n price?: VegaPrice | number | string | null;\n productType?: unknown;\n sku?: string | null;\n subscriptionBase?: string | null;\n subscriptionParent?: string | null;\n subscriptionPeriod?: string | null;\n term?: string | null;\n title?: string | null;\n}\n\ninterface VegaReceipt {\n cancelDate?: Date | number | string | null;\n deferredDate?: Date | number | string | null;\n deferredSku?: string | null;\n isCancelled?: boolean | null;\n isDeferred?: boolean | null;\n productType?: unknown;\n purchaseDate?: Date | number | string | null;\n receiptId?: string | null;\n sku?: string | null;\n termSku?: string | null;\n}\n\ninterface VegaUserData {\n countryCode?: string | null;\n marketplace?: string | null;\n userId?: string | null;\n}\n\ninterface VegaResponse {\n responseCode?: unknown;\n}\n\ninterface VegaProductDataResponse extends VegaResponse {\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null;\n}\n\ninterface VegaPurchaseResponse extends VegaResponse {\n receipt?: VegaReceipt | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaPurchaseUpdatesResponse extends VegaResponse {\n hasMore?: boolean | null;\n receiptList?: VegaReceipt[] | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataResponse extends VegaResponse {\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataRequest {\n fetchUserProfileAccessConsentStatus: boolean;\n}\n\nexport interface VegaPurchasingService {\n getProductData(request: {skus: string[]}): Promise<VegaProductDataResponse>;\n getPurchaseUpdates(request: {\n reset: boolean;\n }): Promise<VegaPurchaseUpdatesResponse>;\n getUserData(request: VegaUserDataRequest): Promise<VegaUserDataResponse>;\n notifyFulfillment(request: {\n fulfillmentResult: number;\n receiptId: string;\n }): Promise<VegaResponse>;\n purchase(request: {sku: string}): Promise<VegaPurchaseResponse>;\n}\n\nexport interface ExpoIapVegaModule {\n ERROR_CODES: Record<string, string>;\n acknowledgePurchaseAndroid(purchaseToken: string): Promise<void>;\n addListener(eventName: string, listener: VegaListener): {remove: () => void};\n consumePurchaseAndroid(purchaseToken: string): Promise<void>;\n endConnection(): Promise<boolean>;\n fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]>;\n getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]>;\n getAvailableItems(options?: PurchaseOptions): Promise<Purchase[]>;\n getStorefront(): Promise<string>;\n hasActiveSubscriptions(subscriptionIds?: string[] | null): Promise<boolean>;\n initConnection(config?: unknown): Promise<boolean>;\n removeListener(eventName: string, listener: VegaListener): void;\n requestPurchase(params: {\n skus?: string[];\n type?: string;\n }): Promise<Purchase[]>;\n verifyPurchaseWithProvider(\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult>;\n}\n\nconst PRODUCT_TYPE_SUBSCRIPTION = 3;\nconst FULFILLMENT_RESULT_FULFILLED = 1;\nconst RESPONSE_SUCCESS = 1;\nconst PURCHASE_RESPONSE_SUCCESS = 0;\nconst IAPKIT_DEFAULT_BASE_URL = 'https://kit.openiap.dev';\nconst IAPKIT_VERIFY_PATH = '/v1/purchase/verify';\nconst VEGA_PARSER_ERROR_MESSAGES = [\n 'Cannot convert undefined value to object',\n 'userId is not found while parsing Json',\n];\n\nfunction createVegaError(\n code: ErrorCode,\n message: string,\n responseCode?: unknown,\n productId?: string,\n): Error {\n const error = new Error(message) as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n error.code = code;\n error.debugMessage = message;\n error.productId = productId;\n if (typeof responseCode === 'number') {\n error.responseCode = responseCode;\n }\n return error;\n}\n\nfunction isValidIpv4Address(address: string): boolean {\n const octets = address.split('.');\n return (\n octets.length === 4 &&\n octets.every(\n (octet) => /^(?:0|[1-9]\\d{0,2})$/.test(octet) && Number(octet) <= 255,\n )\n );\n}\n\nfunction isValidIpv6Address(address: string): boolean {\n let ipv6Part = address;\n let ipv4GroupCount = 0;\n\n if (address.includes('.')) {\n const lastColon = address.lastIndexOf(':');\n if (lastColon < 0 || !isValidIpv4Address(address.slice(lastColon + 1))) {\n return false;\n }\n const ipv6Prefix = address.slice(0, lastColon);\n ipv6Part = ipv6Prefix.endsWith(':') ? `${ipv6Prefix}:` : ipv6Prefix;\n ipv4GroupCount = 2;\n }\n\n if (\n !ipv6Part.includes(':') ||\n !/^[0-9a-f:]+$/i.test(ipv6Part) ||\n ipv6Part.includes(':::')\n ) {\n return false;\n }\n\n const compressionIndex = ipv6Part.indexOf('::');\n const hasCompression = compressionIndex >= 0;\n if (\n (hasCompression && ipv6Part.indexOf('::', compressionIndex + 2) >= 0) ||\n (!hasCompression && (ipv6Part.startsWith(':') || ipv6Part.endsWith(':')))\n ) {\n return false;\n }\n\n const sections = hasCompression ? ipv6Part.split('::') : [ipv6Part];\n const groups: string[] = [];\n for (const section of sections) {\n if (section.length > 0) groups.push(...section.split(':'));\n }\n if (!groups.every((group) => /^[0-9a-f]{1,4}$/i.test(group))) {\n return false;\n }\n\n const groupCount = groups.length + ipv4GroupCount;\n return hasCompression ? groupCount < 8 : groupCount === 8;\n}\n\nfunction isValidHostname(hostname: string): boolean {\n if (/^[0-9.]+$/.test(hostname)) {\n return isValidIpv4Address(hostname);\n }\n\n const normalizedHostname = hostname.endsWith('.')\n ? hostname.slice(0, -1)\n : hostname;\n if (normalizedHostname.length === 0 || normalizedHostname.length > 253) {\n return false;\n }\n const hostnameLabels = normalizedHostname.split('.');\n const lastLabel = hostnameLabels[hostnameLabels.length - 1]!;\n if (/^(?:[0-9]+|0x[0-9a-f]+)$/i.test(lastLabel)) {\n return false;\n }\n\n return normalizedHostname\n .split('.')\n .every(\n (label) =>\n label.length <= 63 && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label),\n );\n}\n\nfunction getIapkitVerifyUrl(baseUrl?: string | null): string {\n const requestedBaseUrl =\n typeof baseUrl === 'string' && baseUrl.trim().length > 0\n ? baseUrl.trim()\n : IAPKIT_DEFAULT_BASE_URL;\n const normalizedBaseUrl = requestedBaseUrl.replace(/\\/+$/, '');\n // Kepler's URL polyfill throws for standard getters such as protocol,\n // host, and pathname. Parse the small origin-only contract directly.\n const originMatch = /^(https?):\\/\\/([^/?#@\\s\\\\]+)$/i.exec(normalizedBaseUrl);\n if (!originMatch) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const authority = originMatch[2]!;\n const isBracketedIpv6 = authority.startsWith('[');\n const authorityMatch = isBracketedIpv6\n ? /^\\[([^\\]]+)\\](?::([0-9]+))?$/.exec(authority)\n : /^([^:]+)(?::([0-9]+))?$/.exec(authority);\n const host = authorityMatch?.[1];\n const requestedPort = authorityMatch?.[2];\n const portNumber = requestedPort ? Number(requestedPort) : null;\n const hasValidHost =\n typeof host === 'string' &&\n (isBracketedIpv6 ? isValidIpv6Address(host) : isValidHostname(host));\n const hasValidPort =\n portNumber === null ||\n (Number.isInteger(portNumber) && portNumber >= 1 && portNumber <= 65535);\n if (!authorityMatch || !hasValidHost || !hasValidPort) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const scheme = originMatch[1]!.toLowerCase();\n const serializedHost = isBracketedIpv6 ? `[${host!}]` : host!;\n const port = requestedPort ? `:${requestedPort}` : '';\n return `${scheme}://${serializedHost}${port}${IAPKIT_VERIFY_PATH}`;\n}\n\nfunction toPurchaseErrorPayload(\n error: unknown,\n fallbackMessage: string,\n productId?: string,\n): VegaPurchaseErrorPayload {\n if (error instanceof Error) {\n const errorWithFields = error as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n return {\n code: errorWithFields.code ?? ErrorCode.PurchaseError,\n debugMessage: errorWithFields.debugMessage,\n isEmptyProductList: errorWithFields.isEmptyProductList,\n message: error.message || fallbackMessage,\n productId: errorWithFields.productId ?? productId,\n productIds: errorWithFields.productIds,\n productType: errorWithFields.productType,\n responseCode: errorWithFields.responseCode,\n subResponseCodeAndroid: errorWithFields.subResponseCodeAndroid,\n };\n }\n\n return {\n code: ErrorCode.PurchaseError,\n message: fallbackMessage,\n productId,\n };\n}\n\nfunction responseCodeName(responseCode: unknown): string {\n return typeof responseCode === 'string' ? responseCode.toUpperCase() : '';\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n timeoutError: Error,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(timeoutError), timeoutMs);\n operation.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n );\n });\n}\n\nfunction isSuccess(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (typeof responseCode === 'number') {\n return operation === 'purchase'\n ? responseCode === PURCHASE_RESPONSE_SUCCESS\n : responseCode === RESPONSE_SUCCESS;\n }\n\n const name = responseCodeName(responseCode);\n return name === 'SUCCESSFUL' || name === 'SUCCESS' || name === 'OK';\n}\n\nfunction mapErrorCode(\n operation: ResponseOperation,\n responseCode: unknown,\n): ErrorCode {\n const name = responseCodeName(responseCode);\n if (name.includes('ALREADY_PURCHASED')) return ErrorCode.AlreadyOwned;\n if (name.includes('INVALID_SKU')) return ErrorCode.SkuNotFound;\n if (name.includes('NOT_SUPPORTED')) return ErrorCode.FeatureNotSupported;\n if (name.includes('PENDING')) return ErrorCode.Pending;\n if (name.includes('FAILED')) {\n return operation === 'purchase'\n ? ErrorCode.UserCancelled\n : ErrorCode.ServiceError;\n }\n\n if (typeof responseCode === 'number') {\n if (operation === 'purchase') {\n if (responseCode === 1) return ErrorCode.AlreadyOwned;\n if (responseCode === 2) return ErrorCode.SkuNotFound;\n if (responseCode === 3) return ErrorCode.FeatureNotSupported;\n if (responseCode === 4) return ErrorCode.UserCancelled;\n }\n if (operation !== 'purchase' && responseCode === 2) {\n return ErrorCode.FeatureNotSupported;\n }\n if (operation !== 'purchase' && responseCode === 3) {\n return ErrorCode.ServiceError;\n }\n if (operation !== 'purchase' && responseCode === 4) {\n return ErrorCode.ServiceError;\n }\n }\n\n if (operation === 'product-data') return ErrorCode.QueryProduct;\n if (operation === 'user-data') return ErrorCode.InitConnection;\n return ErrorCode.PurchaseError;\n}\n\nfunction shouldRetryResponse(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (isSuccess(operation, responseCode)) return false;\n if (operation === 'purchase') return false;\n if (typeof responseCode === 'number') return responseCode === 3;\n return responseCodeName(responseCode).includes('FAILED');\n}\n\nfunction shouldRecoverPurchaseResponse(responseCode: unknown): boolean {\n if (typeof responseCode === 'number') {\n return responseCode === 1 || responseCode === 4;\n }\n const name = responseCodeName(responseCode);\n return name.includes('ALREADY_PURCHASED') || name.includes('FAILED');\n}\n\nfunction ensureSuccessful(\n operation: ResponseOperation,\n response: VegaResponse | null | undefined,\n message: string,\n productId?: string,\n): void {\n const responseCode = response?.responseCode;\n if (isSuccess(operation, responseCode)) return;\n throw createVegaError(\n mapErrorCode(operation, responseCode),\n `${message}. Amazon Vega responseCode=${String(responseCode ?? 'unknown')}`,\n responseCode,\n productId,\n );\n}\n\nfunction toTimestamp(value: unknown): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) ? timestamp : 0;\n }\n return 0;\n}\n\nfunction priceNumberToMicros(value: number): number {\n return Math.trunc(Math.abs(value) < 10_000 ? value * 1_000_000 : value);\n}\n\nfunction toPriceAmountMicros(value: unknown): string {\n if (typeof value === 'bigint') return value.toString();\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.trunc(value).toString();\n }\n if (typeof value === 'string' && value.length > 0) return value;\n return '0';\n}\n\nfunction getPriceObject(product: VegaProduct): VegaPrice {\n return product.price != null &&\n typeof product.price === 'object' &&\n !Array.isArray(product.price)\n ? product.price\n : {};\n}\n\nfunction getPriceAmountMicros(product: VegaProduct): unknown {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return priceNumberToMicros(product.price);\n }\n return getPriceObject(product).valueInMicros;\n}\n\nfunction microsToPrice(value: unknown): number | null {\n const micros =\n typeof value === 'bigint' ? Number(value) : Number(value ?? Number.NaN);\n if (!Number.isFinite(micros)) return null;\n return micros / 1_000_000;\n}\n\nfunction getPrice(product: VegaProduct): number | null {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return Math.abs(product.price) < 10_000\n ? product.price\n : product.price / 1_000_000;\n }\n return microsToPrice(getPriceObject(product).valueInMicros);\n}\n\nfunction getDisplayPrice(product: VegaProduct): string {\n const price = product.price;\n if (typeof price === 'number' && Number.isFinite(price)) {\n const value = Math.abs(price) < 10_000 ? price : price / 1_000_000;\n return value.toFixed(2);\n }\n if (typeof price === 'string') return price;\n return getPriceObject(product).priceStr ?? '';\n}\n\nfunction getCurrency(product: VegaProduct): string {\n return getPriceObject(product).priceCurrencyCode ?? '';\n}\n\nfunction isSubscription(productType: unknown): boolean {\n if (typeof productType === 'number')\n return productType === PRODUCT_TYPE_SUBSCRIPTION;\n if (typeof productType === 'string') {\n return productType.toUpperCase().includes('SUBSCRIPTION');\n }\n return false;\n}\n\nfunction productTypeToOpenIap(productType: unknown): 'in-app' | 'subs' {\n return isSubscription(productType) ? 'subs' : 'in-app';\n}\n\nfunction getProductType(product: VegaProduct): unknown {\n return product.productType ?? product.itemType;\n}\n\nfunction getSubscriptionPeriod(product: VegaProduct): string {\n if (product.subscriptionPeriod) return product.subscriptionPeriod;\n\n const term = product.term?.toLowerCase() ?? '';\n if (term.includes('year')) return 'P1Y';\n if (term.includes('month')) return 'P1M';\n if (term.includes('week')) return 'P1W';\n if (term.includes('day')) return 'P1D';\n return '';\n}\n\nfunction nonBlankString(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return value.trim().length > 0 ? value : null;\n}\n\nfunction getReceiptSku(receipt: VegaReceipt): string {\n return nonBlankString(receipt.sku) ?? nonBlankString(receipt.termSku) ?? '';\n}\n\nfunction getCachedProductType(\n receipt: VegaReceipt,\n productTypesBySku: Map<string, unknown>,\n fallbackSku?: string,\n): unknown {\n const sku = getReceiptSku(receipt) || fallbackSku || '';\n return sku ? productTypesBySku.get(sku) : undefined;\n}\n\nfunction productDataToArray(\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null,\n): VegaProduct[] {\n if (!productData) return [];\n if (productData instanceof Map) {\n return Array.from(productData.entries()).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n }\n return Object.entries(productData).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n}\n\nfunction chunkArray<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction createUserDataRequest(): VegaUserDataRequest {\n return {\n fetchUserProfileAccessConsentStatus: false,\n };\n}\n\nfunction isVegaParserError(error: unknown): boolean {\n return (\n error instanceof Error &&\n VEGA_PARSER_ERROR_MESSAGES.some((message) =>\n error.message.includes(message),\n )\n );\n}\n\nfunction malformedVegaResponse(error: unknown, operation: string): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return createVegaError(\n ErrorCode.BillingResponseJsonParseError,\n `${operation} returned a malformed response: ${detail}`,\n );\n}\n\nfunction createPricingPhase(product: VegaProduct) {\n return {\n billingCycleCount: 0,\n billingPeriod: getSubscriptionPeriod(product),\n formattedPrice: getDisplayPrice(product),\n priceAmountMicros: toPriceAmountMicros(getPriceAmountMicros(product)),\n priceCurrencyCode: getCurrency(product),\n recurrenceMode: 1,\n };\n}\n\nfunction createStandardizedSubscriptionOffer(product: VegaProduct) {\n const pricingPhase = createPricingPhase(product);\n const sku = product.sku ?? '';\n return {\n basePlanIdAndroid: sku,\n currency: getCurrency(product),\n displayPrice: getDisplayPrice(product),\n id: sku,\n offerTagsAndroid: [],\n offerTokenAndroid: '',\n paymentMode: 'pay-as-you-go' as const,\n period: null,\n price: getPrice(product) ?? 0,\n pricingPhasesAndroid: {\n pricingPhaseList: [pricingPhase],\n },\n type: 'introductory' as const,\n };\n}\n\nfunction mapProduct(product: VegaProduct): Product | ProductSubscription {\n const sku = product.sku ?? '';\n const type = productTypeToOpenIap(getProductType(product));\n const base = {\n id: sku,\n title: product.title ?? sku,\n description: product.description ?? '',\n displayName: product.title ?? sku,\n displayPrice: getDisplayPrice(product),\n currency: getCurrency(product),\n price: getPrice(product),\n debugDescription: null,\n platform: 'android' as const,\n nameAndroid: product.title ?? sku,\n productStatusAndroid: 'ok' as const,\n discountOffers: null,\n };\n\n if (type === 'subs') {\n return {\n ...base,\n type,\n subscriptionOffers: [createStandardizedSubscriptionOffer(product)],\n };\n }\n\n return {\n ...base,\n type,\n subscriptionOffers: null,\n };\n}\n\nfunction mapReceipt(\n receipt: VegaReceipt,\n fallbackProductType?: unknown,\n productIdOverride?: string,\n userData?: VegaUserData | null,\n): Purchase {\n const receiptId = receipt.receiptId ?? '';\n const productId = productIdOverride ?? getReceiptSku(receipt);\n const type = productTypeToOpenIap(receipt.productType ?? fallbackProductType);\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n const isActive = !isCanceled;\n const deferredSku = nonBlankString(receipt.deferredSku);\n\n return {\n id: receiptId,\n productId,\n transactionDate: toTimestamp(receipt.purchaseDate),\n purchaseToken: receiptId,\n currentPlanId:\n type === 'subs' ? (nonBlankString(receipt.termSku) ?? productId) : null,\n ids: productId ? [productId] : [],\n store: 'amazon',\n quantity: 1,\n purchaseState: isActive ? 'purchased' : 'unknown',\n isAutoRenewing: type === 'subs' && isActive,\n transactionId: receiptId,\n autoRenewingAndroid: type === 'subs' && isActive,\n dataAndroid: JSON.stringify(receipt),\n signatureAndroid: null,\n isAcknowledgedAndroid: false,\n packageNameAndroid: null,\n obfuscatedAccountIdAndroid: null,\n obfuscatedProfileIdAndroid: null,\n developerPayloadAndroid: null,\n isSuspendedAndroid: false,\n pendingPurchaseUpdateAndroid:\n receipt.isDeferred && deferredSku\n ? {products: [deferredSku], purchaseToken: receiptId}\n : null,\n userIdAmazon: nonBlankString(userData?.userId),\n userMarketplaceAmazon: nonBlankString(userData?.marketplace),\n };\n}\n\nexport function createExpoIapVegaModule(\n service: VegaPurchasingService,\n): ExpoIapVegaModule {\n const productTypesBySku = new Map<string, unknown>();\n const subscriptionBasesBySku = new Map<string, string>();\n const subscriptionParentsBySku = new Map<string, string>();\n const listenersByEventName = new Map<string, Set<VegaListener>>();\n let cachedUserData: VegaUserData | null = null;\n\n const emit = (eventName: string, payload: unknown): void => {\n for (const listener of listenersByEventName.get(eventName) ?? []) {\n listener(payload);\n }\n };\n\n const cacheProductMetadata = (product: VegaProduct): void => {\n if (!product.sku) return;\n\n const productType = getProductType(product);\n productTypesBySku.set(product.sku, productType);\n\n if (product.subscriptionBase) {\n subscriptionBasesBySku.set(product.sku, product.subscriptionBase);\n productTypesBySku.set(product.subscriptionBase, productType);\n }\n if (product.subscriptionParent) {\n subscriptionParentsBySku.set(product.sku, product.subscriptionParent);\n productTypesBySku.set(product.subscriptionParent, productType);\n }\n };\n\n const receiptMatchesRequestedSku = (\n receipt: VegaReceipt,\n sku: string,\n ): boolean => {\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return false;\n if (receiptSku === sku || receipt.termSku === sku) return true;\n if (receiptSku === subscriptionBasesBySku.get(sku)) return true;\n if (receiptSku === subscriptionParentsBySku.get(sku)) return true;\n return receiptSku === `${sku}.base`;\n };\n\n const resolveReceiptProductId = (\n receipt: VegaReceipt,\n productIdOverride?: string,\n ): string => {\n if (productIdOverride) return productIdOverride;\n\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return '';\n\n for (const [productSku, subscriptionBase] of subscriptionBasesBySku) {\n if (receiptSku === subscriptionBase) return productSku;\n }\n\n for (const [productSku, subscriptionParent] of subscriptionParentsBySku) {\n if (receiptSku === subscriptionParent) return productSku;\n }\n\n if (receiptSku.endsWith('.base')) {\n const parentSku = receiptSku.slice(0, -'.base'.length);\n if (productTypesBySku.has(parentSku)) return parentSku;\n }\n\n return receiptSku;\n };\n\n const getUserData = async (): Promise<VegaUserData | null> => {\n let response: VegaUserDataResponse;\n try {\n response = await service.getUserData(createUserDataRequest());\n } catch (error) {\n if (isVegaParserError(error)) {\n return null;\n }\n throw error;\n }\n ensureSuccessful('user-data', response, 'Failed to fetch Amazon user data');\n cachedUserData = response.userData ?? null;\n return cachedUserData;\n };\n\n const getStorefront = async (): Promise<string> => {\n try {\n const userData = await getUserData();\n const storefront = userData?.marketplace ?? userData?.countryCode;\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega storefront lookup returned no country code.',\n );\n }\n return storefront;\n } catch (error) {\n const errorCode =\n error instanceof Error\n ? (error as Error & {code?: unknown}).code\n : undefined;\n if (\n typeof errorCode === 'string' &&\n Object.values(ErrorCode).includes(errorCode as ErrorCode)\n ) {\n throw error;\n }\n throw createVegaError(\n ErrorCode.ServiceError,\n `Failed to get Amazon Vega storefront: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n const getPurchaseUpdateReceipts = async (): Promise<VegaReceipt[]> => {\n const receipts: VegaReceipt[] = [];\n let reset = true;\n let hasMore = false;\n let pageCount = 0;\n\n do {\n if (pageCount >= MAX_PURCHASE_UPDATE_PAGES) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates exceeded the pagination limit.',\n );\n }\n pageCount++;\n\n let response: VegaPurchaseUpdatesResponse | null = null;\n for (\n let attempt = 1;\n attempt <= PURCHASE_UPDATES_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n response = await service.getPurchaseUpdates({reset});\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(error, 'Amazon Vega purchase updates');\n }\n throw error;\n }\n\n if (\n !response ||\n !shouldRetryResponse('purchase-updates', response.responseCode) ||\n attempt === PURCHASE_UPDATES_MAX_ATTEMPTS\n ) {\n break;\n }\n await delay(PURCHASE_UPDATES_RETRY_DELAY_MS);\n }\n if (!response) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates returned no response.',\n );\n }\n ensureSuccessful(\n 'purchase-updates',\n response,\n 'Failed to fetch Amazon purchase updates',\n );\n cachedUserData = response.userData ?? cachedUserData;\n receipts.push(...(response.receiptList ?? []));\n hasMore = Boolean(response.hasMore);\n reset = false;\n } while (hasMore);\n\n return receipts;\n };\n\n const getProductData = async (\n skus: string[],\n message: string,\n ): Promise<VegaProduct[]> => {\n const products: VegaProduct[] = [];\n for (const batch of chunkArray(skus, MAX_PRODUCT_DATA_BATCH_SIZE)) {\n const response = await service.getProductData({skus: batch});\n ensureSuccessful('product-data', response, message);\n products.push(...productDataToArray(response.productData));\n }\n return products;\n };\n\n const hydrateProductTypesForReceipts = async (\n receipts: VegaReceipt[],\n ): Promise<void> => {\n const missingSkus = new Set<string>();\n\n for (const receipt of receipts) {\n const sku = getReceiptSku(receipt);\n if (!sku) continue;\n if (receipt.productType != null) {\n productTypesBySku.set(sku, receipt.productType);\n continue;\n }\n\n const resolvedSku = resolveReceiptProductId(receipt);\n const resolvedProductType = productTypesBySku.get(resolvedSku);\n if (resolvedProductType != null) {\n productTypesBySku.set(sku, resolvedProductType);\n } else if (!productTypesBySku.has(sku)) {\n missingSkus.add(sku);\n }\n }\n\n if (missingSkus.size === 0) return;\n\n let products: VegaProduct[];\n try {\n products = await getProductData(\n Array.from(missingSkus),\n 'Failed to fetch Amazon Vega product data for purchase updates',\n );\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(\n error,\n 'Amazon Vega purchase product metadata',\n );\n }\n throw error;\n }\n\n for (const product of products) {\n cacheProductMetadata(product);\n }\n };\n\n const getAvailableItems = async (\n _options?: PurchaseOptions,\n ): Promise<Purchase[]> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n return receipts\n .filter((receipt) => {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n return !isCanceled;\n })\n .map((receipt) =>\n mapReceipt(\n receipt,\n getCachedProductType(receipt, productTypesBySku),\n resolveReceiptProductId(receipt),\n cachedUserData,\n ),\n );\n };\n\n const finishReceipt = async (purchaseToken: string): Promise<void> => {\n if (!purchaseToken) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'purchaseToken is required to finish an Amazon Vega transaction.',\n );\n }\n\n let lastResponse: VegaResponse | null = null;\n for (\n let attempt = 1;\n attempt <= NOTIFY_FULFILLMENT_MAX_ATTEMPTS;\n attempt += 1\n ) {\n const response = await withTimeout(\n service.notifyFulfillment({\n fulfillmentResult: FULFILLMENT_RESULT_FULFILLED,\n receiptId: purchaseToken,\n }),\n NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS,\n createVegaError(\n ErrorCode.ServiceTimeout,\n 'Amazon Vega notifyFulfillment timed out.',\n ),\n );\n if (isSuccess('notify-fulfillment', response?.responseCode)) return;\n lastResponse = response;\n if (attempt < NOTIFY_FULFILLMENT_MAX_ATTEMPTS) {\n await delay(NOTIFY_FULFILLMENT_RETRY_DELAY_MS);\n }\n }\n\n ensureSuccessful(\n 'notify-fulfillment',\n lastResponse,\n 'Failed to notify Amazon Vega fulfillment',\n );\n };\n\n const recoverFulfillablePurchases = async (\n sku: string,\n fallbackProductType?: unknown,\n options?: RecoverPurchasesOptions,\n ): Promise<{requestedPurchases: Purchase[]}> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n const requestedPurchases: Purchase[] = [];\n\n for (const receipt of receipts) {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n if (isCanceled) continue;\n\n const purchaseTimestamp = toTimestamp(receipt.purchaseDate);\n if (\n options?.minPurchaseDateMs != null &&\n (purchaseTimestamp === 0 ||\n purchaseTimestamp < options.minPurchaseDateMs)\n ) {\n continue;\n }\n\n const matchesRequestedSku = receiptMatchesRequestedSku(receipt, sku);\n if (!matchesRequestedSku) {\n continue;\n }\n\n const purchase = mapReceipt(\n receipt,\n receipt.productType ??\n getCachedProductType(receipt, productTypesBySku, sku) ??\n fallbackProductType,\n resolveReceiptProductId(receipt, sku),\n cachedUserData,\n );\n requestedPurchases.push(purchase);\n emit('purchase-updated', purchase);\n }\n\n return {requestedPurchases};\n };\n\n const verifyWithIapkit = async (\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult> => {\n function normalizeIapkitState(state: unknown): IapkitPurchaseState {\n const normalized =\n typeof state === 'string'\n ? state.toLowerCase().replace(/_/g, '-')\n : 'unknown';\n const states = new Set<IapkitPurchaseState>([\n 'entitled',\n 'pending-acknowledgment',\n 'pending',\n 'canceled',\n 'expired',\n 'ready-to-consume',\n 'consumed',\n 'unknown',\n 'inauthentic',\n ]);\n return states.has(normalized as IapkitPurchaseState)\n ? (normalized as IapkitPurchaseState)\n : 'unknown';\n }\n\n function extractIapkitErrorMessage(\n json: unknown,\n depth = 0,\n ): string | null {\n if (depth > MAX_IAPKIT_ERROR_DEPTH) return null;\n if (!json || typeof json !== 'object') return null;\n const record = json as Record<string, unknown>;\n function extractStringMessage(value: string): string {\n if (depth >= MAX_IAPKIT_ERROR_DEPTH) return value;\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object'\n ? (extractIapkitErrorMessage(parsed, depth + 1) ?? value)\n : value;\n } catch {\n return value;\n }\n }\n\n const details = record.details;\n if (details && typeof details === 'object') {\n const originalError = (details as Record<string, unknown>)\n .originalError;\n if (typeof originalError === 'string') {\n return extractStringMessage(originalError);\n }\n }\n\n const errors = record.errors;\n if (Array.isArray(errors) && errors.length > 0) {\n const firstError = errors[0];\n return typeof firstError === 'string'\n ? extractStringMessage(firstError)\n : extractIapkitErrorMessage(firstError, depth + 1);\n }\n\n if (typeof record.message === 'string') {\n return extractStringMessage(record.message);\n }\n if (typeof record.error === 'string') {\n return extractStringMessage(record.error);\n }\n return null;\n }\n\n function parseIapkitJsonResponse(text: string): unknown | null {\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n }\n\n function isIapkitResultObject(\n json: unknown,\n ): json is Record<string, unknown> {\n return Boolean(json) && typeof json === 'object' && !Array.isArray(json);\n }\n\n function hasIapkitErrors(json: unknown): boolean {\n if (!isIapkitResultObject(json)) return false;\n const errors = json.errors;\n return Array.isArray(errors) && errors.length > 0;\n }\n\n function readIapkitResult(\n json: Record<string, unknown>,\n status: number,\n ): RequestVerifyPurchaseWithIapkitResult {\n if (\n typeof json.isValid !== 'boolean' ||\n typeof json.state !== 'string' ||\n json.store !== 'amazon'\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n const productId = json.productId;\n if (productId != null && typeof productId !== 'string') {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n // Forwarded opaquely: `environment` is String in the spec.\n const rawEnvironment = json.environment;\n const environment =\n typeof rawEnvironment === 'string' && rawEnvironment.length > 0\n ? rawEnvironment\n : undefined;\n\n return {\n ...(environment == null ? {} : {environment}),\n isValid: json.isValid,\n ...(productId == null ? {} : {productId}),\n state: normalizeIapkitState(json.state),\n store: 'amazon',\n };\n }\n\n if (options.provider !== 'iapkit') {\n throw createVegaError(\n ErrorCode.FeatureNotSupported,\n `Unsupported purchase verification provider: ${options.provider}.`,\n );\n }\n\n const iapkit = options.iapkit;\n const payloadCount =\n Number(Boolean(iapkit?.amazon)) +\n Number(Boolean(iapkit?.apple)) +\n Number(Boolean(iapkit?.google));\n const amazon = iapkit?.amazon;\n if (payloadCount !== 1 || !amazon) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires exactly one amazon payload.',\n );\n }\n\n const receiptId =\n typeof amazon.receiptId === 'string' ? amazon.receiptId.trim() : '';\n if (!receiptId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires amazon.receiptId.',\n );\n }\n\n let userId = typeof amazon.userId === 'string' ? amazon.userId.trim() : '';\n if (!userId) {\n await getUserData();\n userId = cachedUserData?.userId?.trim() ?? '';\n }\n if (!userId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification could not resolve userId.',\n );\n }\n\n const apiKey =\n typeof iapkit?.apiKey === 'string' ? iapkit.apiKey.trim() : '';\n const verificationUrl = getIapkitVerifyUrl(iapkit?.baseUrl);\n let response: Response;\n try {\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n IAPKIT_VERIFY_TIMEOUT_MS,\n );\n response = await fetch(verificationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(apiKey ? {Authorization: `Bearer ${apiKey}`} : {}),\n },\n body: JSON.stringify({\n store: 'amazon',\n userId,\n receiptId,\n ...(amazon.expectedProductId == null\n ? {}\n : {expectedProductId: amazon.expectedProductId}),\n ...(amazon.sandbox == null ? {} : {sandbox: amazon.sandbox}),\n }),\n signal: controller.signal,\n }).finally(() => clearTimeout(timeout));\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to reach IAPKit verification endpoint.',\n );\n }\n let text: string;\n try {\n text = await response.text();\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to read IAPKit verification response.',\n );\n }\n const json = parseIapkitJsonResponse(text);\n\n if (!response.ok) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? `HTTP ${response.status}`,\n );\n }\n\n if (json === null) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned non-JSON response (HTTP ${response.status}).`,\n );\n }\n\n if (!isIapkitResultObject(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${response.status}).`,\n );\n }\n\n if (hasIapkitErrors(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? 'IAPKit verification failed.',\n );\n }\n\n const result = readIapkitResult(json, response.status);\n return {\n provider: 'iapkit',\n iapkit: result,\n };\n };\n\n const vegaModule: ExpoIapVegaModule = {\n ERROR_CODES: ErrorCode,\n async initConnection(): Promise<boolean> {\n return true;\n },\n async endConnection(): Promise<boolean> {\n productTypesBySku.clear();\n subscriptionBasesBySku.clear();\n subscriptionParentsBySku.clear();\n cachedUserData = null;\n return true;\n },\n async fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]> {\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createVegaError(ErrorCode.EmptySkuList, 'No SKUs provided');\n }\n\n const products = await getProductData(\n skus,\n 'Failed to fetch Amazon Vega products',\n );\n\n return products\n .filter((product) => {\n cacheProductMetadata(product);\n const openIapType = productTypeToOpenIap(getProductType(product));\n if (type === 'all') return true;\n if (type === 'subs') return openIapType === 'subs';\n return openIapType === 'in-app';\n })\n .map(mapProduct);\n },\n async requestPurchase(params): Promise<Purchase[]> {\n let sku: string | undefined;\n try {\n const skus = params.skus ?? [];\n if (skus.length !== 1) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega purchase expects exactly one SKU per request.',\n );\n }\n\n sku = skus[0]!;\n const fallbackProductType =\n params.type === 'subs'\n ? PRODUCT_TYPE_SUBSCRIPTION\n : productTypesBySku.get(sku);\n if (fallbackProductType != null) {\n productTypesBySku.set(sku, fallbackProductType);\n }\n let response: VegaPurchaseResponse;\n const purchaseStartedAtMs =\n Date.now() - PURCHASE_RECOVERY_CLOCK_SKEW_MS;\n try {\n response = await service.purchase({sku});\n } catch (error) {\n if (isVegaParserError(error)) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n {minPurchaseDateMs: purchaseStartedAtMs},\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original parser error as the source of truth.\n }\n }\n throw error;\n }\n\n if (\n !isSuccess('purchase', response.responseCode) &&\n shouldRecoverPurchaseResponse(response.responseCode)\n ) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original purchase response as the source of truth.\n }\n }\n\n ensureSuccessful(\n 'purchase',\n response,\n 'Failed to complete Amazon Vega purchase',\n sku,\n );\n cachedUserData = response.userData ?? cachedUserData;\n\n if (!response.receipt) return [];\n const purchase = mapReceipt(\n response.receipt,\n fallbackProductType,\n sku,\n response.userData ?? cachedUserData,\n );\n emit('purchase-updated', purchase);\n return [purchase];\n } catch (error) {\n emit(\n 'purchase-error',\n toPurchaseErrorPayload(\n error,\n 'Failed to complete Amazon Vega purchase',\n sku,\n ),\n );\n throw error;\n }\n },\n getAvailableItems,\n async getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]> {\n const requestedIds = new Set(subscriptionIds ?? []);\n const purchases = await getAvailableItems({\n includeSuspendedAndroid: false,\n });\n return purchases\n .filter(\n (purchase) =>\n purchase.isAutoRenewing &&\n (requestedIds.size === 0 || requestedIds.has(purchase.productId)),\n )\n .map((purchase) => ({\n productId: purchase.productId,\n isActive: true,\n transactionId: purchase.transactionId ?? purchase.id,\n purchaseToken: purchase.purchaseToken ?? null,\n transactionDate: purchase.transactionDate,\n expirationDateIOS: null,\n environmentIOS: null,\n daysUntilExpirationIOS: null,\n renewalInfoIOS: null,\n autoRenewingAndroid:\n (\n purchase as Purchase & {\n autoRenewingAndroid?: boolean | null;\n }\n ).autoRenewingAndroid ?? null,\n basePlanIdAndroid: purchase.currentPlanId ?? purchase.productId,\n currentPlanId: purchase.currentPlanId ?? purchase.productId,\n purchaseTokenAndroid: purchase.purchaseToken ?? null,\n }));\n },\n async hasActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<boolean> {\n const subscriptions =\n await vegaModule.getActiveSubscriptions(subscriptionIds);\n return subscriptions.length > 0;\n },\n async acknowledgePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async consumePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async getStorefront(): Promise<string> {\n return getStorefront();\n },\n async verifyPurchaseWithProvider(options) {\n return verifyWithIapkit(options);\n },\n addListener(eventName, listener) {\n const listeners = listenersByEventName.get(eventName) ?? new Set();\n listeners.add(listener);\n listenersByEventName.set(eventName, listeners);\n return {\n remove: () => {\n listeners.delete(listener);\n },\n };\n },\n removeListener(eventName, listener): void {\n listenersByEventName.get(eventName)?.delete(listener);\n },\n };\n\n return vegaModule;\n}\n"]}
|