@itwin/core-mobile 4.0.0-dev.8 → 4.0.0-dev.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -1
- package/README.md +1 -1
- package/lib/cjs/MobileBackend.d.ts +7 -7
- package/lib/cjs/MobileBackend.js +28 -24
- package/lib/cjs/MobileBackend.js.map +1 -1
- package/lib/cjs/MobileFrontend.d.ts +5 -5
- package/lib/cjs/MobileFrontend.js +25 -21
- package/lib/cjs/MobileFrontend.js.map +1 -1
- package/lib/cjs/__DOC_ONLY__.d.ts +33 -33
- package/lib/cjs/__DOC_ONLY__.js +56 -52
- package/lib/cjs/__DOC_ONLY__.js.map +1 -1
- package/lib/cjs/backend/MobileAuthorizationBackend.d.ts +17 -17
- package/lib/cjs/backend/MobileAuthorizationBackend.js +46 -46
- package/lib/cjs/backend/MobileAuthorizationBackend.js.map +1 -1
- package/lib/cjs/backend/MobileFileHandler.d.ts +112 -112
- package/lib/cjs/backend/MobileFileHandler.d.ts.map +1 -1
- package/lib/cjs/backend/MobileFileHandler.js +263 -263
- package/lib/cjs/backend/MobileFileHandler.js.map +1 -1
- package/lib/cjs/backend/MobileHost.d.ts +72 -72
- package/lib/cjs/backend/MobileHost.d.ts.map +1 -1
- package/lib/cjs/backend/MobileHost.js +149 -156
- package/lib/cjs/backend/MobileHost.js.map +1 -1
- package/lib/cjs/backend/MobileRpcServer.d.ts +19 -19
- package/lib/cjs/backend/MobileRpcServer.js +156 -156
- package/lib/cjs/backend/MobileRpcServer.js.map +1 -1
- package/lib/cjs/backend/Request.d.ts +117 -149
- package/lib/cjs/backend/Request.d.ts.map +1 -1
- package/lib/cjs/backend/Request.js +255 -267
- package/lib/cjs/backend/Request.js.map +1 -1
- package/lib/cjs/common/MobileAppChannel.d.ts +4 -4
- package/lib/cjs/common/MobileAppChannel.js +11 -11
- package/lib/cjs/common/MobileAppChannel.js.map +1 -1
- package/lib/cjs/common/MobileAppProps.d.ts +35 -35
- package/lib/cjs/common/MobileAppProps.d.ts.map +1 -1
- package/lib/cjs/common/MobileAppProps.js +26 -26
- package/lib/cjs/common/MobileAppProps.js.map +1 -1
- package/lib/cjs/common/MobileEventLoop.d.ts +11 -11
- package/lib/cjs/common/MobileEventLoop.js +30 -30
- package/lib/cjs/common/MobileEventLoop.js.map +1 -1
- package/lib/cjs/common/MobileIpc.d.ts +17 -17
- package/lib/cjs/common/MobileIpc.js +70 -70
- package/lib/cjs/common/MobileIpc.js.map +1 -1
- package/lib/cjs/common/MobilePush.d.ts +20 -20
- package/lib/cjs/common/MobilePush.js +53 -53
- package/lib/cjs/common/MobilePush.js.map +1 -1
- package/lib/cjs/common/MobileRpcManager.d.ts +40 -40
- package/lib/cjs/common/MobileRpcManager.js +110 -110
- package/lib/cjs/common/MobileRpcManager.js.map +1 -1
- package/lib/cjs/common/MobileRpcProtocol.d.ts +58 -58
- package/lib/cjs/common/MobileRpcProtocol.d.ts.map +1 -1
- package/lib/cjs/common/MobileRpcProtocol.js +277 -277
- package/lib/cjs/common/MobileRpcProtocol.js.map +1 -1
- package/lib/cjs/common/MobileRpcRequest.d.ts +20 -20
- package/lib/cjs/common/MobileRpcRequest.js +50 -50
- package/lib/cjs/common/MobileRpcRequest.js.map +1 -1
- package/lib/cjs/frontend/MobileApp.d.ts +23 -23
- package/lib/cjs/frontend/MobileApp.d.ts.map +1 -1
- package/lib/cjs/frontend/MobileApp.js +79 -80
- package/lib/cjs/frontend/MobileApp.js.map +1 -1
- package/lib/cjs/frontend/MobileAuthorizationFrontend.d.ts +17 -17
- package/lib/cjs/frontend/MobileAuthorizationFrontend.d.ts.map +1 -1
- package/lib/cjs/frontend/MobileAuthorizationFrontend.js +54 -46
- package/lib/cjs/frontend/MobileAuthorizationFrontend.js.map +1 -1
- package/lib/cjs/test/ios/MobilePlatform.test.d.ts +1 -1
- package/lib/cjs/test/ios/MobilePlatform.test.js +84 -84
- package/lib/cjs/test/ios/MobilePlatform.test.js.map +1 -1
- package/package.json +18 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileRpcProtocol.js","sourceRoot":"","sources":["../../../src/common/MobileRpcProtocol.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAoD;AACpD,oDAG4B;AAC5B,uDAAoD;AACpD,2CAAiD;AACjD,6CAAyE;AACzE,yDAA4D;AAC5D,yDAAsD;AAgBtD;;GAEG;AACH,MAAa,iBAAkB,SAAQ,yBAAW;IAiChD,YAAY,aAAqC,EAAE,QAAqB;QACtE,KAAK,CAAC,aAAa,CAAC,CAAC;QAjChB,WAAM,GAAe,SAAiB,CAAC;QACvC,aAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;QACnD,aAAQ,GAAsB,EAAE,CAAC;QACjC,cAAS,GAAW,MAAM,CAAC,gBAAgB,CAAC;QAC5C,kBAAa,GAAuB,SAAS,CAAC;QAC9C,yBAAoB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,gBAAW,GAAG,mCAAgB,CAAC;QACvC,oBAAe,GAAqC,SAAS,CAAC;QAC9D,wBAAmB,GAAsC,SAAS,CAAC;QACnE,iBAAY,GAAiB,EAAE,CAAC;QAChC,UAAK,GAAW,CAAC,CAAC;QAyBxB,IAAI,QAAQ,KAAK,yBAAW,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;aAAM,IAAI,QAAQ,KAAK,yBAAW,CAAC,OAAO,EAAE;YAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,8BAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,0BAAY,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC;IA9BM,MAAM,CAAC,aAAa,KAAuB,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE5G,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAyB;QACzD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;QACxC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAU,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,WAAkC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,WAAW,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAU,CAAC;QACjE,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC;QAClC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACvD,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAeO,kBAAkB;QACxB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;YACtC,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,yDAAyD,CAAC,CAAC;SACvG;QACD,IAAI,CAAC,yCAAsB,CAAC,IAAI,CAAC,IAAI,EAAE;YACrC,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;SAC1F;QAED,IAAI,CAAC,KAAK,GAAG,yCAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE/B,MAAc,CAAC,uBAAuB,GAAG,CAAC,IAAY,EAAE,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,gCAAmB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,4BAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,KAAc;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;QAClC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,qBAAqB,CAAC,MAAiB;QAC7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC1B,OAAO;aACR;YAED,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAAiB,EAAE,KAAc;QAC1D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACzC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC1B,OAAO;aACR;YAED,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEb,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,wBAAU,CAAC,cAAc,CAAC,CAAC;gBACpD,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACvB,GAAG,CAAC,MAAM,EAAE,CAAC;oBACb,mEAAmE;oBACnE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,MAAiB;QAC3C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC1B,OAAO;aACR;YAED,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEzC,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,WAAW,EAAE;YAC/C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAChC;QAED,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzB,OAAO;SACR;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,WAAW,EAAE;YACvE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;SACvE;IACH,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;YAC7C,OAAO;SACR;QAED,OAAO,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnD,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAG,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACzB;SACF;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,WAAW,EAAE;YACxE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAChC;IACH,CAAC;IAEO,wBAAwB,CAAC,IAA0B;QACzD,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;SACpC;IACH,CAAC;IAEO,uBAAuB,CAAC,IAAY;QAC1C,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;SAC3F;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QAEpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;YAChC,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAEO,uBAAuB,CAAC,IAAiB;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;SACrF;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;SACnF;QAED,EAAE,IAAI,CAAC,SAAS,CAAC;QACjB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QAErC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACxD,OAAO;SACR;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACvC,OAAO;SACR;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAqB,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEO,kBAAkB,CAAC,KAAyB;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;YACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,iBAAiB;QACvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACxD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,IAAI,IAAI,EAAE;YACxD,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,gEAAgE,CAAC,CAAC;SAC9G;QAED,aAAa,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACzG,+BAAiB,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,iCAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7F,4BAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,CAAC;IAEO,yBAAyB,CAAC,IAA0B,EAAE,YAAoB;QAChF,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SACnD;aAAM;YACL,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SACnD;IACH,CAAC;IAEO,wBAAwB,CAAC,IAAY,EAAE,UAAkB;QAC/D,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;SAC1F;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,8DAA8D;SAC/F;IACH,CAAC;IAEO,wBAAwB,CAAC,IAAiB,EAAE,UAAkB;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;SACpF;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,8DAA8D;SAC/F;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,UAAkB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;SAClF;QAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YACrC,OAAO;SACR;QAED,iCAAe,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChD,iCAAe,CAAC,UAAU,EAAE,CAAC;QAE7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAEM,aAAa,CAAC,OAAwB;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEM,cAAc,CAAC,OAAwB,EAAE,UAAmB;QACjE,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAExD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;gBAC/B,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;aAC3E;iBAAM;gBACL,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;aAC3E;SACF;IACH,CAAC;CACF;AArTD,8CAqTC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelError, IpcWebSocket, RpcEndpoint, RpcProtocol, RpcPushChannel, RpcPushConnection, RpcRequest, RpcRequestFulfillment, RpcSerializedValue,\r\n SerializedRpcRequest,\r\n} from \"@itwin/core-common\";\r\nimport { MobileEventLoop } from \"./MobileEventLoop\";\r\nimport { MobileIpcTransport } from \"./MobileIpc\";\r\nimport { MobilePushConnection, MobilePushTransport } from \"./MobilePush\";\r\nimport { MobileRpcConfiguration } from \"./MobileRpcManager\";\r\nimport { MobileRpcRequest } from \"./MobileRpcRequest\";\r\n\r\n/* eslint-disable deprecation/deprecation */\r\n\r\n/** @internal */\r\nexport type MobileRpcChunks = Array<string | Uint8Array>;\r\n\r\n/** @internal */\r\nexport interface MobileRpcGateway {\r\n handler: (payload: ArrayBuffer | string, connectionId: number) => void;\r\n sendString: (message: string, connectionId: number) => void;\r\n sendBinary: (message: Uint8Array, connectionId: number) => void;\r\n port: number;\r\n connectionId: number;\r\n}\r\n\r\n/** RPC interface protocol for an Mobile-based application.\r\n * @internal\r\n */\r\nexport class MobileRpcProtocol extends RpcProtocol {\r\n public socket: WebSocket = (undefined as any);\r\n public requests: Map<string, MobileRpcRequest> = new Map();\r\n private _pending: MobileRpcChunks[] = [];\r\n private _capacity: number = Number.MAX_SAFE_INTEGER;\r\n private _sendInterval: number | undefined = undefined;\r\n private _sendIntervalHandler = () => this.trySend();\r\n public readonly requestType = MobileRpcRequest;\r\n private _partialRequest: SerializedRpcRequest | undefined = undefined;\r\n private _partialFulfillment: RpcRequestFulfillment | undefined = undefined;\r\n private _partialData: Uint8Array[] = [];\r\n private _port: number = 0;\r\n private _transport?: MobilePushTransport;\r\n private _ipc: MobileIpcTransport;\r\n public static obtainInterop(): MobileRpcGateway { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n\r\n public static async encodeRequest(request: MobileRpcRequest): Promise<MobileRpcChunks> {\r\n const serialized = await request.protocol.serialize(request);\r\n const data = serialized.parameters.data;\r\n serialized.parameters.data = data.map((v) => v.byteLength) as any[];\r\n return [JSON.stringify(serialized), ...data];\r\n }\r\n\r\n public static encodeResponse(fulfillment: RpcRequestFulfillment): MobileRpcChunks {\r\n const data = fulfillment.result.data;\r\n fulfillment.result.data = data.map((v) => v.byteLength) as any[];\r\n const raw = fulfillment.rawResult;\r\n fulfillment.rawResult = undefined;\r\n const encoded = [JSON.stringify(fulfillment), ...data];\r\n fulfillment.rawResult = raw;\r\n return encoded;\r\n }\r\n\r\n constructor(configuration: MobileRpcConfiguration, endPoint: RpcEndpoint) {\r\n super(configuration);\r\n\r\n if (endPoint === RpcEndpoint.Frontend) {\r\n this.initializeFrontend();\r\n } else if (endPoint === RpcEndpoint.Backend) {\r\n this.initializeBackend();\r\n }\r\n\r\n this._ipc = new MobileIpcTransport(this);\r\n IpcWebSocket.transport = this._ipc;\r\n }\r\n\r\n private initializeFrontend() {\r\n if (typeof (WebSocket) === \"undefined\") {\r\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol on frontend require websocket to work\");\r\n }\r\n if (!MobileRpcConfiguration.args.port) {\r\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol require 'port' parameter\");\r\n }\r\n\r\n this._port = MobileRpcConfiguration.args.port;\r\n this.connect(this._port, false);\r\n\r\n (window as any)._imodeljs_rpc_reconnect = (port: number) => {\r\n this.socket.close();\r\n window.location.hash = window.location.hash.replace(`port=${this._port}`, `port=${port}`);\r\n this._port = port;\r\n this.connect(port, true);\r\n };\r\n\r\n const transport = new MobilePushTransport(this);\r\n this._transport = transport;\r\n RpcPushChannel.setup(transport);\r\n }\r\n\r\n private connect(port: number, reset: boolean) {\r\n const socket = new WebSocket(`ws://localhost:${port}`);\r\n socket.binaryType = \"arraybuffer\";\r\n this.connectMessageHandler(socket);\r\n this.connectOpenHandler(socket, reset);\r\n this.connectErrorHandler(socket);\r\n this.socket = socket;\r\n }\r\n\r\n private connectMessageHandler(socket: WebSocket) {\r\n socket.addEventListener(\"message\", async (event) => {\r\n if (this.socket !== socket) {\r\n return;\r\n }\r\n\r\n this.handleMessageFromBackend(event.data);\r\n });\r\n }\r\n\r\n private connectOpenHandler(socket: WebSocket, reset: boolean) {\r\n socket.addEventListener(\"open\", (_event) => {\r\n if (this.socket !== socket) {\r\n return;\r\n }\r\n\r\n if (reset) {\r\n this.reset();\r\n\r\n const requests = new Map(RpcRequest.activeRequests);\r\n requests.forEach((req) => {\r\n req.cancel();\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n req.submit();\r\n });\r\n }\r\n\r\n this.scheduleSend();\r\n });\r\n }\r\n\r\n private connectErrorHandler(socket: WebSocket) {\r\n socket.addEventListener(\"error\", (_event) => {\r\n if (this.socket !== socket) {\r\n return;\r\n }\r\n\r\n throw new IModelError(BentleyStatus.ERROR, \"Socket error.\");\r\n });\r\n }\r\n\r\n private reset() {\r\n this.requests.clear();\r\n this._capacity = Number.MAX_SAFE_INTEGER;\r\n\r\n if (typeof (this._sendInterval) !== \"undefined\") {\r\n window.clearInterval(this._sendInterval);\r\n this._sendInterval = undefined;\r\n }\r\n\r\n this._partialRequest = undefined;\r\n this._partialFulfillment = undefined;\r\n this._partialData.length = 0;\r\n }\r\n\r\n private scheduleSend() {\r\n if (!this._pending.length) {\r\n return;\r\n }\r\n\r\n this.trySend();\r\n\r\n if (this._pending.length && typeof (this._sendInterval) === \"undefined\") {\r\n this._sendInterval = window.setInterval(this._sendIntervalHandler, 0);\r\n }\r\n }\r\n\r\n private trySend() {\r\n if (this.socket.readyState !== WebSocket.OPEN) {\r\n return;\r\n }\r\n\r\n while (this._capacity !== 0 && this._pending.length) {\r\n --this._capacity;\r\n const next = this._pending.shift()!;\r\n for (const chunk of next) {\r\n this.socket.send(chunk);\r\n }\r\n }\r\n\r\n if (!this._pending.length && typeof (this._sendInterval) !== \"undefined\") {\r\n window.clearInterval(this._sendInterval);\r\n this._sendInterval = undefined;\r\n }\r\n }\r\n\r\n private handleMessageFromBackend(data: string | ArrayBuffer) {\r\n if (typeof (data) === \"string\") {\r\n this.handleStringFromBackend(data);\r\n } else {\r\n this.handleBinaryFromBackend(data);\r\n }\r\n }\r\n\r\n private handleStringFromBackend(data: string) {\r\n if (this._partialFulfillment) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (already receiving response).\");\r\n }\r\n\r\n const response = JSON.parse(data) as RpcRequestFulfillment;\r\n this._partialFulfillment = response;\r\n\r\n if (!response.result.data.length) {\r\n this.notifyResponse();\r\n }\r\n }\r\n\r\n private handleBinaryFromBackend(data: ArrayBuffer) {\r\n const fulfillment = this._partialFulfillment;\r\n if (!fulfillment) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no response received).\");\r\n }\r\n\r\n this._partialData.push(new Uint8Array(data));\r\n if (this._partialData.length === fulfillment.result.data.length) {\r\n this.notifyResponse();\r\n }\r\n }\r\n\r\n private notifyResponse() {\r\n const response = this._partialFulfillment;\r\n if (!response) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no response exists).\");\r\n }\r\n\r\n ++this._capacity;\r\n this.consumePartialData(response.result);\r\n this._partialFulfillment = undefined;\r\n\r\n if (this._transport && this._transport.consume(response)) {\r\n return;\r\n }\r\n\r\n if (this._ipc.consumeResponse(response)) {\r\n return;\r\n }\r\n\r\n const request = this.requests.get(response.id) as MobileRpcRequest;\r\n this.requests.delete(response.id);\r\n request.notifyResponse(response);\r\n }\r\n\r\n private consumePartialData(value: RpcSerializedValue) {\r\n for (let i = 0, l = value.data.length; i !== l; ++i) {\r\n value.data[i] = this._partialData[i];\r\n }\r\n\r\n this._partialData.length = 0;\r\n }\r\n\r\n private initializeBackend() {\r\n const mobilegateway = MobileRpcProtocol.obtainInterop();\r\n if (mobilegateway === undefined || mobilegateway == null) {\r\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol on backend require native bridge to be setup\");\r\n }\r\n\r\n mobilegateway.handler = (payload, connectionId) => this.handleMessageFromFrontend(payload, connectionId);\r\n RpcPushConnection.for = (channel, client) => new MobilePushConnection(channel, client, this);\r\n RpcPushChannel.enabled = true;\r\n }\r\n\r\n private handleMessageFromFrontend(data: string | ArrayBuffer, connectionId: number) {\r\n if (typeof (data) === \"string\") {\r\n this.handleStringFromFrontend(data, connectionId);\r\n } else {\r\n this.handleBinaryFromFrontend(data, connectionId);\r\n }\r\n }\r\n\r\n private handleStringFromFrontend(data: string, connection: number) {\r\n if (this._partialRequest) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (already receiving request).\");\r\n }\r\n\r\n const request = JSON.parse(data) as SerializedRpcRequest;\r\n this._partialRequest = request;\r\n\r\n if (!request.parameters.data.length) {\r\n this.notifyRequest(connection); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n }\r\n\r\n private handleBinaryFromFrontend(data: ArrayBuffer, connection: number) {\r\n const request = this._partialRequest;\r\n if (!request) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no request received).\");\r\n }\r\n\r\n this._partialData.push(new Uint8Array(data));\r\n if (this._partialData.length === request.parameters.data.length) {\r\n this.notifyRequest(connection); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n }\r\n\r\n private async notifyRequest(connection: number) {\r\n const request = this._partialRequest;\r\n if (!request) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no request exists).\");\r\n }\r\n\r\n this.consumePartialData(request.parameters);\r\n this._partialRequest = undefined;\r\n\r\n if (this._ipc.consumeRequest(request)) {\r\n return;\r\n }\r\n\r\n MobileEventLoop.addTask();\r\n const fulfillment = await this.fulfill(request);\r\n MobileEventLoop.removeTask();\r\n\r\n const response = MobileRpcProtocol.encodeResponse(fulfillment);\r\n this.sendToFrontend(response, connection);\r\n }\r\n\r\n public sendToBackend(message: MobileRpcChunks): void {\r\n this._pending.push(message);\r\n this.scheduleSend();\r\n }\r\n\r\n public sendToFrontend(message: MobileRpcChunks, connection?: number): void {\r\n const mobilegateway = MobileRpcProtocol.obtainInterop();\r\n\r\n for (const chunk of message) {\r\n if (typeof (chunk) === \"string\") {\r\n mobilegateway.sendString(chunk, connection || mobilegateway.connectionId);\r\n } else {\r\n mobilegateway.sendBinary(chunk, connection || mobilegateway.connectionId);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MobileRpcProtocol.js","sourceRoot":"","sources":["../../../src/common/MobileRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport {\n IModelError, IpcWebSocket, RpcEndpoint, RpcProtocol, RpcPushChannel, RpcPushConnection, RpcRequest, RpcRequestFulfillment, RpcSerializedValue,\n SerializedRpcRequest,\n} from \"@itwin/core-common\";\nimport { MobileEventLoop } from \"./MobileEventLoop\";\nimport { MobileIpcTransport } from \"./MobileIpc\";\nimport { MobilePushConnection, MobilePushTransport } from \"./MobilePush\";\nimport { MobileRpcConfiguration } from \"./MobileRpcManager\";\nimport { MobileRpcRequest } from \"./MobileRpcRequest\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport type MobileRpcChunks = Array<string | Uint8Array>;\n\n/** @internal */\nexport interface MobileRpcGateway {\n handler: (payload: ArrayBuffer | string, connectionId: number) => void;\n sendString: (message: string, connectionId: number) => void;\n sendBinary: (message: Uint8Array, connectionId: number) => void;\n port: number;\n connectionId: number;\n}\n\n/** RPC interface protocol for an Mobile-based application.\n * @internal\n */\nexport class MobileRpcProtocol extends RpcProtocol {\n public socket: WebSocket = (undefined as any);\n public requests: Map<string, MobileRpcRequest> = new Map();\n private _pending: MobileRpcChunks[] = [];\n private _capacity: number = Number.MAX_SAFE_INTEGER;\n private _sendInterval: number | undefined = undefined;\n private _sendIntervalHandler = () => this.trySend();\n public readonly requestType = MobileRpcRequest;\n private _partialRequest: SerializedRpcRequest | undefined = undefined;\n private _partialFulfillment: RpcRequestFulfillment | undefined = undefined;\n private _partialData: Uint8Array[] = [];\n private _port: number = 0;\n private _transport?: MobilePushTransport;\n private _ipc: MobileIpcTransport;\n public static obtainInterop(): MobileRpcGateway { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n\n public static async encodeRequest(request: MobileRpcRequest): Promise<MobileRpcChunks> {\n const serialized = await request.protocol.serialize(request);\n const data = serialized.parameters.data;\n serialized.parameters.data = data.map((v) => v.byteLength) as any[];\n return [JSON.stringify(serialized), ...data];\n }\n\n public static encodeResponse(fulfillment: RpcRequestFulfillment): MobileRpcChunks {\n const data = fulfillment.result.data;\n fulfillment.result.data = data.map((v) => v.byteLength) as any[];\n const raw = fulfillment.rawResult;\n fulfillment.rawResult = undefined;\n const encoded = [JSON.stringify(fulfillment), ...data];\n fulfillment.rawResult = raw;\n return encoded;\n }\n\n constructor(configuration: MobileRpcConfiguration, endPoint: RpcEndpoint) {\n super(configuration);\n\n if (endPoint === RpcEndpoint.Frontend) {\n this.initializeFrontend();\n } else if (endPoint === RpcEndpoint.Backend) {\n this.initializeBackend();\n }\n\n this._ipc = new MobileIpcTransport(this);\n IpcWebSocket.transport = this._ipc;\n }\n\n private initializeFrontend() {\n if (typeof (WebSocket) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol on frontend require websocket to work\");\n }\n if (!MobileRpcConfiguration.args.port) {\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol require 'port' parameter\");\n }\n\n this._port = MobileRpcConfiguration.args.port;\n this.connect(this._port, false);\n\n (window as any)._imodeljs_rpc_reconnect = (port: number) => {\n this.socket.close();\n window.location.hash = window.location.hash.replace(`port=${this._port}`, `port=${port}`);\n this._port = port;\n this.connect(port, true);\n };\n\n const transport = new MobilePushTransport(this);\n this._transport = transport;\n RpcPushChannel.setup(transport);\n }\n\n private connect(port: number, reset: boolean) {\n const socket = new WebSocket(`ws://localhost:${port}`);\n socket.binaryType = \"arraybuffer\";\n this.connectMessageHandler(socket);\n this.connectOpenHandler(socket, reset);\n this.connectErrorHandler(socket);\n this.socket = socket;\n }\n\n private connectMessageHandler(socket: WebSocket) {\n socket.addEventListener(\"message\", async (event) => {\n if (this.socket !== socket) {\n return;\n }\n\n this.handleMessageFromBackend(event.data);\n });\n }\n\n private connectOpenHandler(socket: WebSocket, reset: boolean) {\n socket.addEventListener(\"open\", (_event) => {\n if (this.socket !== socket) {\n return;\n }\n\n if (reset) {\n this.reset();\n\n const requests = new Map(RpcRequest.activeRequests);\n requests.forEach((req) => {\n req.cancel();\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n req.submit();\n });\n }\n\n this.scheduleSend();\n });\n }\n\n private connectErrorHandler(socket: WebSocket) {\n socket.addEventListener(\"error\", (_event) => {\n if (this.socket !== socket) {\n return;\n }\n\n throw new IModelError(BentleyStatus.ERROR, \"Socket error.\");\n });\n }\n\n private reset() {\n this.requests.clear();\n this._capacity = Number.MAX_SAFE_INTEGER;\n\n if (typeof (this._sendInterval) !== \"undefined\") {\n window.clearInterval(this._sendInterval);\n this._sendInterval = undefined;\n }\n\n this._partialRequest = undefined;\n this._partialFulfillment = undefined;\n this._partialData.length = 0;\n }\n\n private scheduleSend() {\n if (!this._pending.length) {\n return;\n }\n\n this.trySend();\n\n if (this._pending.length && typeof (this._sendInterval) === \"undefined\") {\n this._sendInterval = window.setInterval(this._sendIntervalHandler, 0);\n }\n }\n\n private trySend() {\n if (this.socket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n while (this._capacity !== 0 && this._pending.length) {\n --this._capacity;\n const next = this._pending.shift()!;\n for (const chunk of next) {\n this.socket.send(chunk);\n }\n }\n\n if (!this._pending.length && typeof (this._sendInterval) !== \"undefined\") {\n window.clearInterval(this._sendInterval);\n this._sendInterval = undefined;\n }\n }\n\n private handleMessageFromBackend(data: string | ArrayBuffer) {\n if (typeof (data) === \"string\") {\n this.handleStringFromBackend(data);\n } else {\n this.handleBinaryFromBackend(data);\n }\n }\n\n private handleStringFromBackend(data: string) {\n if (this._partialFulfillment) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (already receiving response).\");\n }\n\n const response = JSON.parse(data) as RpcRequestFulfillment;\n this._partialFulfillment = response;\n\n if (!response.result.data.length) {\n this.notifyResponse();\n }\n }\n\n private handleBinaryFromBackend(data: ArrayBuffer) {\n const fulfillment = this._partialFulfillment;\n if (!fulfillment) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no response received).\");\n }\n\n this._partialData.push(new Uint8Array(data));\n if (this._partialData.length === fulfillment.result.data.length) {\n this.notifyResponse();\n }\n }\n\n private notifyResponse() {\n const response = this._partialFulfillment;\n if (!response) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no response exists).\");\n }\n\n ++this._capacity;\n this.consumePartialData(response.result);\n this._partialFulfillment = undefined;\n\n if (this._transport && this._transport.consume(response)) {\n return;\n }\n\n if (this._ipc.consumeResponse(response)) {\n return;\n }\n\n const request = this.requests.get(response.id) as MobileRpcRequest;\n this.requests.delete(response.id);\n request.notifyResponse(response);\n }\n\n private consumePartialData(value: RpcSerializedValue) {\n for (let i = 0, l = value.data.length; i !== l; ++i) {\n value.data[i] = this._partialData[i];\n }\n\n this._partialData.length = 0;\n }\n\n private initializeBackend() {\n const mobilegateway = MobileRpcProtocol.obtainInterop();\n if (mobilegateway === undefined || mobilegateway == null) {\n throw new IModelError(BentleyStatus.ERROR, \"MobileRpcProtocol on backend require native bridge to be setup\");\n }\n\n mobilegateway.handler = (payload, connectionId) => this.handleMessageFromFrontend(payload, connectionId);\n RpcPushConnection.for = (channel, client) => new MobilePushConnection(channel, client, this);\n RpcPushChannel.enabled = true;\n }\n\n private handleMessageFromFrontend(data: string | ArrayBuffer, connectionId: number) {\n if (typeof (data) === \"string\") {\n this.handleStringFromFrontend(data, connectionId);\n } else {\n this.handleBinaryFromFrontend(data, connectionId);\n }\n }\n\n private handleStringFromFrontend(data: string, connection: number) {\n if (this._partialRequest) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (already receiving request).\");\n }\n\n const request = JSON.parse(data) as SerializedRpcRequest;\n this._partialRequest = request;\n\n if (!request.parameters.data.length) {\n this.notifyRequest(connection); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n\n private handleBinaryFromFrontend(data: ArrayBuffer, connection: number) {\n const request = this._partialRequest;\n if (!request) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no request received).\");\n }\n\n this._partialData.push(new Uint8Array(data));\n if (this._partialData.length === request.parameters.data.length) {\n this.notifyRequest(connection); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n\n private async notifyRequest(connection: number) {\n const request = this._partialRequest;\n if (!request) {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid state (no request exists).\");\n }\n\n this.consumePartialData(request.parameters);\n this._partialRequest = undefined;\n\n if (this._ipc.consumeRequest(request)) {\n return;\n }\n\n MobileEventLoop.addTask();\n const fulfillment = await this.fulfill(request);\n MobileEventLoop.removeTask();\n\n const response = MobileRpcProtocol.encodeResponse(fulfillment);\n this.sendToFrontend(response, connection);\n }\n\n public sendToBackend(message: MobileRpcChunks): void {\n this._pending.push(message);\n this.scheduleSend();\n }\n\n public sendToFrontend(message: MobileRpcChunks, connection?: number): void {\n const mobilegateway = MobileRpcProtocol.obtainInterop();\n\n for (const chunk of message) {\n if (typeof (chunk) === \"string\") {\n mobilegateway.sendString(chunk, connection || mobilegateway.connectionId);\n } else {\n mobilegateway.sendBinary(chunk, connection || mobilegateway.connectionId);\n }\n }\n }\n}\n"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module RpcInterface
|
|
3
|
-
*/
|
|
4
|
-
import { RpcRequest, RpcRequestFulfillment, RpcSerializedValue } from "@itwin/core-common";
|
|
5
|
-
import { MobileRpcProtocol } from "./MobileRpcProtocol";
|
|
6
|
-
/** @internal */
|
|
7
|
-
export declare class MobileRpcRequest extends RpcRequest {
|
|
8
|
-
private _res;
|
|
9
|
-
private _fulfillment;
|
|
10
|
-
/** Convenience access to the protocol of this request. */
|
|
11
|
-
readonly protocol: MobileRpcProtocol;
|
|
12
|
-
/** Sends the request. */
|
|
13
|
-
protected send(): Promise<number>;
|
|
14
|
-
/** Loads the request. */
|
|
15
|
-
protected load(): Promise<RpcSerializedValue>;
|
|
16
|
-
/** Sets request header values. */
|
|
17
|
-
protected setHeader(_name: string, _value: string): void;
|
|
18
|
-
/** @internal */
|
|
19
|
-
notifyResponse(fulfillment: RpcRequestFulfillment): void;
|
|
20
|
-
}
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module RpcInterface
|
|
3
|
+
*/
|
|
4
|
+
import { RpcRequest, RpcRequestFulfillment, RpcSerializedValue } from "@itwin/core-common";
|
|
5
|
+
import { MobileRpcProtocol } from "./MobileRpcProtocol";
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare class MobileRpcRequest extends RpcRequest {
|
|
8
|
+
private _res;
|
|
9
|
+
private _fulfillment;
|
|
10
|
+
/** Convenience access to the protocol of this request. */
|
|
11
|
+
readonly protocol: MobileRpcProtocol;
|
|
12
|
+
/** Sends the request. */
|
|
13
|
+
protected send(): Promise<number>;
|
|
14
|
+
/** Loads the request. */
|
|
15
|
+
protected load(): Promise<RpcSerializedValue>;
|
|
16
|
+
/** Sets request header values. */
|
|
17
|
+
protected setHeader(_name: string, _value: string): void;
|
|
18
|
+
/** @internal */
|
|
19
|
+
notifyResponse(fulfillment: RpcRequestFulfillment): void;
|
|
20
|
+
}
|
|
21
21
|
//# sourceMappingURL=MobileRpcRequest.d.ts.map
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
/** @packageDocumentation
|
|
7
|
-
* @module RpcInterface
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.MobileRpcRequest = void 0;
|
|
11
|
-
const core_common_1 = require("@itwin/core-common");
|
|
12
|
-
const MobileRpcProtocol_1 = require("./MobileRpcProtocol");
|
|
13
|
-
/* eslint-disable deprecation/deprecation */
|
|
14
|
-
/** @internal */
|
|
15
|
-
class MobileRpcRequest extends core_common_1.RpcRequest {
|
|
16
|
-
constructor() {
|
|
17
|
-
super(...arguments);
|
|
18
|
-
this._res = () => undefined;
|
|
19
|
-
this._fulfillment = undefined;
|
|
20
|
-
/** Convenience access to the protocol of this request. */
|
|
21
|
-
this.protocol = this.client.configuration.protocol;
|
|
22
|
-
}
|
|
23
|
-
/** Sends the request. */
|
|
24
|
-
async send() {
|
|
25
|
-
this.protocol.requests.set(this.id, this);
|
|
26
|
-
const parts = await MobileRpcProtocol_1.MobileRpcProtocol.encodeRequest(this);
|
|
27
|
-
this.protocol.sendToBackend(parts);
|
|
28
|
-
return new Promise((resolve) => {
|
|
29
|
-
this._res = resolve;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
/** Loads the request. */
|
|
33
|
-
async load() {
|
|
34
|
-
const fulfillment = this._fulfillment;
|
|
35
|
-
if (!fulfillment) {
|
|
36
|
-
throw new Error("No request fulfillment available.");
|
|
37
|
-
}
|
|
38
|
-
return fulfillment.result;
|
|
39
|
-
}
|
|
40
|
-
/** Sets request header values. */
|
|
41
|
-
setHeader(_name, _value) {
|
|
42
|
-
// No implementation
|
|
43
|
-
}
|
|
44
|
-
/** @internal */
|
|
45
|
-
notifyResponse(fulfillment) {
|
|
46
|
-
this._fulfillment = fulfillment;
|
|
47
|
-
this._res(fulfillment.status);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.MobileRpcRequest = MobileRpcRequest;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module RpcInterface
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.MobileRpcRequest = void 0;
|
|
11
|
+
const core_common_1 = require("@itwin/core-common");
|
|
12
|
+
const MobileRpcProtocol_1 = require("./MobileRpcProtocol");
|
|
13
|
+
/* eslint-disable deprecation/deprecation */
|
|
14
|
+
/** @internal */
|
|
15
|
+
class MobileRpcRequest extends core_common_1.RpcRequest {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this._res = () => undefined;
|
|
19
|
+
this._fulfillment = undefined;
|
|
20
|
+
/** Convenience access to the protocol of this request. */
|
|
21
|
+
this.protocol = this.client.configuration.protocol;
|
|
22
|
+
}
|
|
23
|
+
/** Sends the request. */
|
|
24
|
+
async send() {
|
|
25
|
+
this.protocol.requests.set(this.id, this);
|
|
26
|
+
const parts = await MobileRpcProtocol_1.MobileRpcProtocol.encodeRequest(this);
|
|
27
|
+
this.protocol.sendToBackend(parts);
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
this._res = resolve;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** Loads the request. */
|
|
33
|
+
async load() {
|
|
34
|
+
const fulfillment = this._fulfillment;
|
|
35
|
+
if (!fulfillment) {
|
|
36
|
+
throw new Error("No request fulfillment available.");
|
|
37
|
+
}
|
|
38
|
+
return fulfillment.result;
|
|
39
|
+
}
|
|
40
|
+
/** Sets request header values. */
|
|
41
|
+
setHeader(_name, _value) {
|
|
42
|
+
// No implementation
|
|
43
|
+
}
|
|
44
|
+
/** @internal */
|
|
45
|
+
notifyResponse(fulfillment) {
|
|
46
|
+
this._fulfillment = fulfillment;
|
|
47
|
+
this._res(fulfillment.status);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.MobileRpcRequest = MobileRpcRequest;
|
|
51
51
|
//# sourceMappingURL=MobileRpcRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileRpcRequest.js","sourceRoot":"","sources":["../../../src/common/MobileRpcRequest.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA2F;AAC3F,2DAAwD;AAExD,4CAA4C;AAE5C,gBAAgB;AAChB,MAAa,gBAAiB,SAAQ,wBAAU;IAAhD;;QACU,SAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;QAChD,iBAAY,GAAsC,SAAS,CAAC;QAEpE,0DAA0D;QACjC,aAAQ,GAAsB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAgCnG,CAAC;IA9BC,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,qCAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,kCAAkC;IACxB,SAAS,CAAC,KAAa,EAAE,MAAc;QAC/C,oBAAoB;IACtB,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,WAAkC;QACtD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AArCD,4CAqCC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"MobileRpcRequest.js","sourceRoot":"","sources":["../../../src/common/MobileRpcRequest.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA2F;AAC3F,2DAAwD;AAExD,4CAA4C;AAE5C,gBAAgB;AAChB,MAAa,gBAAiB,SAAQ,wBAAU;IAAhD;;QACU,SAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;QAChD,iBAAY,GAAsC,SAAS,CAAC;QAEpE,0DAA0D;QACjC,aAAQ,GAAsB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAgCnG,CAAC;IA9BC,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,qCAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,kCAAkC;IACxB,SAAS,CAAC,KAAa,EAAE,MAAc;QAC/C,oBAAoB;IACtB,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,WAAkC;QACtD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AArCD,4CAqCC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { RpcRequest, RpcRequestFulfillment, RpcSerializedValue } from \"@itwin/core-common\";\nimport { MobileRpcProtocol } from \"./MobileRpcProtocol\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport class MobileRpcRequest extends RpcRequest {\n private _res: (value: number) => void = () => undefined;\n private _fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n /** Convenience access to the protocol of this request. */\n public override readonly protocol: MobileRpcProtocol = this.client.configuration.protocol as any;\n\n /** Sends the request. */\n protected async send(): Promise<number> {\n this.protocol.requests.set(this.id, this);\n const parts = await MobileRpcProtocol.encodeRequest(this);\n this.protocol.sendToBackend(parts);\n return new Promise<number>((resolve) => {\n this._res = resolve;\n });\n }\n\n /** Loads the request. */\n protected async load(): Promise<RpcSerializedValue> {\n const fulfillment = this._fulfillment;\n if (!fulfillment) {\n throw new Error(\"No request fulfillment available.\");\n }\n\n return fulfillment.result;\n }\n\n /** Sets request header values. */\n protected setHeader(_name: string, _value: string): void {\n // No implementation\n }\n\n /** @internal */\n public notifyResponse(fulfillment: RpcRequestFulfillment) {\n this._fulfillment = fulfillment;\n this._res(fulfillment.status);\n }\n}\n"]}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { AsyncMethodsOf, BeEvent, PromiseReturnType } from "@itwin/core-bentley";
|
|
2
|
-
import { NativeAppOpts } from "@itwin/core-frontend";
|
|
3
|
-
import { MobileAppFunctions } from "../common/MobileAppProps";
|
|
4
|
-
/** @beta */
|
|
5
|
-
export
|
|
6
|
-
iModelApp: {
|
|
7
|
-
authorizationClient?: never;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
/** @beta */
|
|
11
|
-
export declare class MobileApp {
|
|
12
|
-
static onMemoryWarning: BeEvent<() => void>;
|
|
13
|
-
static onOrientationChanged: BeEvent<() => void>;
|
|
14
|
-
static onEnterForeground: BeEvent<() => void>;
|
|
15
|
-
static onEnterBackground: BeEvent<() => void>;
|
|
16
|
-
static onWillTerminate: BeEvent<() => void>;
|
|
17
|
-
static onAuthAccessTokenChanged: BeEvent<(accessToken: string | undefined, expirationDate: string | undefined) => void>;
|
|
18
|
-
static callBackend<T extends AsyncMethodsOf<MobileAppFunctions>>(methodName: T, ...args: Parameters<MobileAppFunctions[T]>): Promise<PromiseReturnType<MobileAppFunctions[T]>>;
|
|
19
|
-
private static _isValid;
|
|
20
|
-
static get isValid(): boolean;
|
|
21
|
-
/** @beta */
|
|
22
|
-
static startup(opts?: MobileAppOpts): Promise<void>;
|
|
23
|
-
}
|
|
1
|
+
import { AsyncMethodsOf, BeEvent, PromiseReturnType } from "@itwin/core-bentley";
|
|
2
|
+
import { NativeAppOpts } from "@itwin/core-frontend";
|
|
3
|
+
import { MobileAppFunctions } from "../common/MobileAppProps";
|
|
4
|
+
/** @beta */
|
|
5
|
+
export type MobileAppOpts = NativeAppOpts & {
|
|
6
|
+
iModelApp: {
|
|
7
|
+
authorizationClient?: never;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
/** @beta */
|
|
11
|
+
export declare class MobileApp {
|
|
12
|
+
static onMemoryWarning: BeEvent<() => void>;
|
|
13
|
+
static onOrientationChanged: BeEvent<() => void>;
|
|
14
|
+
static onEnterForeground: BeEvent<() => void>;
|
|
15
|
+
static onEnterBackground: BeEvent<() => void>;
|
|
16
|
+
static onWillTerminate: BeEvent<() => void>;
|
|
17
|
+
static onAuthAccessTokenChanged: BeEvent<(accessToken: string | undefined, expirationDate: string | undefined) => void>;
|
|
18
|
+
static callBackend<T extends AsyncMethodsOf<MobileAppFunctions>>(methodName: T, ...args: Parameters<MobileAppFunctions[T]>): Promise<PromiseReturnType<MobileAppFunctions[T]>>;
|
|
19
|
+
private static _isValid;
|
|
20
|
+
static get isValid(): boolean;
|
|
21
|
+
/** @beta */
|
|
22
|
+
static startup(opts?: MobileAppOpts): Promise<void>;
|
|
23
|
+
}
|
|
24
24
|
//# sourceMappingURL=MobileApp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileApp.d.ts","sourceRoot":"","sources":["../../../src/frontend/MobileApp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAU,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAuC,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AAE/G,OAAO,EAAE,kBAAkB,EAAuB,MAAM,0BAA0B,CAAC;AAInF,YAAY;AACZ,
|
|
1
|
+
{"version":3,"file":"MobileApp.d.ts","sourceRoot":"","sources":["../../../src/frontend/MobileApp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAU,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAuC,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AAE/G,OAAO,EAAE,kBAAkB,EAAuB,MAAM,0BAA0B,CAAC;AAInF,YAAY;AACZ,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAAE,SAAS,EAAE;QAAE,mBAAmB,CAAC,EAAE,KAAK,CAAA;KAAE,CAAA;CAAE,CAAC;AAoB3F,YAAY;AACZ,qBAAa,SAAS;IACpB,OAAc,eAAe,gBAAqB,IAAI,EAAI;IAC1D,OAAc,oBAAoB,gBAAqB,IAAI,EAAI;IAC/D,OAAc,iBAAiB,gBAAqB,IAAI,EAAI;IAC5D,OAAc,iBAAiB,gBAAqB,IAAI,EAAI;IAC5D,OAAc,eAAe,gBAAqB,IAAI,EAAI;IAC1D,OAAc,wBAAwB,wBAA6B,MAAM,GAAG,SAAS,kBAAkB,MAAM,GAAG,SAAS,KAAK,IAAI,EAAI;WAClH,WAAW,CAAC,CAAC,SAAS,cAAc,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAIvI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,WAAkB,OAAO,YAA4B;IACrD,YAAY;WACQ,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa;CAwBjD"}
|
|
@@ -1,81 +1,80 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.MobileApp = void 0;
|
|
8
|
-
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
-
const core_common_1 = require("@itwin/core-common");
|
|
10
|
-
const core_frontend_1 = require("@itwin/core-frontend");
|
|
11
|
-
const MobileAppChannel_1 = require("../common/MobileAppChannel");
|
|
12
|
-
const MobileRpcManager_1 = require("../common/MobileRpcManager");
|
|
13
|
-
const MobileAuthorizationFrontend_1 = require("./MobileAuthorizationFrontend");
|
|
14
|
-
/** receive notifications from backend */
|
|
15
|
-
class MobileAppNotifyHandler extends core_frontend_1.NotificationHandler {
|
|
16
|
-
get channelName() { return MobileAppChannel_1.mobileAppNotify; }
|
|
17
|
-
notifyMemoryWarning() {
|
|
18
|
-
core_bentley_1.Logger.logWarning("mobileApp", "Low memory warning");
|
|
19
|
-
if (MobileApp.onMemoryWarning.numberOfListeners === 0) {
|
|
20
|
-
alert("Low memory warning");
|
|
21
|
-
}
|
|
22
|
-
MobileApp.onMemoryWarning.raiseEvent();
|
|
23
|
-
}
|
|
24
|
-
notifyOrientationChanged() { MobileApp.onOrientationChanged.raiseEvent(); }
|
|
25
|
-
notifyWillTerminate() { MobileApp.onWillTerminate.raiseEvent(); }
|
|
26
|
-
notifyAuthAccessTokenChanged(accessToken, expirationDate) {
|
|
27
|
-
MobileApp.onAuthAccessTokenChanged.raiseEvent(accessToken, expirationDate);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** @beta */
|
|
31
|
-
class MobileApp {
|
|
32
|
-
static async callBackend(methodName, ...args) {
|
|
33
|
-
return core_frontend_1.IpcApp.callIpcChannel(MobileAppChannel_1.mobileAppChannel, methodName, ...args);
|
|
34
|
-
}
|
|
35
|
-
static get isValid() { return this._isValid; }
|
|
36
|
-
/** @beta */
|
|
37
|
-
static async startup(opts) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
MobileApp.
|
|
60
|
-
MobileApp.
|
|
61
|
-
MobileApp.
|
|
62
|
-
MobileApp.
|
|
63
|
-
MobileApp.
|
|
64
|
-
MobileApp
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MobileApp = void 0;
|
|
8
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
+
const core_common_1 = require("@itwin/core-common");
|
|
10
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
11
|
+
const MobileAppChannel_1 = require("../common/MobileAppChannel");
|
|
12
|
+
const MobileRpcManager_1 = require("../common/MobileRpcManager");
|
|
13
|
+
const MobileAuthorizationFrontend_1 = require("./MobileAuthorizationFrontend");
|
|
14
|
+
/** receive notifications from backend */
|
|
15
|
+
class MobileAppNotifyHandler extends core_frontend_1.NotificationHandler {
|
|
16
|
+
get channelName() { return MobileAppChannel_1.mobileAppNotify; }
|
|
17
|
+
notifyMemoryWarning() {
|
|
18
|
+
core_bentley_1.Logger.logWarning("mobileApp", "Low memory warning");
|
|
19
|
+
if (MobileApp.onMemoryWarning.numberOfListeners === 0) {
|
|
20
|
+
alert("Low memory warning");
|
|
21
|
+
}
|
|
22
|
+
MobileApp.onMemoryWarning.raiseEvent();
|
|
23
|
+
}
|
|
24
|
+
notifyOrientationChanged() { MobileApp.onOrientationChanged.raiseEvent(); }
|
|
25
|
+
notifyWillTerminate() { MobileApp.onWillTerminate.raiseEvent(); }
|
|
26
|
+
notifyAuthAccessTokenChanged(accessToken, expirationDate) {
|
|
27
|
+
MobileApp.onAuthAccessTokenChanged.raiseEvent(accessToken, expirationDate);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** @beta */
|
|
31
|
+
class MobileApp {
|
|
32
|
+
static async callBackend(methodName, ...args) {
|
|
33
|
+
return core_frontend_1.IpcApp.callIpcChannel(MobileAppChannel_1.mobileAppChannel, methodName, ...args);
|
|
34
|
+
}
|
|
35
|
+
static get isValid() { return this._isValid; }
|
|
36
|
+
/** @beta */
|
|
37
|
+
static async startup(opts) {
|
|
38
|
+
attachDirectEventCallbacks();
|
|
39
|
+
const iModelAppOpts = {
|
|
40
|
+
...opts?.iModelApp,
|
|
41
|
+
};
|
|
42
|
+
const authorizationClient = new MobileAuthorizationFrontend_1.MobileAuthorizationFrontend();
|
|
43
|
+
iModelAppOpts.authorizationClient = authorizationClient;
|
|
44
|
+
if (!this._isValid) {
|
|
45
|
+
this.onAuthAccessTokenChanged.addListener((accessToken, expirationDate) => {
|
|
46
|
+
authorizationClient.setAccessToken(accessToken, expirationDate);
|
|
47
|
+
});
|
|
48
|
+
const rpcInterfaces = opts?.iModelApp?.rpcInterfaces ?? [core_common_1.IModelReadRpcInterface, core_common_1.IModelTileRpcInterface]; // eslint-disable-line deprecation/deprecation
|
|
49
|
+
MobileRpcManager_1.MobileRpcManager.initializeClient(rpcInterfaces);
|
|
50
|
+
this._isValid = true;
|
|
51
|
+
}
|
|
52
|
+
const socket = new core_common_1.IpcWebSocketFrontend(); // needs work
|
|
53
|
+
await core_frontend_1.NativeApp.startup(socket, { ...opts, iModelApp: iModelAppOpts });
|
|
54
|
+
MobileAppNotifyHandler.register(); // receives notifications from backend
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
MobileApp.onMemoryWarning = new core_bentley_1.BeEvent();
|
|
58
|
+
MobileApp.onOrientationChanged = new core_bentley_1.BeEvent();
|
|
59
|
+
MobileApp.onEnterForeground = new core_bentley_1.BeEvent();
|
|
60
|
+
MobileApp.onEnterBackground = new core_bentley_1.BeEvent();
|
|
61
|
+
MobileApp.onWillTerminate = new core_bentley_1.BeEvent();
|
|
62
|
+
MobileApp.onAuthAccessTokenChanged = new core_bentley_1.BeEvent();
|
|
63
|
+
MobileApp._isValid = false;
|
|
64
|
+
exports.MobileApp = MobileApp;
|
|
65
|
+
/*
|
|
66
|
+
The suspend/resume lifecycle events cannot be reliably sent from the backend due to timing issues that arise when
|
|
67
|
+
inter-operating with the actual suspend and resume behavior on the native side.
|
|
68
|
+
Instead, they are sent directly to the browser here from platform-specific code.
|
|
69
|
+
*/
|
|
70
|
+
function attachDirectEventCallbacks() {
|
|
71
|
+
window._imodeljs_rpc_lifecycle = (evt) => {
|
|
72
|
+
if (evt === "suspend") {
|
|
73
|
+
MobileApp.onEnterBackground.raiseEvent();
|
|
74
|
+
}
|
|
75
|
+
else if (evt === "resume") {
|
|
76
|
+
MobileApp.onEnterForeground.raiseEvent();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
81
80
|
//# sourceMappingURL=MobileApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileApp.js","sourceRoot":"","sources":["../../../src/frontend/MobileApp.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAyF;AACzF,oDAA0G;AAC1G,wDAA+G;AAC/G,iEAA+E;AAE/E,iEAA8D;AAC9D,+EAA4E;AAK5E,yCAAyC;AACzC,MAAM,sBAAuB,SAAQ,mCAAmB;IACtD,IAAW,WAAW,KAAK,OAAO,kCAAe,CAAC,CAAC,CAAC;IAE7C,mBAAmB;QACxB,qBAAM,CAAC,UAAU,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACrD,IAAI,SAAS,CAAC,eAAe,CAAC,iBAAiB,KAAK,CAAC,EAAE;YACrD,KAAK,CAAC,oBAAoB,CAAC,CAAC;SAC7B;QACD,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IACM,wBAAwB,KAAK,SAAS,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3E,mBAAmB,KAAK,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACjE,4BAA4B,CAAC,WAA+B,EAAE,cAAkC;QACrG,SAAS,CAAC,wBAAwB,CAAC,UAAU,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7E,CAAC;CACF;AAED,YAAY;AACZ,MAAa,SAAS;IAOb,MAAM,CAAC,KAAK,CAAC,WAAW,CAA+C,UAAa,EAAE,GAAG,IAAuC;QACrI,OAAO,sBAAM,CAAC,cAAc,CAAC,mCAAgB,EAAE,UAAU,EAAE,GAAG,IAAI,CAA6C,CAAC;IAClH,CAAC;IAGM,MAAM,KAAK,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,YAAY;IACL,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAoB
|
|
1
|
+
{"version":3,"file":"MobileApp.js","sourceRoot":"","sources":["../../../src/frontend/MobileApp.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { AsyncMethodsOf, BeEvent, Logger, PromiseReturnType } from \"@itwin/core-bentley\";\nimport { IModelReadRpcInterface, IModelTileRpcInterface, IpcWebSocketFrontend } from \"@itwin/core-common\";\nimport { IModelAppOptions, IpcApp, NativeApp, NativeAppOpts, NotificationHandler } from \"@itwin/core-frontend\";\nimport { mobileAppChannel, mobileAppNotify } from \"../common/MobileAppChannel\";\nimport { MobileAppFunctions, MobileNotifications } from \"../common/MobileAppProps\";\nimport { MobileRpcManager } from \"../common/MobileRpcManager\";\nimport { MobileAuthorizationFrontend } from \"./MobileAuthorizationFrontend\";\n\n/** @beta */\nexport type MobileAppOpts = NativeAppOpts & { iModelApp: { authorizationClient?: never } };\n\n/** receive notifications from backend */\nclass MobileAppNotifyHandler extends NotificationHandler implements MobileNotifications {\n public get channelName() { return mobileAppNotify; }\n\n public notifyMemoryWarning() {\n Logger.logWarning(\"mobileApp\", \"Low memory warning\");\n if (MobileApp.onMemoryWarning.numberOfListeners === 0) {\n alert(\"Low memory warning\");\n }\n MobileApp.onMemoryWarning.raiseEvent();\n }\n public notifyOrientationChanged() { MobileApp.onOrientationChanged.raiseEvent(); }\n public notifyWillTerminate() { MobileApp.onWillTerminate.raiseEvent(); }\n public notifyAuthAccessTokenChanged(accessToken: string | undefined, expirationDate: string | undefined) {\n MobileApp.onAuthAccessTokenChanged.raiseEvent(accessToken, expirationDate);\n }\n}\n\n/** @beta */\nexport class MobileApp {\n public static onMemoryWarning = new BeEvent<() => void>();\n public static onOrientationChanged = new BeEvent<() => void>();\n public static onEnterForeground = new BeEvent<() => void>();\n public static onEnterBackground = new BeEvent<() => void>();\n public static onWillTerminate = new BeEvent<() => void>();\n public static onAuthAccessTokenChanged = new BeEvent<(accessToken: string | undefined, expirationDate: string | undefined) => void>();\n public static async callBackend<T extends AsyncMethodsOf<MobileAppFunctions>>(methodName: T, ...args: Parameters<MobileAppFunctions[T]>) {\n return IpcApp.callIpcChannel(mobileAppChannel, methodName, ...args) as PromiseReturnType<MobileAppFunctions[T]>;\n }\n\n private static _isValid = false;\n public static get isValid() { return this._isValid; }\n /** @beta */\n public static async startup(opts?: MobileAppOpts) {\n attachDirectEventCallbacks();\n\n const iModelAppOpts: IModelAppOptions = {\n ...opts?.iModelApp,\n };\n const authorizationClient = new MobileAuthorizationFrontend();\n iModelAppOpts.authorizationClient = authorizationClient;\n\n if (!this._isValid) {\n this.onAuthAccessTokenChanged.addListener((accessToken: string | undefined, expirationDate: string | undefined) => {\n authorizationClient.setAccessToken(accessToken, expirationDate);\n });\n\n const rpcInterfaces = opts?.iModelApp?.rpcInterfaces ?? [IModelReadRpcInterface, IModelTileRpcInterface]; // eslint-disable-line deprecation/deprecation\n MobileRpcManager.initializeClient(rpcInterfaces);\n this._isValid = true;\n }\n\n const socket = new IpcWebSocketFrontend(); // needs work\n await NativeApp.startup(socket, { ...opts, iModelApp: iModelAppOpts });\n\n MobileAppNotifyHandler.register(); // receives notifications from backend\n }\n}\n\n/*\n The suspend/resume lifecycle events cannot be reliably sent from the backend due to timing issues that arise when\n inter-operating with the actual suspend and resume behavior on the native side.\n Instead, they are sent directly to the browser here from platform-specific code.\n*/\nfunction attachDirectEventCallbacks() {\n (window as any)._imodeljs_rpc_lifecycle = (evt: \"suspend\" | \"resume\") => {\n if (evt === \"suspend\") {\n MobileApp.onEnterBackground.raiseEvent();\n } else if (evt === \"resume\") {\n MobileApp.onEnterForeground.raiseEvent();\n }\n };\n}\n"]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module OIDC
|
|
3
|
-
*/
|
|
4
|
-
import { AccessToken } from "@itwin/core-bentley";
|
|
5
|
-
import { AuthorizationClient } from "@itwin/core-common";
|
|
6
|
-
/** Utility to provide and cache auth tokens from native mobile apps to IModelApp.
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
export declare class MobileAuthorizationFrontend implements AuthorizationClient {
|
|
10
|
-
private _accessToken;
|
|
11
|
-
private _expirationDate;
|
|
12
|
-
private _expiryBuffer;
|
|
13
|
-
private _fetchingToken;
|
|
14
|
-
private get _hasExpired();
|
|
15
|
-
getAccessToken(): Promise<AccessToken>;
|
|
16
|
-
setAccessToken(accessToken?: string, expirationDate?: string): void;
|
|
17
|
-
}
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module OIDC
|
|
3
|
+
*/
|
|
4
|
+
import { AccessToken } from "@itwin/core-bentley";
|
|
5
|
+
import { AuthorizationClient } from "@itwin/core-common";
|
|
6
|
+
/** Utility to provide and cache auth tokens from native mobile apps to IModelApp.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare class MobileAuthorizationFrontend implements AuthorizationClient {
|
|
10
|
+
private _accessToken;
|
|
11
|
+
private _expirationDate;
|
|
12
|
+
private _expiryBuffer;
|
|
13
|
+
private _fetchingToken;
|
|
14
|
+
private get _hasExpired();
|
|
15
|
+
getAccessToken(): Promise<AccessToken>;
|
|
16
|
+
setAccessToken(accessToken?: string, expirationDate?: string): void;
|
|
17
|
+
}
|
|
18
18
|
//# sourceMappingURL=MobileAuthorizationFrontend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileAuthorizationFrontend.d.ts","sourceRoot":"","sources":["../../../src/frontend/MobileAuthorizationFrontend.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;GAEG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,KAAK,WAAW,GAEtB;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"MobileAuthorizationFrontend.d.ts","sourceRoot":"","sources":["../../../src/frontend/MobileAuthorizationFrontend.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;GAEG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,KAAK,WAAW,GAEtB;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAwB5C,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;CAIpE"}
|