diff --git a/.github/workflows/publish_reality-data-client-dev.yml b/.github/workflows/publish_reality-data-client-dev.yml index 4ae2d8bf..86c8a968 100644 --- a/.github/workflows/publish_reality-data-client-dev.yml +++ b/.github/workflows/publish_reality-data-client-dev.yml @@ -26,6 +26,14 @@ jobs: with: version: 9 + - name: Install reality-capture dependencies + working-directory: ./typescript/packages/reality-capture + run: pnpm install --frozen-lockfile=true + + - name: Build reality-capture + working-directory: ./typescript/packages/reality-capture + run: pnpm build + - name: Install dependencies working-directory: ./typescript/packages/reality-data-client run: pnpm install --frozen-lockfile=true diff --git a/.github/workflows/publish_reality-data-client.yml b/.github/workflows/publish_reality-data-client.yml index 9b37e522..62effd25 100644 --- a/.github/workflows/publish_reality-data-client.yml +++ b/.github/workflows/publish_reality-data-client.yml @@ -26,6 +26,14 @@ jobs: with: version: 9 + - name: Install reality-capture dependencies + working-directory: ./typescript/packages/reality-capture + run: pnpm install --frozen-lockfile=true + + - name: Build reality-capture + working-directory: ./typescript/packages/reality-capture + run: pnpm build + - name: Install dependencies working-directory: ./typescript/packages/reality-data-client run: pnpm install --frozen-lockfile=true diff --git a/.github/workflows/reality-data-client-build-and-test.yml b/.github/workflows/reality-data-client-build-and-test.yml index 5ba2185b..17e27182 100644 --- a/.github/workflows/reality-data-client-build-and-test.yml +++ b/.github/workflows/reality-data-client-build-and-test.yml @@ -54,6 +54,14 @@ jobs: with: node-version: ${{ inputs.node-version }} + - name: Install reality-capture dependencies + working-directory: ./typescript/packages/reality-capture + run: pnpm install --frozen-lockfile=true + + - name: Build reality-capture + working-directory: ./typescript/packages/reality-capture + run: pnpm build + - name: Install dependencies working-directory: ./typescript/packages/reality-data-client env: diff --git a/.gitignore b/.gitignore index d620c148..c07dc253 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ coverage/ .idea/ *.configStore/ dist/ +*.tsbuildinfo diff --git a/typescript/examples/package.json b/typescript/examples/package.json index 70273c1a..5d6597d8 100644 --- a/typescript/examples/package.json +++ b/typescript/examples/package.json @@ -17,7 +17,6 @@ "license": "MIT", "dependencies": { "@itwin/reality-capture": "file:../packages/reality-capture", - "@itwin/reality-data-client": "file:../packages/reality-data-client", "@itwin/service-authorization": "^2.0.0", "dotenv": "^16.0.3" }, diff --git a/typescript/examples/pnpm-lock.yaml b/typescript/examples/pnpm-lock.yaml index eb3510d1..bedd4a4d 100644 --- a/typescript/examples/pnpm-lock.yaml +++ b/typescript/examples/pnpm-lock.yaml @@ -10,20 +10,17 @@ importers: dependencies: '@itwin/reality-capture': specifier: file:../packages/reality-capture - version: file:../packages/reality-capture(@itwin/core-bentley@5.10.1) - '@itwin/reality-data-client': - specifier: file:../packages/reality-data-client - version: file:../packages/reality-data-client(@itwin/core-bentley@5.10.1) + version: file:../packages/reality-capture(@itwin/core-bentley@5.10.3) '@itwin/service-authorization': specifier: ^2.0.0 - version: 2.1.1(@itwin/core-bentley@5.10.1) + version: 2.1.2(@itwin/core-bentley@5.10.3) dotenv: specifier: ^16.0.3 version: 16.6.1 devDependencies: '@types/node': specifier: ^20.8.0 - version: 20.19.42 + version: 20.19.43 eslint: specifier: ^8.52.0 version: 8.57.1 @@ -83,12 +80,12 @@ packages: resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/storage-blob@12.32.0': - resolution: {integrity: sha512-80LzSNnFQye2LCCBFghAJS6jJQJ7N4bfgZ6qDMgVGRtugZ7TLDKQZ2hczMigmZH3jAcMRdma/IygsC5+0gT7Tw==} - engines: {node: '>=20.0.0'} + '@azure/storage-blob@12.33.0': + resolution: {integrity: sha512-2SX8oP8PyblUcAFZSg39c8Ls+tFjavM6sBeV+qpw33mRzRhI/5hrFJmJ/x0H9xx5l6ECPvgSP8uPxqTeVbHNIA==} + engines: {node: '>=22.0.0'} - '@azure/storage-common@12.4.0': - resolution: {integrity: sha512-kNhJKMxQb374KOVt63CZnGIpDcrKNzJeyANLJymxE9mCJSdRGzb+Iv9oSIiCj6tNMLypr530b9ObOiA/5OvwOg==} + '@azure/storage-common@12.4.1': + resolution: {integrity: sha512-t14unw/WofGDUi7TKJrsyXyPsN+NLgRm7hMaq0llxNmTIzt7f257+6LE6FKIJPh88zLj6M7LPvzve0fEYg/L3A==} engines: {node: '>=20.0.0'} '@eslint-community/eslint-utils@4.9.1': @@ -122,31 +119,21 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@itwin/core-bentley@5.10.1': - resolution: {integrity: sha512-wJj+Zzcd3DamN1jVRNtM91PnI0lXbC8IrgpcNlUH9suwUp+91epHPTgJOYq6/VSanNfQRE4Nq7j5h9cfH+X7hg==} + '@itwin/core-bentley@5.10.3': + resolution: {integrity: sha512-kaPmDsI+VtqrCPujQ5FULpQFDqHBtQz5nFN01tAjTSAEsIGrE1OFnDjN+TMXRFfhO7huSy+hikhz8HZNsKKdog==} '@itwin/reality-capture@file:../packages/reality-capture': resolution: {directory: ../packages/reality-capture, type: directory} peerDependencies: '@itwin/core-bentley': ^5.0.0 - '@itwin/reality-data-client@1.4.0': - resolution: {integrity: sha512-0XUBiOz02TcXIdmSPfqKJCAiitdIYzlJxd1ZksvJLfxNBj7Dt9eM5l7RKR3kOv+m81tNIo+KFIKykZO8T/IAOw==} - peerDependencies: - '@itwin/core-bentley': ^4.0.0 || ^5.0.0 - - '@itwin/reality-data-client@file:../packages/reality-data-client': - resolution: {directory: ../packages/reality-data-client, type: directory} - peerDependencies: - '@itwin/core-bentley': ^4.0.0 || ^5.0.0 - - '@itwin/service-authorization@2.1.1': - resolution: {integrity: sha512-IqW/ALUccCHhQDM7HqRTNCHsoerioZsSPKf3AI054N2coEf59vYg5MqiSfaKGRMwkDM7C952kDC+M5BL4kA8qQ==} + '@itwin/service-authorization@2.1.2': + resolution: {integrity: sha512-ztwuLN3fBbzO2dXv1aOwUd6ghMLmnUuurZI9LZQ3EtSRqv0wt/muje6S+knF1Q93NirsrhikKorjjE8GqQg+wQ==} peerDependencies: '@itwin/core-bentley': ^5.0.0 - '@nodable/entities@2.1.1': - resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} + '@nodable/entities@2.2.0': + resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -177,8 +164,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.19.42': - resolution: {integrity: sha512-5L7SUaFC1RyDraj2yRhyBzHTobyXHmohD100CChNtyPyleoq37Mqab5Gn8XEKI04dfN/oqPdpHk38MgcQWHbZg==} + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} '@types/validator@13.15.10': resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} @@ -187,16 +174,16 @@ packages: resolution: {integrity: sha512-jIXhD0eWQ1JA6ln/5Dltyx22UxWNrw0hZmhy2rlv6m6KgF7kplHx3g0fzi09lNmTJQRR91OlemYp3xFnvDK9og==} engines: {node: '>=20.0.0'} - '@ungap/structured-clone@1.3.1': - resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@ungap/structured-clone@1.3.2': + resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -219,14 +206,17 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@1.17.0: - resolution: {integrity: sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==} + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -390,8 +380,8 @@ packages: fast-xml-builder@1.2.0: resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} - fast-xml-parser@5.8.0: - resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} + fast-xml-parser@5.9.3: + resolution: {integrity: sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==} hasBin: true fastq@1.20.1: @@ -425,8 +415,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} fs.realpath@1.0.0: @@ -541,14 +531,17 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-unsafe@1.0.1: + resolution: {integrity: sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} jose@4.15.9: resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} - js-yaml@4.2.0: - resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true json-buffer@3.0.1: @@ -581,8 +574,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.13.6: - resolution: {integrity: sha512-NdB6O6QvlGMCoG003m0YIKG2+Xw7DjmCZhmc1RH+K6HncADUbRf8TZeLegxBBN1VFyPHcNpPTKpIhYLXzJVy1Q==} + libphonenumber-js@1.13.7: + resolution: {integrity: sha512-rvr3HIMdOgzhz1RFGjftji+wjoAFlzhqCNqJOU/MKTZQ8d9NZxAR/tI+0weDicyoucqVR0U1GCniqHJ0f8aM2A==} limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} @@ -704,8 +697,8 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-expression-matcher@1.5.0: - resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + path-expression-matcher@1.6.1: + resolution: {integrity: sha512-h7bxdzhHk8Knyc4Tj+jMaa7fEEoUJy7p1qtbVgkYg1Uhpe5Np5VuGXCRZnkZvU+Q42M1vStt0ifa3ueykRJPmQ==} engines: {node: '>=14.0.0'} path-is-absolute@1.0.1: @@ -770,8 +763,8 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - semver@7.8.3: - resolution: {integrity: sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -791,8 +784,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.3.0: - resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + strnum@2.4.1: + resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -924,7 +917,7 @@ snapshots: '@azure/core-xml@1.5.1': dependencies: - fast-xml-parser: 5.8.0 + fast-xml-parser: 5.9.3 tslib: 2.8.1 '@azure/logger@1.3.0': @@ -934,7 +927,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/storage-blob@12.32.0': + '@azure/storage-blob@12.33.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 @@ -947,13 +940,13 @@ snapshots: '@azure/core-util': 1.13.1 '@azure/core-xml': 1.5.1 '@azure/logger': 1.3.0 - '@azure/storage-common': 12.4.0(@azure/core-client@1.10.2) + '@azure/storage-common': 12.4.1(@azure/core-client@1.10.2) events: 3.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/storage-common@12.4.0(@azure/core-client@1.10.2)': + '@azure/storage-common@12.4.1(@azure/core-client@1.10.2)': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 @@ -983,7 +976,7 @@ snapshots: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -1003,46 +996,29 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@itwin/core-bentley@5.10.1': {} + '@itwin/core-bentley@5.10.3': {} - '@itwin/reality-capture@file:../packages/reality-capture(@itwin/core-bentley@5.10.1)': + '@itwin/reality-capture@file:../packages/reality-capture(@itwin/core-bentley@5.10.3)': dependencies: - '@azure/storage-blob': 12.32.0 - '@itwin/core-bentley': 5.10.1 - '@itwin/reality-data-client': 1.4.0(@itwin/core-bentley@5.10.1) - axios: 1.17.0 + '@azure/storage-blob': 12.33.0 + '@itwin/core-bentley': 5.10.3 + axios: 1.18.1 class-validator: 0.14.4 zod: 3.25.76 transitivePeerDependencies: - debug - supports-color - '@itwin/reality-data-client@1.4.0(@itwin/core-bentley@5.10.1)': - dependencies: - '@itwin/core-bentley': 5.10.1 - axios: 1.17.0 - transitivePeerDependencies: - - debug - - supports-color - - '@itwin/reality-data-client@file:../packages/reality-data-client(@itwin/core-bentley@5.10.1)': - dependencies: - '@itwin/core-bentley': 5.10.1 - axios: 1.17.0 - transitivePeerDependencies: - - debug - - supports-color - - '@itwin/service-authorization@2.1.1(@itwin/core-bentley@5.10.1)': + '@itwin/service-authorization@2.1.2(@itwin/core-bentley@5.10.3)': dependencies: - '@itwin/core-bentley': 5.10.1 + '@itwin/core-bentley': 5.10.3 got: 12.6.1 jsonwebtoken: 9.0.3 jwks-rsa: 3.2.2 transitivePeerDependencies: - supports-color - '@nodable/entities@2.1.1': {} + '@nodable/entities@2.2.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1067,11 +1043,11 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 20.19.42 + '@types/node': 20.19.43 '@types/ms@2.1.0': {} - '@types/node@20.19.42': + '@types/node@20.19.43': dependencies: undici-types: 6.21.0 @@ -1085,13 +1061,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@ungap/structured-clone@1.3.1': {} + '@ungap/structured-clone@1.3.2': {} - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn@8.16.0: {} + acorn@8.17.0: {} agent-base@6.0.2: dependencies: @@ -1114,14 +1090,16 @@ snapshots: dependencies: color-convert: 2.0.1 + anynum@1.0.1: {} + argparse@2.0.1: {} asynckit@0.4.0: {} - axios@1.17.0: + axios@1.18.1: dependencies: follow-redirects: 1.16.0 - form-data: 4.0.5 + form-data: 4.0.6 https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 transitivePeerDependencies: @@ -1168,7 +1146,7 @@ snapshots: class-validator@0.14.4: dependencies: '@types/validator': 13.15.10 - libphonenumber-js: 1.13.6 + libphonenumber-js: 1.13.7 validator: 13.15.35 color-convert@2.0.1: @@ -1252,7 +1230,7 @@ snapshots: '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.1 + '@ungap/structured-clone': 1.3.2 ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -1274,7 +1252,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.2.0 + js-yaml: 4.3.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -1288,8 +1266,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 3.4.3 esquery@1.7.0: @@ -1314,15 +1292,16 @@ snapshots: fast-xml-builder@1.2.0: dependencies: - path-expression-matcher: 1.5.0 + path-expression-matcher: 1.6.1 xml-naming: 0.1.0 - fast-xml-parser@5.8.0: + fast-xml-parser@5.9.3: dependencies: - '@nodable/entities': 2.1.1 + '@nodable/entities': 2.2.0 fast-xml-builder: 1.2.0 - path-expression-matcher: 1.5.0 - strnum: 2.3.0 + is-unsafe: 1.0.1 + path-expression-matcher: 1.6.1 + strnum: 2.4.1 xml-naming: 0.1.0 fastq@1.20.1: @@ -1350,7 +1329,7 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@4.0.5: + form-data@4.0.6: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -1488,11 +1467,13 @@ snapshots: is-path-inside@3.0.3: {} + is-unsafe@1.0.1: {} + isexe@2.0.0: {} jose@4.15.9: {} - js-yaml@4.2.0: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -1513,7 +1494,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.8.3 + semver: 7.8.5 jwa@2.0.1: dependencies: @@ -1545,7 +1526,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.13.6: {} + libphonenumber-js@1.13.7: {} limiter@1.1.5: {} @@ -1643,7 +1624,7 @@ snapshots: path-exists@4.0.0: {} - path-expression-matcher@1.5.0: {} + path-expression-matcher@1.6.1: {} path-is-absolute@1.0.1: {} @@ -1688,7 +1669,7 @@ snapshots: safe-buffer@5.2.1: {} - semver@7.8.3: {} + semver@7.8.5: {} shebang-command@2.0.0: dependencies: @@ -1702,7 +1683,9 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.3.0: {} + strnum@2.4.1: + dependencies: + anynum: 1.0.1 supports-color@7.2.0: dependencies: diff --git a/typescript/examples/src/example_modeling.ts b/typescript/examples/src/example_modeling.ts index e3c99fcd..4b404d51 100644 --- a/typescript/examples/src/example_modeling.ts +++ b/typescript/examples/src/example_modeling.ts @@ -13,10 +13,13 @@ import { ReconstructionOutputs, ExportCreate, Format, OptionsLAS, SamplingStrategy, TilingOptions, GeometricPrecision, JobCreate, JobType, JobState, Progress, getAppropriateService, RealityDataHandler, Options3DTiles, BucketDataHandler, AdjustmentConstraints, - LODScope + LODScope, + RealityDataCreate, + Type, + RealityData } from "@itwin/reality-capture"; -import { RealityDataClientOptions, RealityDataAccessClient, ITwinRealityData } from "@itwin/reality-data-client"; import path from "path"; +import * as fs from "fs"; export async function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } @@ -41,7 +44,7 @@ async function monitorJob(realityCaptureService: RealityCaptureService, jobId: s } } -async function runFillImageProperties(realityCaptureService: RealityCaptureService, imagesRealityData: ITwinRealityData, fipJobName: string, iTwinId: string): Promise { +async function runFillImageProperties(realityCaptureService: RealityCaptureService, imagesRealityData: RealityData, fipJobName: string, iTwinId: string): Promise { // Submit FillImageProperties job to get a context scene from the images let fipInputs: FillImagePropertiesInputs = { imageCollections: [imagesRealityData.id] }; let fipOutputs = [FillImagePropertiesOutputsCreate.SCENE]; @@ -179,19 +182,17 @@ async function runModelingExample() { const bucketDataHandler = new BucketDataHandler(authorizationClient); console.log("Bucket Data handler initialized"); - const realityDataClientOptions: RealityDataClientOptions = { - authorizationClient: authorizationClient, - baseUrl: "https://api.bentley.com/reality-management/reality-data", - }; - const realityDataClient = new RealityDataAccessClient(realityDataClientOptions); - console.log("Reality Data Client initialized"); - try { + if (!fs.existsSync(imagesPath)) { + throw new Error(imagesPath + " does not exist"); + } console.log("Upload images in ", iTwinId); - const realityData = new ITwinRealityData(realityDataClient, undefined, iTwinId); - realityData.displayName = imagesRealityDataName; - realityData.type = "CCImageCollection"; - const createdRealityData = await realityDataClient.createRealityData("", iTwinId, realityData); + const realityDataCreate: RealityDataCreate = { iTwinId: iTwinId, displayName: imagesRealityDataName, type: Type.CC_IMAGE_COLLECTION }; + const response = await realityCaptureService.createRealityData(realityDataCreate); + if(response.isError()) { + throw new Error("Failed to create reality data : " + response.error!.error.message); + } + const createdRealityData = response.value!; const uploadResponse = await realityDataHandler.uploadData(createdRealityData.id, imagesPath, "", iTwinId); if (uploadResponse.isError()) { throw new Error("Failed to upload reality data : " + uploadResponse.error!.error.message); diff --git a/typescript/examples/src/example_upload_reality_data.ts b/typescript/examples/src/example_upload_reality_data.ts index 571db76b..d4218069 100644 --- a/typescript/examples/src/example_upload_reality_data.ts +++ b/typescript/examples/src/example_upload_reality_data.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as dotenv from "dotenv"; +import * as fs from "fs"; import { ServiceAuthorizationClient } from "@itwin/service-authorization"; -import { RealityDataHandler } from "@itwin/reality-capture"; -import { RealityDataClientOptions, RealityDataAccessClient, ITwinRealityData } from "@itwin/reality-data-client"; +import { RealityCaptureService, RealityDataCreate, RealityDataHandler, Type } from "@itwin/reality-capture"; export async function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } @@ -39,31 +39,31 @@ async function runUploadExample() { const realityDataHandler = new RealityDataHandler(authorizationClient); console.log("Reality Data handler initialized"); - const realityDataClientOptions: RealityDataClientOptions = { - authorizationClient: authorizationClient, - baseUrl: "https://api.bentley.com/reality-management/reality-data", - }; - const realityDataClient = new RealityDataAccessClient(realityDataClientOptions); - console.log("Reality Data Client initialized"); + const realityCaptureService = new RealityCaptureService(authorizationClient); + console.log("Reality Capture service initialized"); try { + if(!fs.existsSync(imagesPath)) { + throw new Error(imagesPath + " does not exist"); + } + console.log("Upload images in ", iTwinId); - const realityData = new ITwinRealityData(realityDataClient, undefined, iTwinId); - realityData.displayName = imagesName; - realityData.type = "CCImageCollection"; - const createdRealityData = await realityDataClient.createRealityData("", iTwinId, realityData); + const realityDataCreate: RealityDataCreate = { iTwinId: iTwinId, displayName: imagesName, type: Type.CC_IMAGE_COLLECTION }; + const createdRealityDataResponse = await realityCaptureService.createRealityData(realityDataCreate); + if (createdRealityDataResponse.isError()) { + throw new Error("Failed to create reality data : " + createdRealityDataResponse.error!.error.message); + } + const createdRealityData = createdRealityDataResponse.value!; const response = await realityDataHandler.uploadData(createdRealityData.id, imagesPath, "", iTwinId); if (response.isError()) { - console.log("Failed to upload reality data : " + response.error!.error.message); - return; + throw new Error("Failed to upload reality data : " + response.error!.error.message); } console.log("Successfully uploaded images") console.log("Downloading images in ", outputPath); const responseDownload = await realityDataHandler.downloadData(createdRealityData.id, outputPath, "", iTwinId); if (responseDownload.isError()) { - console.log("Failed to download reality data : " + responseDownload.error!.error.message); - return; + throw new Error("Failed to download reality data : " + responseDownload.error!.error.message); } console.log("Successfully downloaded images"); } diff --git a/typescript/packages/reality-capture/README.md b/typescript/packages/reality-capture/README.md index 07279447..e21401c9 100644 --- a/typescript/packages/reality-capture/README.md +++ b/typescript/packages/reality-capture/README.md @@ -4,6 +4,7 @@ reality-capture is a typescript package that allows any user to interact with Be - [Reality Modeling](https://developer.bentley.com/apis/contextcapture/) - [Reality Analysis](https://developer.bentley.com/apis/realitydataanalysis/) +- [Reality Management](https://developer.bentley.com/apis/reality-management/) ## Building locally diff --git a/typescript/packages/reality-capture/package-lock.json b/typescript/packages/reality-capture/package-lock.json index 892f513d..952aa1ca 100644 --- a/typescript/packages/reality-capture/package-lock.json +++ b/typescript/packages/reality-capture/package-lock.json @@ -1,17 +1,15 @@ { "name": "@itwin/reality-capture", - "version": "1.6.0", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@itwin/reality-capture", - "version": "1.6.0", + "version": "2.0.0", "license": "MIT", "dependencies": { "@azure/storage-blob": "^12.15.0", - "@itwin/reality-data-client": "^1.5.0", - "axios": "^1.18.0", "class-validator": "^0.14.0", "zod": "^3.22.2" }, @@ -1003,6 +1001,7 @@ "version": "5.11.2", "resolved": "https://registry.npmjs.org/@itwin/core-bentley/-/core-bentley-5.11.2.tgz", "integrity": "sha512-KljHK348zH1HCowm66MZi4PLl7Nas6iHJoxLjfsUmhtEpRr99zuEISkETRainUggDXYmz5CSJhM1ndias1ldAA==", + "dev": true, "license": "MIT" }, "node_modules/@itwin/core-common": { @@ -1032,18 +1031,6 @@ "flatbuffers": "~1.12.0" } }, - "node_modules/@itwin/reality-data-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@itwin/reality-data-client/-/reality-data-client-1.5.1.tgz", - "integrity": "sha512-QmMP5oK6oIrqOH8Pq56rqLI+QSRQpuDlV2nB3yLNGgfBhgrSSMPeKjbUJ5nzAfPE7HO3r5n5Z854grCdfPBz8w==", - "license": "MIT", - "dependencies": { - "axios": "^1.18.0" - }, - "peerDependencies": { - "@itwin/core-bentley": "^4.0.0 || ^5.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2004,49 +1991,6 @@ "node": ">=12" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", - "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/axios/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/axios/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2153,19 +2097,6 @@ "node": ">=8" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2366,18 +2297,6 @@ "dev": true, "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -2574,15 +2493,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/diff": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", @@ -2619,20 +2529,6 @@ "node": ">=6.0.0" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2667,51 +2563,16 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -3295,26 +3156,6 @@ "dev": true, "license": "ISC" }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -3332,22 +3173,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", - "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.4", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -3395,6 +3220,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3420,30 +3246,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3454,19 +3256,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -3584,18 +3373,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3620,33 +3397,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -3678,6 +3428,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4497,15 +4248,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -4549,27 +4291,6 @@ "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "10.2.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", @@ -5358,15 +5079,6 @@ "node": ">=8" } }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", diff --git a/typescript/packages/reality-capture/package.json b/typescript/packages/reality-capture/package.json index 5e1131c9..0310a2a1 100644 --- a/typescript/packages/reality-capture/package.json +++ b/typescript/packages/reality-capture/package.json @@ -1,7 +1,7 @@ { "name": "@itwin/reality-capture", - "version": "1.6.0", - "description": "This package contains a SDK for Reality Modeling, Reality Analysis and Reality Conversion iTwin APIs as well as Reality Management API utils. It provides classes, functions and examples to upload local data to Reality Management, run jobs and download the results.", + "version": "2.0.0", + "description": "This package contains a SDK for Reality Modeling, Reality Analysis, Reality Conversion and Reality Management iTwin APIs as well as Reality Management API utils. It provides classes, functions and examples to upload local data to Reality Management, run jobs and download the results.", "main": "lib/cjs/index.node.js", "module": "lib/esm/index.web.js", "types": "lib/cjs/index.node.d.ts", @@ -36,11 +36,15 @@ "pack": "npm pack --pack-destination ./lib" }, "keywords": [ - "typescript", - "sdk", - "reality-capture", + "azure", "bentley", - "azure" + "reality-capture", + "reality management", + "reality modeling", + "reality analysis", + "reality conversion", + "sdk", + "typescript" ], "author": { "name": "Bentley Systems, Inc.", @@ -49,8 +53,6 @@ "license": "MIT", "dependencies": { "@azure/storage-blob": "^12.15.0", - "@itwin/reality-data-client": "^1.5.0", - "axios": "^1.18.0", "class-validator": "^0.14.0", "zod": "^3.22.2" }, diff --git a/typescript/packages/reality-capture/pnpm-lock.yaml b/typescript/packages/reality-capture/pnpm-lock.yaml index 68ffbe50..b76ae16c 100644 --- a/typescript/packages/reality-capture/pnpm-lock.yaml +++ b/typescript/packages/reality-capture/pnpm-lock.yaml @@ -11,12 +11,6 @@ importers: '@azure/storage-blob': specifier: ^12.15.0 version: 12.32.0 - '@itwin/reality-data-client': - specifier: ^1.5.0 - version: 1.5.0(@itwin/core-bentley@5.10.0) - axios: - specifier: ^1.18.0 - version: 1.18.0 class-validator: specifier: ^0.14.0 version: 0.14.4 @@ -266,11 +260,6 @@ packages: '@itwin/core-geometry@5.10.0': resolution: {integrity: sha512-T/lRcONx4QK3RxTatBGyLqXn+H9KGUKIynkZxkxiLFUV4/4q87V8wwBPq8ufuJU4Wnf/xX88RvNe7dLMlYzm+Q==} - '@itwin/reality-data-client@1.5.0': - resolution: {integrity: sha512-VSmUbVeU/xJvwZvYGRkLX4FCCiPZ1/UuJFKDeRAoBOmuOleXvXnLiF3LMoTWAO0a6UihfoRKlBa85TRXjRBESg==} - peerDependencies: - '@itwin/core-bentley': ^4.0.0 || ^5.0.0 - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -503,10 +492,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -577,12 +562,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.18.0: - resolution: {integrity: sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -625,10 +604,6 @@ packages: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -684,10 +659,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -743,10 +714,6 @@ packages: resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} engines: {node: '>=8'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - diff@4.0.4: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} @@ -767,10 +734,6 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -787,22 +750,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -920,15 +871,6 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - follow-redirects@1.16.0: - resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} @@ -937,10 +879,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} @@ -966,18 +904,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1016,10 +946,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1030,14 +956,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - hasha@5.2.2: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} @@ -1057,10 +975,6 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -1280,10 +1194,6 @@ packages: resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} @@ -1298,14 +1208,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - minimatch@10.2.3: resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} engines: {node: 18 || 20 || >=22} @@ -1470,10 +1372,6 @@ packages: resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} engines: {node: '>=8'} - proxy-from-env@2.1.0: - resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} - engines: {node: '>=10'} - punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -1989,7 +1887,7 @@ snapshots: '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@8.1.1) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 @@ -2020,7 +1918,7 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@8.1.1) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -2030,7 +1928,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -2055,7 +1953,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -2173,14 +2071,6 @@ snapshots: '@itwin/core-bentley': 5.10.0 flatbuffers: 1.12.0 - '@itwin/reality-data-client@1.5.0(@itwin/core-bentley@5.10.0)': - dependencies: - '@itwin/core-bentley': 5.10.0 - axios: 1.18.0 - transitivePeerDependencies: - - debug - - supports-color - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2476,12 +2366,6 @@ snapshots: acorn@8.16.0: {} - agent-base@6.0.2: - dependencies: - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - agent-base@7.1.4: {} aggregate-error@3.1.0: @@ -2539,18 +2423,6 @@ snapshots: assertion-error@2.0.1: {} - asynckit@0.4.0: {} - - axios@1.18.0: - dependencies: - follow-redirects: 1.16.0 - form-data: 4.0.5 - https-proxy-agent: 5.0.1 - proxy-from-env: 2.1.0 - transitivePeerDependencies: - - debug - - supports-color - balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -2595,11 +2467,6 @@ snapshots: package-hash: 4.0.0 write-file-atomic: 3.0.3 - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - callsites@3.1.0: {} camelcase@5.3.1: {} @@ -2652,10 +2519,6 @@ snapshots: color-name@1.1.4: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - commondir@1.0.1: {} concat-map@0.0.1: {} @@ -2704,8 +2567,6 @@ snapshots: dependencies: strip-bom: 4.0.0 - delayed-stream@1.0.0: {} - diff@4.0.4: {} diff@7.0.0: {} @@ -2720,12 +2581,6 @@ snapshots: dependencies: esutils: 2.0.3 - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - eastasianwidth@0.2.0: {} electron-to-chromium@1.5.392: {} @@ -2736,21 +2591,8 @@ snapshots: entities@4.5.0: {} - es-define-property@1.0.1: {} - es-errors@1.3.0: {} - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - es6-error@4.1.1: {} escalade@3.2.0: {} @@ -2900,8 +2742,6 @@ snapshots: flatted@3.4.2: {} - follow-redirects@1.16.0: {} - foreground-child@2.0.0: dependencies: cross-spawn: 7.0.6 @@ -2912,14 +2752,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.4 - mime-types: 2.1.35 - fromentries@1.3.2: {} fs-extra@11.3.5: @@ -2942,26 +2774,8 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.2 - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3018,20 +2832,12 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - gopd@1.2.0: {} - graceful-fs@4.2.11: {} graphemer@1.4.0: {} has-flag@4.0.0: {} - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - hasha@5.2.2: dependencies: is-stream: 2.0.1 @@ -3052,13 +2858,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -3265,8 +3064,6 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 - math-intrinsics@1.1.0: {} - md5@2.3.0: dependencies: charenc: 0.0.2 @@ -3282,12 +3079,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - minimatch@10.2.3: dependencies: brace-expansion: 5.0.6 @@ -3483,8 +3274,6 @@ snapshots: dependencies: fromentries: 1.3.2 - proxy-from-env@2.1.0: {} - punycode.js@2.3.1: {} punycode@2.3.1: {} diff --git a/typescript/packages/reality-capture/src/index.node.ts b/typescript/packages/reality-capture/src/index.node.ts index c41ea8a8..67867ed7 100644 --- a/typescript/packages/reality-capture/src/index.node.ts +++ b/typescript/packages/reality-capture/src/index.node.ts @@ -9,6 +9,7 @@ export * from "./service/error"; export * from "./service/estimation"; export * from "./service/files"; export * from "./service/job"; +export * from "./service/reality_data"; export * from "./service/response"; export * from "./service/service"; @@ -33,4 +34,4 @@ export * from "./specifications/segmentation_orthophoto"; export * from "./specifications/tiling"; export * from "./specifications/training"; export * from "./specifications/touchup"; -export * from "./specifications/water_constraints"; +export * from "./specifications/water_constraints"; \ No newline at end of file diff --git a/typescript/packages/reality-capture/src/index.web.ts b/typescript/packages/reality-capture/src/index.web.ts index c539280a..c0f0dd62 100644 --- a/typescript/packages/reality-capture/src/index.web.ts +++ b/typescript/packages/reality-capture/src/index.web.ts @@ -9,6 +9,7 @@ export * from "./service/error"; export * from "./service/estimation"; export * from "./service/files"; export * from "./service/job"; +export * from "./service/reality_data"; export * from "./service/response"; export * from "./service/service"; diff --git a/typescript/packages/reality-capture/src/service/bucket.ts b/typescript/packages/reality-capture/src/service/bucket.ts index 6338ed57..16e32180 100644 --- a/typescript/packages/reality-capture/src/service/bucket.ts +++ b/typescript/packages/reality-capture/src/service/bucket.ts @@ -1,20 +1,11 @@ import { z } from "zod"; +import { ContainerLinksSchema } from "./reality_data"; export const BucketSchema = z.object({ iTwinId: z.string().describe("iTwin Id for the bucket.") }); export type Bucket = z.infer; -export const URLSchema = z.object({ - href: z.string().describe("URL."), -}); -export type URL = z.infer; - -export const ContainerLinksSchema = z.object({ - containerUrl: URLSchema.describe("The URL of the container"), -}); -export type ContainerLinks = z.infer; - export const BucketResponseSchema = z.object({ bucket: BucketSchema.describe("Bucket information"), _links: ContainerLinksSchema.describe("The link to the container.") diff --git a/typescript/packages/reality-capture/src/service/data_handler.ts b/typescript/packages/reality-capture/src/service/data_handler.ts index 84f7c742..a45f6d63 100644 --- a/typescript/packages/reality-capture/src/service/data_handler.ts +++ b/typescript/packages/reality-capture/src/service/data_handler.ts @@ -2,14 +2,13 @@ import * as fs from "fs"; import * as path from "path"; import { ContainerClient } from "@azure/storage-blob"; import type { AuthorizationClient } from "@itwin/core-common"; -import { BentleyError } from "@itwin/core-bentley"; //TODO : ThreadPool type does not have native Node.js equivalent. Multi-thread for IO must be readapted (here, ploads and downloads are sequential. //import { ThreadPool } from "some-threadpool-lib"; import { DetailedError } from "./error"; -import { ITwinRealityData, RealityDataAccessClient, type RealityDataClientOptions } from "@itwin/reality-data-client"; import { Response } from "./response"; import { RealityCaptureService } from "./service"; import { BucketResponse } from "./bucket"; +import { ContainerDetails } from "./reality_data"; type ProgressHook = ((percent: number) => boolean) | null; @@ -104,7 +103,6 @@ class _DataHandler { static async uploadData(containerUrl: string, src: string, realityDataDst: string, progressHook: ProgressHook): Promise> { const files = _DataHandler._getFilesAndSizes(src); - const nbThreads = _DataHandler._getNbThreads(files); const totalSize = files.reduce((acc, [, size]) => acc + size, 0); let proceed = true; const uploadedValues: { [k: string]: number } = {}; @@ -190,63 +188,45 @@ class _DataHandler { } export class RealityDataHandler { - private _realityDataClient: RealityDataAccessClient; + private _realityCaptureService: RealityCaptureService; private _progressHook: ProgressHook; constructor(authorizationClient: AuthorizationClient, kwargs?: any) { const env = kwargs?.env; - let url = ""; - if (env === "dev" || env === "qa") - url = "https://" + env + "-api.bentley.com/reality-management/reality-data"; - else - url = "https://api.bentley.com/reality-management/reality-data"; - const realityDataClientOptions: RealityDataClientOptions = { - authorizationClient: authorizationClient, - baseUrl: url, - }; - this._realityDataClient = new RealityDataAccessClient(realityDataClientOptions); + this._realityCaptureService = new RealityCaptureService(authorizationClient, { env }); this._progressHook = null; } - private async _getContainerUrlFromRealityDataId(realityDataId: string, iTwinId?: string, writeAccess: boolean = false): Promise> { - let realityData: ITwinRealityData; - try { - realityData = await this._realityDataClient.getRealityData("", iTwinId, realityDataId); - } - catch (error: any) { - console.log("Cannot find reality data id " + realityDataId + " in iTwin " + iTwinId); - if (error instanceof BentleyError) - return new Response(error.errorNumber, { error: { code: error.name, message: error.message } }, ""); - else - return new Response(520, { error: { code: "UnknownError", message: "Unknown error" } }, ""); + private async _getContainerUrlFromRealityDataId(realitydataId: string, iTwinId?: string, readOnly: boolean = true): Promise> { + if (!readOnly) { + return this._realityCaptureService.getRealityDataWriteAccess(realitydataId, iTwinId); } - const url = await realityData.getBlobUrl("", "", writeAccess); - return new Response(200, null, url.toString()); + return this._realityCaptureService.getRealityDataReadAccess(realitydataId, iTwinId); } async uploadData(realityDataId: string, src: string, realityDataDst = "", iTwinId?: string): Promise> { - const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, true); + const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, false); if (urlResponse.isError()) { return new Response(urlResponse.status_code, urlResponse.error); } - const resp = await _DataHandler.uploadData(urlResponse.value!, src, realityDataDst, this._progressHook); + const resp = await _DataHandler.uploadData(urlResponse.value!._links.containerUrl.href, src, realityDataDst, this._progressHook); return resp; } async downloadData(realityDataId: string, dst: string, realityDataSrc = "", iTwinId?: string): Promise> { - const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, false); + const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, true); if (urlResponse.isError()) { return new Response(urlResponse.status_code, urlResponse.error); } - return await _DataHandler.downloadData(urlResponse.value!, dst, realityDataSrc, this._progressHook); + return await _DataHandler.downloadData(urlResponse.value!._links.containerUrl.href, dst, realityDataSrc, this._progressHook); } async listData(realityDataId: string, iTwinId?: string): Promise> { - const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, false); + const urlResponse = await this._getContainerUrlFromRealityDataId(realityDataId, iTwinId, true); if (urlResponse.isError()) { return new Response(urlResponse.status_code, urlResponse.error, []); } - return await _DataHandler.listData(urlResponse.value!); + return await _DataHandler.listData(urlResponse.value!._links.containerUrl.href); } async deleteData(realityDataId: string, filesToDelete: string[], iTwinId?: string): Promise> { @@ -254,7 +234,7 @@ export class RealityDataHandler { if (urlResponse.isError()) { return new Response(urlResponse.status_code, urlResponse.error); } - return await _DataHandler.deleteData(urlResponse.value!, filesToDelete); + return await _DataHandler.deleteData(urlResponse.value!._links.containerUrl.href, filesToDelete); } setProgressHook(hook: ProgressHook): void { diff --git a/typescript/packages/reality-capture/src/service/detectors.ts b/typescript/packages/reality-capture/src/service/detectors.ts index 34c6aa0d..d2e74aa5 100644 --- a/typescript/packages/reality-capture/src/service/detectors.ts +++ b/typescript/packages/reality-capture/src/service/detectors.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { URLSchema } from "./bucket"; +import { URLSchema } from "./reality_data"; export enum DetectorExport { OBJECTS = "Objects", diff --git a/typescript/packages/reality-capture/src/service/job.ts b/typescript/packages/reality-capture/src/service/job.ts index e9da7077..91537297 100644 --- a/typescript/packages/reality-capture/src/service/job.ts +++ b/typescript/packages/reality-capture/src/service/job.ts @@ -17,12 +17,12 @@ import { WaterConstraintsSpecificationsCreateSchema, WaterConstraintsSpecificati import { TrainingS3DSpecificationsCreateSchema, TrainingS3DSpecificationsSchema } from "../specifications/training"; //import { PointCloudConversionSpecificationsCreateSchema, PointCloudConversionSpecificationsSchema } from '../specifications/point_cloud_conversion'; import { GaussianSplatsSpecificationsCreateSchema, GaussianSplatsSpecificationsSchema } from "../specifications/gaussian_splats"; -import { URLSchema } from "./bucket"; import { EvalO2DSpecificationsCreateSchema, EvalO2DSpecificationsSchema } from "../specifications/eval_o2d"; import { EvalO3DSpecificationsCreateSchema, EvalO3DSpecificationsSchema } from "../specifications/eval_o3d"; import { EvalS2DSpecificationsCreateSchema, EvalS2DSpecificationsSchema } from "../specifications/eval_s2d"; import { EvalS3DSpecificationsCreateSchema, EvalS3DSpecificationsSchema } from "../specifications/eval_s3d"; import { EvalSOrthoSpecificationsCreateSchema, EvalSOrthoSpecificationsSchema } from "../specifications/eval_sortho"; +import { URLSchema } from "./reality_data"; export enum JobType { CALIBRATION = "Calibration", @@ -187,11 +187,11 @@ export const JobSchema = z.discriminatedUnion("type", [ type: z.literal("GaussianSplats"), specifications: GaussianSplatsSpecificationsSchema, }), - /*z.object({ + z.object({ ...CommonFields, type: z.literal("ImportPointCloud"), specifications: ImportPCSpecificationsSchema, - }),*/ + }), z.object({ ...CommonFields, type: z.literal("Objects2D"), diff --git a/typescript/packages/reality-capture/src/service/reality_data.ts b/typescript/packages/reality-capture/src/service/reality_data.ts new file mode 100644 index 00000000..2f35c28e --- /dev/null +++ b/typescript/packages/reality-capture/src/service/reality_data.ts @@ -0,0 +1,204 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Bentley Systems, Incorporated. All rights reserved. +* See LICENSE.md in the project root for license terms and full copyright notice. +*--------------------------------------------------------------------------------------------*/ +import { z } from "zod"; + +export enum Classification { + TERRAIN = "Terrain", + IMAGERY = "Imagery", + PINNED = "Pinned", + MODEL = "Model", + UNDEFINED = "Undefined", +} + +export enum ContainerType { + AZURE_BLOB_SAS_URL = "AzureBlobSasUrl", +} + +export enum Access { + WRITE = "Write", + READ = "Read", +} + +export enum Prefer { + MINIMAL = "minimal", + REPRESENTATION = "representation", +} + +export enum Type { + CC_IMAGE_COLLECTION = "CCImageCollection", + THREED_TILES = "Cesium3DTiles", + COLLADA = "DAE", + CONTEXT_DETECTOR = "ContextDetector", + CONTEXT_SCENE = "ContextScene", + DGN = "DGN", + E57 = "E57", + FBX = "FBX", + GLB = "GLB", + GLTF = "GLTF", + KML = "KML", + LAS = "LAS", + LAZ = "LAZ", + LOD = "LOD", + LOD_TREE = "LODTree", + OBJ = "OBJ", + OMR = "OMR", + OPC = "OPC", + OSGB = "OSGB", + OVF = "OVF", + OVT = "OVT", + PLY = "PLY", + PNTS = "PNTS", + POD = "PointCloud", + REALITY_MESH_3D_TILES = "RealityMesh3DTiles", + SLPK = "SLPK", + SPACEYES = "SpaceEyes3D", + SUPER_MAP = "SuperMap", + S3C = "S3C", + TERRAIN_3D_TILES = "Terrain3DTiles", + TEXTURED_TIE_POINTS = "TexturedTiePoints", + THREE_SM = "3SM", + THREE_MX = "3MX", + UNSTRUCTURED_DATA = "Unstructured", + ORTHOPHOTO = "Orthophoto", + GS_PLY = "GS_PLY", + GS_SPZ = "GS_SPZ", + GS_3DT = "GS_3DT", + GEO_JSON = "GeoJSON", + SHP = "SHP" +} + +export const CoordinateSchema = z.object({ + latitude: z.number().min(-90).max(90).describe("Latitude. Latitude ranges between -90 and 90 degrees, inclusive."), + longitude: z.number().min(-180).max(180).describe("Longitude. Longitude ranges between -180 and 180 degrees, inclusive."), +}); +export type Coordinate = z.infer; + +export const ExtentSchema = z.object({ + southWest: CoordinateSchema.describe("Extent's southwest coordinate."), + northEast: CoordinateSchema.describe("Extent's northeast coordinate."), +}); +export type Extent = z.infer; + +export const CrsSchema = z.object({ + id: z.string().describe("Identifier of the coordinate reference system."), + verticalId: z.string().optional().describe("Optional identifier of the vertical coordinate reference system."), +}); +export type Crs = z.infer; + +export const AcquisitionSchema = z.object({ + startDateTime: z.coerce.date().optional().describe("ISO-8601 compliant time (UTC) that indicates when the data acquisition started. E.g. '2017-05-10T13:43:03Z'"), + endDateTime: z.coerce.date().optional().describe("ISO-8601 compliant time (UTC) that indicates when the data acquisition ended. E.g. '2017-05-10T13:43:03Z'"), + acquirer: z.string().optional().describe("Description of the acquirer."), +}); +export type Acquisition = z.infer; + +export const RealityDataBaseSchema = z.object({ + classification: z.nativeEnum(Classification).optional().describe("Specific value constrained field that indicates the nature of the reality data."), + description: z.string().optional().describe("Description of the reality data."), + tags: z.array(z.string()).optional().describe("Any strings identifier which you can assign to reality data to identify it."), + dataset: z.string().optional().describe("This field can be used to define a loose grouping of reality data. This property may not contain any control sequence such as a URL or code."), + group: z.string().optional().describe("The group can be used to define a second level of grouping. This property may not contain any control sequence such as a URL or code."), + rootDocument: z.string().optional().describe("Used to indicate the root document of the reality data."), + acquisition: AcquisitionSchema.optional().describe("Details about data acquisition."), + extent: ExtentSchema.optional().describe("The rectangular area on the Earth which encloses the reality data."), + authoring: z.boolean().optional().describe("A boolean value that is true if the data is being created. It is false if the data has been completely uploaded."), + ownerId: z.string().optional().describe("Identifier of the owner of the reality data."), + attribution: z.string().optional().describe("The attribution of the reality data."), + termsOfUse: z.string().optional().describe("Terms of use of the reality data."), + crs: CrsSchema.optional().describe("Details about the reality data's coordinate reference system.") +}); +export type RealityDataBase = z.infer; + +export const RealityDataCreateSchema = RealityDataBaseSchema.extend({ + iTwinId: z.string().describe("Id of associated iTwin."), + displayName: z.string().describe("Name of the reality data."), + type: z.nativeEnum(Type).describe("A key indicating the format of the data."), +}); +export type RealityDataCreate = z.infer; + +export const RealityDataSchema = RealityDataBaseSchema.extend({ + id: z.string().describe("Identifier of the reality data. This identifier is assigned by the service at the creation of the reality data. It is also unique."), + displayName: z.string().describe("Name of the reality data."), + createdDateTime: z.coerce.date().describe("ISO-8601 compliant time (UTC) of the creation of the reality data."), + modifiedDateTime: z.coerce.date().describe("ISO-8601 compliant time (UTC) of the last modification of the reality data."), + lastAccessedDateTime: z.coerce.date().describe("ISO-8601 compliant time (UTC) of the last access of the reality data."), + dataCenterLocation: z.string().describe("Identifies the data center location used to store the reality data."), + size: z.number().min(0).describe("The size of the reality data in Kilobytes."), + type: z.nativeEnum(Type).describe("A key indicating the format of the data."), +}); +export type RealityData = z.infer; + +export const RealityDataUpdateSchema = RealityDataBaseSchema.extend({ + iTwinId: z.string().optional().describe("Id of associated iTwin."), + displayName: z.string().optional().describe("Name of the reality data."), + type: z.nativeEnum(Type).optional().describe("A key indicating the format of the data."), +}); +export type RealityDataUpdate = z.infer; + +export const RealityDataMinimalSchema = RealityDataBaseSchema.extend({ + id: z.string().describe("Identifier of the reality data. This identifier is assigned by the service at the creation of the reality data. It is also unique."), + displayName: z.string().describe("Name of the reality data."), + type: z.nativeEnum(Type).describe("A key indicating the format of the data. The type property should be a specific indication of the format of the reality data"), +}); +export type RealityDataMinimal = z.infer; + +export const URLSchema = z.object({ + href: z.string().describe("URL."), +}); +export type URL = z.infer; + +export const NextPageLinkSchema = z.object({ + next: URLSchema.describe("Link."), +}); +export type NextPageLink = z.infer; + +export const RealityDatasSchema = z.object({ + realityData: z.array(z.union([RealityDataMinimalSchema, RealityDataSchema])).describe("Identifier of the reality data. This identifier is assigned by the service at the creation of the reality data. It is also unique."), + links: NextPageLinkSchema.describe("Next page link."), +}); +export type RealityDatas = z.infer; + +export const ContainerLinksSchema = z.object({ + containerUrl: URLSchema.describe("The URL of the container."), +}); +export type ContainerLinks = z.infer; + +export const ContainerDetailsSchema = z.object({ + type: z.nativeEnum(ContainerType).describe("Type of container."), + access: z.nativeEnum(Access).describe("Type of access user have to container."), + _links: ContainerLinksSchema.describe("The link to the container."), +}); +export type ContainerDetails = z.infer; + +export const RealityDataFilterSchema = z.object({ + iTwinId: z.string().optional().describe("Id of iTwin. The operation gets all reality data in this iTwin."), + continuationToken: z.string().optional().describe("Parameter that enables continuing to the next page of the previous paged query. This must be passed exactly as it is in the response body's _links.next property. If this is specified and $top is omitted, the next page will be the same size as the previous page."), + $top: z.number().min(1).max(1000).optional().describe("The number of reality data to get in each page."), + extent: ExtentSchema.optional().describe("Extent of the area to search, delimited by southwest and northeast coordinates."), + $orderBy: z.string().optional().describe("Parameter that enable to order reality data in ascending or descending order. Default is ascending. Example: displayName desc"), + $search: z.string().optional().describe("Search reality data."), + types: z.array(z.nativeEnum(Type)).optional().describe("List of reality data types."), + acquisitionDateTime: z.tuple([z.string().datetime(), z.string().datetime()]).optional().describe("Acquisition datetime range (start, end) in ISO-8601 compliant time (UTC)."), + createdDateTime: z.tuple([z.string().datetime(), z.string().datetime()]).optional().describe("Created datetime range (start, end) in ISO-8601 compliant time (UTC)."), + modifiedDateTime: z.tuple([z.string().datetime(), z.string().datetime()]).optional().describe("Modified datetime range (start, end) in ISO-8601 compliant time (UTC)."), + lastAccessedDateTime: z.tuple([z.string().datetime(), z.string().datetime()]).optional().describe("Last accessed datetime range (start, end) in ISO-8601 compliant time (UTC)."), + ownerId: z.string().optional().describe("Guid identifier of the owner."), + dataCenter: z.string().optional().describe("Data center location."), + tag: z.string().optional().describe("Parameter to get reality data with exact matching tags."), +}); +export type RealityDataFilter = z.infer; + +export function realityDataFilterAsParams(filter: RealityDataFilter): Record { + const params: Record = Object.fromEntries( + Object.entries(filter).filter(([, v]) => v !== undefined) + ); + + for (const key of Object.keys(params).filter(k => k.endsWith("DateTime"))) { + const [start, end] = params[key] as [string, string]; + params[key] = `${start}/${end}`; + } + + return params; +} diff --git a/typescript/packages/reality-capture/src/service/service.ts b/typescript/packages/reality-capture/src/service/service.ts index a5bf89c3..18d3e02c 100644 --- a/typescript/packages/reality-capture/src/service/service.ts +++ b/typescript/packages/reality-capture/src/service/service.ts @@ -1,4 +1,3 @@ -import axios, { AxiosInstance, AxiosResponse } from "axios"; import type { AuthorizationClient } from "@itwin/core-common"; import { BucketResponse } from "./bucket"; import { @@ -22,10 +21,10 @@ import { Jobs, } from "./job"; import { DetailedErrorResponse, DetailedError } from "./error"; +import { ContainerDetails, Prefer, RealityData, RealityDataCreate, RealityDataFilter, realityDataFilterAsParams, RealityDatas, RealityDataUpdate } from "./reality_data"; export class RealityCaptureService { private _authorizationClient: AuthorizationClient; - private _axios: AxiosInstance; private _serviceUrl: string; private _additionalUserAgent: string; @@ -34,7 +33,6 @@ export class RealityCaptureService { kwargs?: { env?: string; user_agent?: string }, ) { this._authorizationClient = authorizationClient; - this._axios = axios.create(); const env = kwargs?.env; if (env === "qa") { this._serviceUrl = "https://qa-api.bentley.com/"; @@ -68,6 +66,10 @@ export class RealityCaptureService { return this._serviceUrl + "reality-analysis/"; } + private _getManagementUrl() { + return this._serviceUrl + "reality-management/"; + } + private _getCorrectUrl(service: Service): string { switch (service) { case Service.MODELING: @@ -83,6 +85,77 @@ export class RealityCaptureService { return `Service response is ill-formed: ${JSON.stringify(response.data)}. Exception: ${exception}`; } + private _buildUrl(url: string, params?: Record): string { + if (!params) { + return url; + } + const searchParams = new URLSearchParams(); + for (const [key, value] of Object.entries(params)) { + if (value === undefined || value === null) { + continue; + } + if (Array.isArray(value)) { + // Match axios' default params serialization: repeat the key for each + // array element (e.g. types=LAS&types=E57) instead of comma-joining. + for (const item of value) { + if (item !== undefined && item !== null) { + searchParams.append(key, String(item)); + } + } + } else { + searchParams.append(key, String(value)); + } + } + const queryString = searchParams.toString(); + if (!queryString) { + return url; + } + return url + (url.includes("?") ? "&" : "?") + queryString; + } + + private async _parseBody(response: globalThis.Response): Promise { + const text = await response.text(); + if (!text) { + return null; + } + try { + return JSON.parse(text); + } catch { + return text; + } + } + + /** + * Thin wrapper around the native fetch API used by every service call. + * Mirrors the shape previously relied upon from HTTP client responses/errors so + * that `_handleError` can stay unchanged: on success it returns + * `{ status, data }`; on a non-2xx HTTP response it throws + * `{ response: { status, data } }`. + */ + private async _request( + method: "GET" | "POST" | "PATCH" | "DELETE", + url: string, + options?: { params?: Record; headers?: Record; body?: any }, + ): Promise<{ status: number; data: any }> { + const finalUrl = this._buildUrl(url, options?.params); + const init: RequestInit = { + method, + headers: options?.headers, + }; + if (options?.body !== undefined) { + init.body = JSON.stringify(options.body); + } + + const response = await fetch(finalUrl, init); + const data = await this._parseBody(response); + + if (!response.ok) { + throw { response: { status: response.status, data } }; + } + + return { status: response.status, data }; + } + async getJobs( service: Service, filters: string, @@ -91,7 +164,7 @@ export class RealityCaptureService { ): Promise> { const url = this._getCorrectUrl(service); try { - const resp = await this._axios.get(url + "/jobs", { + const resp = await this._request("GET", url + "jobs", { params: { $filter: filters, $top: top, continuationToken }, headers: await this._getHeader("v2"), }); @@ -104,9 +177,7 @@ export class RealityCaptureService { async submitJob(job: JobCreate): Promise> { const url = this._getCorrectUrl(getAppropriateService(job.type)); try { - const resp = await this._axios.post(url + "/jobs", job, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url + "jobs", { body: job, headers: await this._getHeader("v2") }); return new Response(resp.status, null, resp.data.job as Job); } catch (error: any) { return this._handleError(error); @@ -116,7 +187,7 @@ export class RealityCaptureService { async getJob(jobId: string, service: Service): Promise> { const url = this._getCorrectUrl(service); try { - const resp = await this._axios.get(url + "/jobs/" + jobId, { + const resp = await this._request("GET", url + "jobs/" + jobId, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data.job as Job); @@ -131,7 +202,7 @@ export class RealityCaptureService { ): Promise> { const url = this._getCorrectUrl(service); try { - const resp = await this._axios.get(url + `/jobs/${jobId}/messages`, { + const resp = await this._request("GET", url + `jobs/${jobId}/messages`, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data.messages as Messages); @@ -146,7 +217,7 @@ export class RealityCaptureService { ): Promise> { const url = this._getCorrectUrl(service); try { - const resp = await this._axios.get(url + `/jobs/${jobId}/progress`, { + const resp = await this._request("GET", url + `jobs/${jobId}/progress`, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data.progress as Progress); @@ -158,7 +229,7 @@ export class RealityCaptureService { async cancelJob(jobId: string, service: Service): Promise> { const url = this._getCorrectUrl(service); try { - const resp = await this._axios.delete(url + `/jobs/${jobId}`, { + const resp = await this._request("DELETE", url + `jobs/${jobId}`, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data.job as Job); @@ -174,9 +245,7 @@ export class RealityCaptureService { getAppropriateService(estimationCreate.type), ); try { - const resp = await this._axios.post(url + "/costs", estimationCreate, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url + "costs", { body: estimationCreate, headers: await this._getHeader("v2") }); return new Response( resp.status, null, @@ -190,7 +259,7 @@ export class RealityCaptureService { async getBucket(itwinId: string): Promise> { const url = this._getModelingUrl() + `itwins/${itwinId}/bucket`; try { - const resp = await this._axios.get(url, { + const resp = await this._request("GET", url, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data as BucketResponse); @@ -202,7 +271,7 @@ export class RealityCaptureService { async getServiceFiles(): Promise> { const url = this._getModelingUrl() + "files"; try { - const resp = await this._axios.get(url, { + const resp = await this._request("GET", url, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data as Files); @@ -216,7 +285,7 @@ export class RealityCaptureService { ): Promise> { const url = this._getAnalysisUrl() + "detectors"; try { - const resp = await this._axios.get(url, { + const resp = await this._request("GET", url, { params: detectorsFilter ? { $filter: detectorsFilter } : undefined, headers: await this._getHeader("v2"), }); @@ -234,7 +303,7 @@ export class RealityCaptureService { const url = this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}`; try { - const resp = await this._axios.get(url, { + const resp = await this._request("GET", url, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, resp.data as DetectorResponse); @@ -248,9 +317,7 @@ export class RealityCaptureService { ): Promise> { const url = this._getAnalysisUrl() + "detectors"; try { - const resp = await this._axios.post(url, detectorCreate, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url, { body: detectorCreate, headers: await this._getHeader("v2") }); return new Response(resp.status, null, resp.data as DetectorResponse); } catch (error: any) { return this._handleError(error); @@ -264,9 +331,7 @@ export class RealityCaptureService { const url = this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}`; try { - const resp = await this._axios.patch(url, detectorUpdate, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("PATCH", url, { body: detectorUpdate, headers: await this._getHeader("v2") }); return new Response(resp.status, null, resp.data as DetectorResponse); } catch (error: any) { return this._handleError(error); @@ -277,7 +342,7 @@ export class RealityCaptureService { const url = this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}`; try { - const resp = await this._axios.delete(url, { + const resp = await this._request("DELETE", url, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, null); @@ -294,9 +359,7 @@ export class RealityCaptureService { this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}/versions`; try { - const resp = await this._axios.post(url, versionCreate, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url, { body: versionCreate, headers: await this._getHeader("v2") }); return new Response( resp.status, null, @@ -315,7 +378,7 @@ export class RealityCaptureService { this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}/versions/${encodeURIComponent(detectorVersion)}`; try { - const resp = await this._axios.delete(url, { + const resp = await this._request("DELETE", url, { headers: await this._getHeader("v2"), }); return new Response(resp.status, null, null); @@ -332,9 +395,7 @@ export class RealityCaptureService { this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}/versions/${encodeURIComponent(versionNumber)}/publish`; try { - const resp = await this._axios.post(url, undefined, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url, { headers: await this._getHeader("v2") }); return new Response(resp.status, null, null); } catch (error: any) { return this._handleError(error); @@ -349,9 +410,7 @@ export class RealityCaptureService { this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}/versions/${encodeURIComponent(versionNumber)}/unpublish`; try { - const resp = await this._axios.post(url, undefined, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url, { headers: await this._getHeader("v2") }); return new Response(resp.status, null, null); } catch (error: any) { return this._handleError(error); @@ -366,9 +425,125 @@ export class RealityCaptureService { this._getAnalysisUrl() + `detectors/${encodeURIComponent(detectorName)}/versions/${encodeURIComponent(versionNumber)}/complete`; try { - const resp = await this._axios.post(url, undefined, { - headers: await this._getHeader("v2"), - }); + const resp = await this._request("POST", url, { headers: await this._getHeader("v2") }); + return new Response(resp.status, null, null); + } catch (error: any) { + return this._handleError(error); + } + } + + async dissociateRealityData(iTwinId: string, realityDataId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/iTwins/${encodeURIComponent(iTwinId)}`; + try { + const resp = await this._request("DELETE", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, null); + } catch (error: any) { + return this._handleError(error); + } + } + + async associateRealityData(iTwinId: string, realityDataId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/iTwins/${encodeURIComponent(iTwinId)}`; + try { + const resp = await this._request("POST", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, null); + } catch (error: any) { + return this._handleError(error); + } + } + + async getRealityDataITwins(realityDataId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/iTwins`; + try { + const resp = await this._request("GET", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data.iTwins); + } catch (error: any) { + return this._handleError(error); + } + } + + async getRealityDataReadAccess(realityDataId: string, itwinId?: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/readaccess` + (itwinId ? `?iTwinId=${encodeURIComponent(itwinId)}` : ""); + try { + const resp = await this._request("GET", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data); + } catch (error: any) { + return this._handleError(error); + } + } + + async getRealityDataWriteAccess(realityDataId: string, itwinId?: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/writeaccess` + (itwinId ? `?iTwinId=${encodeURIComponent(itwinId)}` : ""); + try { + const resp = await this._request("GET", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data); + } catch (error: any) { + return this._handleError(error); + } + } + + async createRealityData(realityData: RealityDataCreate): Promise> { + const url = this._getManagementUrl() + "reality-data"; + try { + const resp = await this._request("POST", url, { body: realityData, headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data.realityData); + } catch (error: any) { + return this._handleError(error); + } + } + + async updateRealityData(realityData: RealityDataUpdate, realityDataId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}`; + try { + const resp = await this._request("PATCH", url, { body: realityData, headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data.realityData); + } catch (error: any) { + return this._handleError(error); + } + } + + async getRealityDataList(realityDataFilter?: RealityDataFilter, prefer?: Prefer): Promise> { + const url = this._getManagementUrl() + "reality-data"; + const params = realityDataFilter ? realityDataFilterAsParams(realityDataFilter) : undefined; + const headers = { + ...await this._getHeader("v1"), + "Prefer": prefer === Prefer.REPRESENTATION ? "return=representation" : "return=minimal", + }; + try { + const resp = await this._request("GET", url, { params, headers }); + return new Response(resp.status, null, resp.data as RealityDatas); + } catch (error: any) { + return this._handleError(error); + } + } + + async getRealityData(realityDataId: string, iTwinId?: string): Promise> { + let url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}`; + if(iTwinId) { + url += `?iTwinId=${encodeURIComponent(iTwinId)}`; + } + try { + const resp = await this._request("GET", url, { headers: await this._getHeader("v1") }); + return new Response(resp.status, null, resp.data.realityData); + } catch (error: any) { + return this._handleError(error); + } + } + + async moveRealityData(realityDataId: string, iTwinId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}/move`; + try { + const resp = await this._request("PATCH", url, { body: { iTwinId: iTwinId }, headers: await this._getHeader("v1") }); + return new Response(resp.status, null, null); + } catch (error: any) { + return this._handleError(error); + } + } + + async deleteRealityData(realityDataId: string): Promise> { + const url = this._getManagementUrl() + `reality-data/${encodeURIComponent(realityDataId)}`; + try { + const resp = await this._request("DELETE", url, { headers: await this._getHeader("v1") }); return new Response(resp.status, null, null); } catch (error: any) { return this._handleError(error); diff --git a/typescript/packages/reality-capture/src/tests/service/bucket.test.ts b/typescript/packages/reality-capture/src/tests/service/bucket.test.ts index a2c6e776..97bcb0be 100644 --- a/typescript/packages/reality-capture/src/tests/service/bucket.test.ts +++ b/typescript/packages/reality-capture/src/tests/service/bucket.test.ts @@ -2,10 +2,9 @@ import { expect } from "chai"; import { z } from "zod"; import { BucketSchema, - URLSchema, - ContainerLinksSchema, BucketResponseSchema } from "../../service/bucket"; +import { ContainerLinksSchema, URLSchema } from "../../service/reality_data"; describe("BucketSchema", () => { it("should validate a correct bucket object", () => { diff --git a/typescript/packages/reality-capture/src/tests/service/job.test.ts b/typescript/packages/reality-capture/src/tests/service/job.test.ts index 00eed025..a522447f 100644 --- a/typescript/packages/reality-capture/src/tests/service/job.test.ts +++ b/typescript/packages/reality-capture/src/tests/service/job.test.ts @@ -7,8 +7,6 @@ import { JobState, JobCreateSchema, ExecutionSchema, - JobSchema, - JobResponseSchema, ProgressSchema, ProgressResponseSchema, MessageSchema, @@ -18,27 +16,6 @@ import { } from "../../service/job"; import { ImportPCOutputsCreate } from "../../specifications/import_point_cloud"; // TODO : mock? -function getCommonFields(type: JobType) { - return { - id: "job1", - name: "MyJob", - itwinId: "itwin123", - state: JobState.QUEUED, - executionInfo: { - createdDateTime: new Date(), - startedDateTime: new Date(), - endedDateTime: new Date(), - processingUnits: 5 - }, - userId: "user42", - type, - specifications: { - inputs: { scene: "scene" }, - outputs: [ImportPCOutputsCreate.SCAN_COLLECTION] - } - }; -} - describe("getAppropriateService", () => { it("should return Service.MODELING for PRODUCTION", () => { expect(getAppropriateService(JobType.PRODUCTION)).to.equal(Service.MODELING); diff --git a/typescript/packages/reality-capture/src/tests/service/reality_data.test.ts b/typescript/packages/reality-capture/src/tests/service/reality_data.test.ts new file mode 100644 index 00000000..4d7ceab6 --- /dev/null +++ b/typescript/packages/reality-capture/src/tests/service/reality_data.test.ts @@ -0,0 +1,657 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Bentley Systems, Incorporated. All rights reserved. +* See LICENSE.md in the project root for license terms and full copyright notice. +*--------------------------------------------------------------------------------------------*/ +import { expect } from "chai"; +import { z } from "zod"; +import sinon from "sinon"; +import type { AuthorizationClient } from "@itwin/core-common"; +import { Response } from "../../service/response"; +import { RealityCaptureService } from "../../service/service"; +import { + Access, AcquisitionSchema, Classification, ContainerDetailsSchema, ContainerLinksSchema, + ContainerType, CoordinateSchema, CrsSchema, ExtentSchema, Prefer, RealityDataBaseSchema, + RealityDataCreateSchema, RealityDataFilter, RealityDataFilterSchema, realityDataFilterAsParams, + RealityDataMinimalSchema, RealityDatasSchema, RealityDataSchema, RealityDataUpdateSchema, Type, URLSchema, +} from "../../service/reality_data"; +import { mockFetchResponse } from "./test_helpers"; + + +describe("CoordinateSchema", () => { + it("should validate a correct coordinate", () => { + expect(() => CoordinateSchema.parse({ latitude: 45.0, longitude: 90.0 })).to.not.throw(); + }); + + it("should throw for latitude out of range", () => { + expect(() => CoordinateSchema.parse({ latitude: 91, longitude: 0 })).to.throw(z.ZodError); + expect(() => CoordinateSchema.parse({ latitude: -91, longitude: 0 })).to.throw(z.ZodError); + }); + + it("should throw for longitude out of range", () => { + expect(() => CoordinateSchema.parse({ latitude: 0, longitude: 181 })).to.throw(z.ZodError); + expect(() => CoordinateSchema.parse({ latitude: 0, longitude: -181 })).to.throw(z.ZodError); + }); + + it("should throw for missing fields", () => { + expect(() => CoordinateSchema.parse({})).to.throw(z.ZodError); + expect(() => CoordinateSchema.parse({ latitude: 0 })).to.throw(z.ZodError); + }); +}); + +describe("ExtentSchema", () => { + const validExtent = { + southWest: { latitude: -10, longitude: -20 }, + northEast: { latitude: 10, longitude: 20 }, + }; + + it("should validate a correct extent", () => { + expect(() => ExtentSchema.parse(validExtent)).to.not.throw(); + }); + + it("should throw for missing southWest or northEast", () => { + expect(() => ExtentSchema.parse({ southWest: validExtent.southWest })).to.throw(z.ZodError); + expect(() => ExtentSchema.parse({ northEast: validExtent.northEast })).to.throw(z.ZodError); + }); + + it("should throw for invalid coordinate in extent", () => { + expect(() => ExtentSchema.parse({ + southWest: { latitude: -91, longitude: 0 }, + northEast: { latitude: 10, longitude: 20 }, + })).to.throw(z.ZodError); + }); +}); + +describe("CrsSchema", () => { + it("should validate a correct Crs with only id", () => { + expect(() => CrsSchema.parse({ id: "EPSG:4326" })).to.not.throw(); + }); + + it("should validate a correct Crs with id and verticalId", () => { + expect(() => CrsSchema.parse({ id: "EPSG:4326", verticalId: "EPSG:5773" })).to.not.throw(); + }); + + it("should throw for missing id", () => { + expect(() => CrsSchema.parse({})).to.throw(z.ZodError); + }); +}); + +describe("AcquisitionSchema", () => { + it("should validate an empty acquisition", () => { + expect(() => AcquisitionSchema.parse({})).to.not.throw(); + }); + + it("should validate a full acquisition", () => { + expect(() => AcquisitionSchema.parse({ + startDateTime: "2024-01-01T00:00:00Z", + endDateTime: "2024-01-02T00:00:00Z", + acquirer: "Some Company", + })).to.not.throw(); + }); + + it("should coerce date strings", () => { + const result = AcquisitionSchema.parse({ startDateTime: "2024-06-15T12:00:00Z" }); + expect(result.startDateTime).to.be.instanceOf(Date); + }); +}); + +describe("RealityDataBaseSchema", () => { + it("should validate an empty object (all fields optional)", () => { + expect(() => RealityDataBaseSchema.parse({})).to.not.throw(); + }); + + it("should validate a full base object", () => { + expect(() => RealityDataBaseSchema.parse({ + classification: Classification.IMAGERY, + description: "A test reality data", + tags: ["tag1", "tag2"], + authoring: false, + })).to.not.throw(); + }); + + it("should throw for invalid classification", () => { + expect(() => RealityDataBaseSchema.parse({ classification: "InvalidClass" })).to.throw(z.ZodError); + }); +}); + +describe("RealityDataCreateSchema", () => { + const valid = { + iTwinId: "itwin-001", + displayName: "My Reality Data", + type: Type.CC_IMAGE_COLLECTION, + }; + + it("should validate a minimal create payload", () => { + expect(() => RealityDataCreateSchema.parse(valid)).to.not.throw(); + }); + + it("should throw for missing iTwinId", () => { + expect(() => RealityDataCreateSchema.parse({ ...valid, iTwinId: undefined })).to.throw(z.ZodError); + }); + + it("should throw for missing displayName", () => { + expect(() => RealityDataCreateSchema.parse({ ...valid, displayName: undefined })).to.throw(z.ZodError); + }); + + it("should throw for invalid type", () => { + expect(() => RealityDataCreateSchema.parse({ ...valid, type: "BadType" })).to.throw(z.ZodError); + }); +}); + +describe("RealityDataSchema", () => { + const valid = { + id: "rd-001", + displayName: "My Reality Data", + type: Type.LAS, + createdDateTime: "2024-01-01T00:00:00Z", + modifiedDateTime: "2024-01-02T00:00:00Z", + lastAccessedDateTime: "2024-01-03T00:00:00Z", + dataCenterLocation: "East US", + size: 1024, + }; + + it("should validate a full reality data object", () => { + expect(() => RealityDataSchema.parse(valid)).to.not.throw(); + }); + + it("should coerce date strings to Date objects", () => { + const result = RealityDataSchema.parse(valid); + expect(result.createdDateTime).to.be.instanceOf(Date); + expect(result.modifiedDateTime).to.be.instanceOf(Date); + expect(result.lastAccessedDateTime).to.be.instanceOf(Date); + }); + + it("should throw for negative size", () => { + expect(() => RealityDataSchema.parse({ ...valid, size: -1 })).to.throw(z.ZodError); + }); + + it("should throw for missing required fields", () => { + expect(() => RealityDataSchema.parse({})).to.throw(z.ZodError); + }); +}); + +describe("RealityDataUpdateSchema", () => { + it("should validate an empty update (all fields optional)", () => { + expect(() => RealityDataUpdateSchema.parse({})).to.not.throw(); + }); + + it("should validate a partial update", () => { + expect(() => RealityDataUpdateSchema.parse({ displayName: "New Name", authoring: true })).to.not.throw(); + }); +}); + +describe("RealityDataMinimalSchema", () => { + it("should validate a minimal reality data", () => { + expect(() => RealityDataMinimalSchema.parse({ + id: "rd-001", + displayName: "Minimal RD", + type: Type.E57, + })).to.not.throw(); + }); + + it("should throw for missing id", () => { + expect(() => RealityDataMinimalSchema.parse({ displayName: "Minimal RD", type: Type.E57 })).to.throw(z.ZodError); + }); +}); + +describe("URLSchema", () => { + it("should validate a correct URL object", () => { + expect(() => URLSchema.parse({ href: "https://example.com" })).to.not.throw(); + }); + + it("should throw for missing href", () => { + expect(() => URLSchema.parse({})).to.throw(z.ZodError); + }); +}); + +describe("ContainerLinksSchema", () => { + it("should validate a correct ContainerLinks object", () => { + expect(() => ContainerLinksSchema.parse({ containerUrl: { href: "https://blob.example.com" } })).to.not.throw(); + }); + + it("should throw for missing containerUrl", () => { + expect(() => ContainerLinksSchema.parse({})).to.throw(z.ZodError); + }); +}); + +describe("ContainerDetailsSchema", () => { + const valid = { + type: ContainerType.AZURE_BLOB_SAS_URL, + access: Access.READ, + _links: { containerUrl: { href: "https://blob.example.com?sas=token" } }, + }; + + it("should validate a correct ContainerDetails object", () => { + expect(() => ContainerDetailsSchema.parse(valid)).to.not.throw(); + }); + + it("should validate with WRITE access", () => { + expect(() => ContainerDetailsSchema.parse({ ...valid, access: Access.WRITE })).to.not.throw(); + }); + + it("should throw for invalid access", () => { + expect(() => ContainerDetailsSchema.parse({ ...valid, access: "BadAccess" })).to.throw(z.ZodError); + }); + + it("should throw for missing _links", () => { + expect(() => ContainerDetailsSchema.parse({ type: ContainerType.AZURE_BLOB_SAS_URL, access: Access.READ })).to.throw(z.ZodError); + }); +}); + +describe("RealityDatasSchema", () => { + it("should validate a list with minimal reality data", () => { + expect(() => RealityDatasSchema.parse({ + realityData: [{ id: "rd-001", displayName: "RD1", type: Type.LAS }], + links: { next: { href: "https://api.bentley.com/reality-data?continuationToken=abc" } }, + })).to.not.throw(); + }); + + it("should validate an empty list", () => { + expect(() => RealityDatasSchema.parse({ + realityData: [], + links: { next: { href: "https://api.bentley.com/reality-data" } }, + })).to.not.throw(); + }); +}); + +describe("RealityDataFilterSchema", () => { + it("should validate an empty filter", () => { + expect(() => RealityDataFilterSchema.parse({})).to.not.throw(); + }); + + it("should validate a filter with all fields", () => { + expect(() => RealityDataFilterSchema.parse({ + iTwinId: "itwin-001", + $top: 50, + types: [Type.LAS, Type.E57], + ownerId: "owner-001", + })).to.not.throw(); + }); + + it("should throw for $top exceeding max", () => { + expect(() => RealityDataFilterSchema.parse({ $top: 1001 })).to.throw(z.ZodError); + }); + + it("should throw for $top below min", () => { + expect(() => RealityDataFilterSchema.parse({ $top: 0 })).to.throw(z.ZodError); + }); +}); + +describe("RealityDataFilter.asParamsForServiceCall", () => { + it("should exclude undefined fields", () => { + const filter: RealityDataFilter = { iTwinId: "itwin-001" }; + const params = realityDataFilterAsParams(filter); + expect(params).to.have.key("iTwinId"); + expect(Object.keys(params)).to.have.lengthOf(1); + }); + + it("should convert dateTime tuples to 'start/end' strings", () => { + const filter: RealityDataFilter = { + createdDateTime: ["2024-01-01T00:00:00Z", "2024-12-31T00:00:00Z"], + }; + const params = realityDataFilterAsParams(filter); + expect(params["createdDateTime"]).to.equal("2024-01-01T00:00:00Z/2024-12-31T00:00:00Z"); + }); + + it("should handle multiple datetime range fields", () => { + const filter: RealityDataFilter = { + createdDateTime: ["2024-01-01T00:00:00Z", "2024-06-01T00:00:00Z"], + modifiedDateTime: ["2024-02-01T00:00:00Z", "2024-07-01T00:00:00Z"], + }; + const params = realityDataFilterAsParams(filter); + expect(params["createdDateTime"]).to.equal("2024-01-01T00:00:00Z/2024-06-01T00:00:00Z"); + expect(params["modifiedDateTime"]).to.equal("2024-02-01T00:00:00Z/2024-07-01T00:00:00Z"); + }); + + it("should pass non-datetime fields through unchanged", () => { + const filter: RealityDataFilter = { iTwinId: "itwin-123", $top: 10 }; + const params = realityDataFilterAsParams(filter); + expect(params["iTwinId"]).to.equal("itwin-123"); + expect(params["$top"]).to.equal(10); + }); +}); + +describe("RealityCaptureService reality data API calls", function () { + let service: RealityCaptureService; + let fetchStub: sinon.SinonStub; + + const rdId = "rd-uuid-001"; + const iTwinId = "itwin-uuid-001"; + + const sampleRealityData = { + id: rdId, + displayName: "Test RD", + type: "CCImageCollection", + createdDateTime: "2024-01-01T00:00:00Z", + modifiedDateTime: "2024-01-02T00:00:00Z", + lastAccessedDateTime: "2024-01-03T00:00:00Z", + dataCenterLocation: "East US", + size: 512, + }; + + const sampleContainerDetails = { + type: "AzureBlobSasUrl", + access: "Read", + _links: { containerUrl: { href: "https://blob.core.windows.net/container?sas=token" } }, + }; + + beforeEach(() => { + const getAccessTokenStub = sinon.stub().resolves("fake-token"); + const mockAuthClient = { getAccessToken: getAccessTokenStub } as AuthorizationClient; + service = new RealityCaptureService(mockAuthClient, { env: "dev" }); + fetchStub = sinon.stub(globalThis, "fetch"); + }); + + afterEach(() => { + sinon.restore(); + }); + + + it("getRealityData should return a Response on success", async () => { + fetchStub.resolves(mockFetchResponse(200, { realityData: sampleRealityData } )); + const result = await service.getRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(result).to.be.instanceOf(Response); + expect(result.isError()).to.equal(false); + expect(result.value!.id).to.equal(rdId); + }); + + it("getRealityData with iTwinId should append query param", async () => { + fetchStub.resolves(mockFetchResponse(200, { realityData: sampleRealityData } )); + await service.getRealityData(rdId, iTwinId); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}?iTwinId=${iTwinId}` + ); + }); + + it("getRealityData 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + + it("createRealityData should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(201, { realityData: sampleRealityData } )); + const create = { iTwinId, displayName: "Test RD", type: Type.CC_IMAGE_COLLECTION }; + const result = await service.createRealityData(create); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-management/reality-data"); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(create); + expect(result.isError()).to.equal(false); + expect(result.value!.id).to.equal(rdId); + }); + + it("createRealityData 422 error", async () => { + fetchStub.resolves(mockFetchResponse(422, { error: { code: "InvalidRealityData", message: "Invalid payload." } } )); + const result = await service.createRealityData({ iTwinId, displayName: "Test", type: Type.LAS }); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("InvalidRealityData"); + }); + + it("createRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.createRealityData({ iTwinId, displayName: "Test", type: Type.LAS }); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + + it("updateRealityData should call fetch and return a Response", async () => { + const updated = { ...sampleRealityData, displayName: "Updated RD" }; + fetchStub.resolves(mockFetchResponse(200, { realityData: updated } )); + const update = { displayName: "Updated RD" }; + const result = await service.updateRealityData(update, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(update); + expect(result.isError()).to.equal(false); + expect(result.value!.displayName).to.equal("Updated RD"); + }); + + it("updateRealityData 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.updateRealityData({ displayName: "New" }, rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("updateRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.updateRealityData({}, rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("deleteRealityData should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(204, {} )); + const result = await service.deleteRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("deleteRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.deleteRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("deleteRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.deleteRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataReadAccess should return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, sampleContainerDetails )); + const result = await service.getRealityDataReadAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/readaccess` + ); + expect(result.isError()).to.equal(false); + expect(result.value!.access).to.equal(Access.READ); + expect(result.value!._links.containerUrl.href).to.equal("https://blob.core.windows.net/container?sas=token"); + }); + + it("getRealityDataReadAccess with iTwinId should append query param only once", async () => { + fetchStub.resolves(mockFetchResponse(200, sampleContainerDetails )); + await service.getRealityDataReadAccess(rdId, iTwinId); + const calledUrl: string = fetchStub.firstCall.args[0]; + expect(calledUrl).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/readaccess?iTwinId=${iTwinId}` + ); + expect(calledUrl.split("iTwinId=").length - 1).to.equal(1); + }); + + it("getRealityDataReadAccess 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataReadAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataReadAccess ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataReadAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataWriteAccess should return a Response with WRITE access", async () => { + const writeDetails = { ...sampleContainerDetails, access: "Write" }; + fetchStub.resolves(mockFetchResponse(200, writeDetails )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/writeaccess` + ); + expect(result.isError()).to.equal(false); + expect(result.value!.access).to.equal(Access.WRITE); + }); + + it("getRealityDataWriteAccess with iTwinId should append query param only once", async () => { + fetchStub.resolves(mockFetchResponse(200, { ...sampleContainerDetails, access: "Write" } )); + await service.getRealityDataWriteAccess(rdId, iTwinId); + const calledUrl: string = fetchStub.firstCall.args[0]; + expect(calledUrl).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/writeaccess?iTwinId=${iTwinId}` + ); + expect(calledUrl.split("iTwinId=").length - 1).to.equal(1); + }); + + it("getRealityDataWriteAccess 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataWriteAccess ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataList should return a Response with minimal prefer", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [ + { id: "rd-001", displayName: "RD1", type: "CCImageCollection" }, + { id: "rd-002", displayName: "RD2", type: "LAS" }, + ], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/?continuationToken=token123" } }, + }, + )); + const result = await service.getRealityDataList(); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(false); + expect(result.value!.realityData).to.have.lengthOf(2); + }); + + it("getRealityDataList should send Prefer: return=representation when specified", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + await service.getRealityDataList(undefined, Prefer.REPRESENTATION); + const callArgs = fetchStub.firstCall.args[1]; + expect(callArgs.headers["Prefer"]).to.equal("return=representation"); + }); + + it("getRealityDataList should send Prefer: return=minimal by default", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + await service.getRealityDataList(); + const callArgs = fetchStub.firstCall.args[1]; + expect(callArgs.headers["Prefer"]).to.equal("return=minimal"); + }); + + it("getRealityDataList should pass filter as params", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + await service.getRealityDataList({ iTwinId, $top: 10 }); + const calledUrl = new URL(fetchStub.firstCall.args[0]); + expect(calledUrl.origin + calledUrl.pathname).to.equal("https://dev-api.bentley.com/reality-management/reality-data"); + expect(calledUrl.searchParams.get("iTwinId")).to.equal(iTwinId); + expect(calledUrl.searchParams.get("$top")).to.equal("10"); + }); + + it("getRealityDataList 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataList(); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataList ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataList(); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("moveRealityData should call fetch on the move endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/move` + ); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal({ iTwinId }); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("moveRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("moveRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataITwins should return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { iTwins: ["itwin-001", "itwin-002"] } )); + const result = await service.getRealityDataITwins(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/iTwins` + ); + expect(result.isError()).to.equal(false); + expect(result.value).to.deep.equal(["itwin-001", "itwin-002"]); + }); + + it("getRealityDataITwins 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.getRealityDataITwins(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("getRealityDataITwins ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataITwins(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityData should encode the realityDataId in the URL", async () => { + fetchStub.resolves(mockFetchResponse(200, { realityData: sampleRealityData } )); + const specialId = "rd/with special&chars"; + await service.getRealityData(specialId); + expect(fetchStub.firstCall.args[0]).to.include(encodeURIComponent(specialId)); + }); + + it("deleteRealityData should encode the realityDataId in the URL", async () => { + fetchStub.resolves(mockFetchResponse(204, {} )); + const specialId = "rd/with special&chars"; + await service.deleteRealityData(specialId); + expect(fetchStub.firstCall.args[0]).to.include(encodeURIComponent(specialId)); + }); +}); diff --git a/typescript/packages/reality-capture/src/tests/service/response.test.ts b/typescript/packages/reality-capture/src/tests/service/response.test.ts index d0c0e5d3..b73f8f22 100644 --- a/typescript/packages/reality-capture/src/tests/service/response.test.ts +++ b/typescript/packages/reality-capture/src/tests/service/response.test.ts @@ -7,13 +7,13 @@ describe("Response", () => { const res = new Response(200); expect(res.status_code).to.equal(200); - expect(res.error).to.be.null; - expect(res.value).to.be.null; + expect(res.error).to.equal(null); + expect(res.value).to.equal(null); expect(res.getResponseStatusCode()).to.equal(200); - expect(res.isError()).to.be.false; + expect(res.isError()).to.equal(false); expect(res.status_code).to.equal(200); - expect(res.error).to.be.null; - expect(res.value).to.be.null; + expect(res.error).to.equal(null); + expect(res.value).to.equal(null); }); it("should create a Response with status_code and error", () => { @@ -22,24 +22,24 @@ describe("Response", () => { expect(res.status_code).to.equal(400); expect(res.error).to.deep.equal(error); - expect(res.value).to.be.null; + expect(res.value).to.equal(null); expect(res.getResponseStatusCode()).to.equal(400); - expect(res.isError()).to.be.true; + expect(res.isError()).to.equal(true); expect(res.status_code).to.equal(400); expect(res.error).to.deep.equal(error); - expect(res.value).to.be.null; + expect(res.value).to.equal(null); }); it("should create a Response with status_code and value", () => { const res = new Response(201, null, "created"); expect(res.status_code).to.equal(201); - expect(res.error).to.be.null; + expect(res.error).to.equal(null); expect(res.value).to.equal("created"); expect(res.getResponseStatusCode()).to.equal(201); - expect(res.isError()).to.be.false; + expect(res.isError()).to.equal(false); expect(res.status_code).to.equal(201); - expect(res.error).to.be.null; + expect(res.error).to.equal(null); expect(res.value).to.equal("created"); }); @@ -47,8 +47,8 @@ describe("Response", () => { const res = new Response(204, undefined, undefined); expect(res.status_code).to.equal(204); - expect(res.error).to.be.null; - expect(res.value).to.be.null; - expect(res.isError()).to.be.false; + expect(res.error).to.equal(null); + expect(res.value).to.equal(null); + expect(res.isError()).to.equal(false); }); -}); \ No newline at end of file +}); diff --git a/typescript/packages/reality-capture/src/tests/service/service.test.ts b/typescript/packages/reality-capture/src/tests/service/service.test.ts index 10697596..07b49896 100644 --- a/typescript/packages/reality-capture/src/tests/service/service.test.ts +++ b/typescript/packages/reality-capture/src/tests/service/service.test.ts @@ -6,6 +6,9 @@ import { Response } from "../../service/response"; import { JobCreate, JobType, Service } from "../../service/job"; import { CostEstimationCreate } from "../../service/estimation"; import { DetectorBase, DetectorExport, DetectorType, DetectorUpdate, DetectorVersionCreate } from "../../service/detectors"; +import { Access, Prefer, RealityDataFilter, Type } from "../../service/reality_data"; +import { mockFetchResponse } from "./test_helpers"; + describe("RealityCaptureService tests", function () { it("should validate RealityCaptureService urls based on environment", async () => { @@ -60,10 +63,7 @@ describe("RealityCaptureService tests", function () { describe("RealityCaptureService API calls tests", function () { let service: RealityCaptureService; - let axiosPostStub: sinon.SinonStub; - let axiosGetStub: sinon.SinonStub; - let axiosPatchStub: sinon.SinonStub; - let axiosDeleteStub: sinon.SinonStub; + let fetchStub: sinon.SinonStub; let getAccessTokenStub: sinon.SinonStub; const iTwinId = "uuidIT"; @@ -73,346 +73,293 @@ describe("RealityCaptureService API calls tests", function () { const mockAuthClient = { getAccessToken: getAccessTokenStub } as AuthorizationClient; service = new RealityCaptureService(mockAuthClient, { env: "dev" }); + fetchStub = sinon.stub(globalThis, "fetch"); + }); - // Stub axios instance methods - axiosPostStub = sinon.stub(); - axiosGetStub = sinon.stub(); - axiosPatchStub = sinon.stub(); - axiosDeleteStub = sinon.stub(); - (service as any)._axios = { - post: axiosPostStub, - get: axiosGetStub, - patch: axiosPatchStub, - delete: axiosDeleteStub - }; - - // Reset stub history + afterEach(() => { sinon.restore(); }); // getBucket tests - it("getBucket should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "bucket": + it("getBucket should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "bucket": { "iTwinId": "uuidIT" }, - "_links": + "_links": { "containerUrl": { "href": "https://realityprodneusa01.blob.core.windows.net/78e3a82d-076e-4d1d-b8ef-ab0625fbb856?sv=2020-08-04&se=2021-07-22T03%3A50%3A21Z&sr=c&sp=rl&sig=**removed**" } } - } - }); + } + )); const result = await service.getBucket(iTwinId); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.bucket.iTwinId).to.equal(iTwinId); }); it("getBucket 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getBucket(iTwinId); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getBucket ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getBucket(iTwinId); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getServiceFiles tests - it("getServiceFiles should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "files": [{ - "id": "File_1", - "name": "file 1", - "type": "Preset", - "description": "preset file" - }, - { - "id": "File_2", - "name": "file 2", - "type": "Preset", - "deprecated": true - } - ] + it("getServiceFiles should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "files": [{ + "id": "File_1", + "name": "file 1", + "type": "Preset", + "description": "preset file" + }, + { + "id": "File_2", + "name": "file 2", + "type": "Preset", + "deprecated": true } - }); + ] + } + )); const result = await service.getServiceFiles(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.files).to.have.lengthOf(2); - expect(result.value!.files[0].deprecated).to.be.undefined; + expect(result.value!.files[0].deprecated).to.equal(undefined); expect(result.value!.files[0].description).to.equal("preset file"); - expect(result.value!.files[1].description).to.be.undefined; - expect(result.value!.files[1].deprecated).to.be.true; + expect(result.value!.files[1].description).to.equal(undefined); + expect(result.value!.files[1].deprecated).to.equal(true); }); it("getServiceFiles 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getServiceFiles(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getServiceFiles ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getServiceFiles(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getDetectors tests - it("getDetectors should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "detectors": [{ - "name": "@bentley/cracks-ortho", - "displayName": "Cracks Ortho", - "description": "Detects cracks in concrete infrastructure to enable defect inspection workflows.", - "type": "OrthophotoSegmentationDetector", - "documentationUrl": "https://www.bentley.com", - "latestVersion": "1.0" - }, - { - "name": "traffic-signs", - "displayName": "Traffic signs detector", - "description": "Detects all traffic signs within a scene.", - "type": "PhotoObjectDetector", - "documentationUrl": "https://www.example.com" - } - ] + it("getDetectors should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "detectors": [{ + "name": "@bentley/cracks-ortho", + "displayName": "Cracks Ortho", + "description": "Detects cracks in concrete infrastructure to enable defect inspection workflows.", + "type": "OrthophotoSegmentationDetector", + "documentationUrl": "https://www.bentley.com", + "latestVersion": "1.0" + }, + { + "name": "traffic-signs", + "displayName": "Traffic signs detector", + "description": "Detects all traffic signs within a scene.", + "type": "PhotoObjectDetector", + "documentationUrl": "https://www.example.com" } - }); + ] + } + )); const result = await service.getDetectors(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.detectors).to.have.lengthOf(2); }); it("getDetectors should pass filters as query params", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "detectors": [] - } - }); + fetchStub.resolves(mockFetchResponse(200, { + "detectors": [] + } + )); const detectorsFilter = "exports in ('Polygons', 'Lines') and labels in ('crack')"; const result = await service.getDetectors(detectorsFilter); - expect(axiosGetStub.calledOnce).to.be.true; - expect(axiosGetStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors"); - expect(axiosGetStub.firstCall.args[1].params).to.deep.equal({ "$filter": detectorsFilter }); + const calledUrl = new URL(fetchStub.firstCall.args[0]); + expect(fetchStub.calledOnce).to.equal(true); + expect(calledUrl.origin + calledUrl.pathname).to.equal("https://dev-api.bentley.com/reality-analysis/detectors"); + expect(calledUrl.searchParams.get("$filter")).to.equal(detectorsFilter); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); }); it("getDetectors 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getDetectors(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getDetectors ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getDetectors(); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getDetector tests - it("getDetector should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "detector": { - "name": "@bentley/mydetector", - "displayName": "Cracks detector", - "description": "Detects all the cracks within a scene.", - "type": "PhotoObjectDetector", - "documentationUrl": "https://www.bentley.com", - "versions": [{ - "creationDate": "2025-03-18T14:11:15.5325351Z", - "versionNumber": "2.0", - "status": "AwaitingData", - "creatorId": "e8be5445-c76a-41c6-9bfe-6a3d71953624", - "capabilities": { - "labels": [ - "crack" - ], - "exports": [ - "Lines" - ] - } - }, - { - "creationDate": "2025-03-12T13:32:06.8787916Z", - "versionNumber": "1.1", - "status": "Ready", - "creatorId": "e8be5445-c76a-41c6-9bfe-6a3d71953624", - "downloadUrl": "https://cicsdetectorsprodeussa01.blob.core.windows.net/bd9bf908-9b82-4fcd-9ab4-ff15286d2ada/cracks-detector-1.1.zip?sv=2024-08-04&se=2025-04-23T11%3A26%3A11Z&sr=b&sp=r&sig=***REMOVED***", - "capabilities": { - "labels": [ - "crack" - ], - "exports": [ - "Lines" - ] - } - }, - { - "creationDate": "2025-03-11T15:11:24.2712971Z", - "versionNumber": "1.0", - "status": "Ready", - "creatorId": "d2b5b8e7-8248-49a3-94ac-b097a7a67b6d", - "downloadUrl": "https://cicsdetectorsprodeussa01.blob.core.windows.net/bd9bf908-9b82-4fcd-9ab4-ff15286d2ada/cracks-detector-1.0.zip?sv=2024-08-04&se=2025-04-23T11%3A26%3A11Z&sr=b&sp=r&sig=***REMOVED***", - "capabilities": { - "labels": [ - "Crack Object" - ], - "exports": [ - "Lines" - ] - } + it("getDetector should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "detector": { + "name": "@bentley/mydetector", + "displayName": "Cracks detector", + "description": "Detects all the cracks within a scene.", + "type": "PhotoObjectDetector", + "documentationUrl": "https://www.bentley.com", + "versions": [{ + "creationDate": "2025-03-18T14:11:15.5325351Z", + "versionNumber": "2.0", + "status": "AwaitingData", + "creatorId": "e8be5445-c76a-41c6-9bfe-6a3d71953624", + "capabilities": { + "labels": [ + "crack" + ], + "exports": [ + "Lines" + ] + } + }, + { + "creationDate": "2025-03-12T13:32:06.8787916Z", + "versionNumber": "1.1", + "status": "Ready", + "creatorId": "e8be5445-c76a-41c6-9bfe-6a3d71953624", + "downloadUrl": "https://cicsdetectorsprodeussa01.blob.core.windows.net/bd9bf908-9b82-4fcd-9ab4-ff15286d2ada/cracks-detector-1.1.zip?sv=2024-08-04&se=2025-04-23T11%3A26%3A11Z&sr=b&sp=r&sig=***REMOVED***", + "capabilities": { + "labels": [ + "crack" + ], + "exports": [ + "Lines" + ] + } + }, + { + "creationDate": "2025-03-11T15:11:24.2712971Z", + "versionNumber": "1.0", + "status": "Ready", + "creatorId": "d2b5b8e7-8248-49a3-94ac-b097a7a67b6d", + "downloadUrl": "https://cicsdetectorsprodeussa01.blob.core.windows.net/bd9bf908-9b82-4fcd-9ab4-ff15286d2ada/cracks-detector-1.0.zip?sv=2024-08-04&se=2025-04-23T11%3A26%3A11Z&sr=b&sp=r&sig=***REMOVED***", + "capabilities": { + "labels": [ + "Crack Object" + ], + "exports": [ + "Lines" + ] } - ] } + ] } - }); + } + )); const result = await service.getDetector("@bentley/mydetector"); - expect(axiosGetStub.calledOnce).to.be.true; - expect(axiosGetStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.detector.name).to.equal("@bentley/mydetector"); }); it("getDetector 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getDetector("mydetector"); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getDetector ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getDetector("mydetector"); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); - it("createDetector should call axios.post and return a Response", async () => { - axiosPostStub.resolves({ - status: 201, - data: { - detector: { - name: "@bentley/new-detector", - displayName: "New detector", - description: "Creates a detector.", - type: "PhotoObjectDetector", - documentationUrl: "https://www.bentley.com", - versions: [] - } + it("createDetector should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(201, { + detector: { + name: "@bentley/new-detector", + displayName: "New detector", + description: "Creates a detector.", + type: "PhotoObjectDetector", + documentationUrl: "https://www.bentley.com", + versions: [] } - }); + } + )); const detectorCreate: DetectorBase = { name: "@bentley/new-detector", displayName: "New detector", @@ -421,69 +368,63 @@ describe("RealityCaptureService API calls tests", function () { documentationUrl: "https://www.bentley.com" }; const result = await service.createDetector(detectorCreate); - expect(axiosPostStub.calledOnce).to.be.true; - expect(axiosPostStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors"); - expect(axiosPostStub.firstCall.args[1]).to.deep.equal(detectorCreate); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors"); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(detectorCreate); + expect(result.isError()).to.equal(false); expect(result.value!.detector.name).to.equal("@bentley/new-detector"); }); - it("updateDetector should call axios.patch with an encoded detector name", async () => { - axiosPatchStub.resolves({ - status: 200, - data: { - detector: { - name: "@bentley/mydetector", - displayName: "Updated detector", - description: "Updated description", - type: "PhotoObjectDetector", - documentationUrl: "https://www.bentley.com/docs", - versions: [] - } + it("updateDetector should call fetch with an encoded detector name", async () => { + fetchStub.resolves(mockFetchResponse(200, { + detector: { + name: "@bentley/mydetector", + displayName: "Updated detector", + description: "Updated description", + type: "PhotoObjectDetector", + documentationUrl: "https://www.bentley.com/docs", + versions: [] } - }); + } + )); const detectorUpdate: DetectorUpdate = { displayName: "Updated detector", description: "Updated description", documentationUrl: "https://www.bentley.com/docs" }; const result = await service.updateDetector("@bentley/mydetector", detectorUpdate); - expect(axiosPatchStub.calledOnce).to.be.true; - expect(axiosPatchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); - expect(axiosPatchStub.firstCall.args[1]).to.deep.equal(detectorUpdate); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(detectorUpdate); + expect(result.isError()).to.equal(false); expect(result.value!.detector.displayName).to.equal("Updated detector"); }); - it("deleteDetector should call axios.delete with an encoded detector name", async () => { - axiosDeleteStub.resolves({ - status: 204, - data: {} - }); + it("deleteDetector should call fetch with an encoded detector name", async () => { + fetchStub.resolves(mockFetchResponse(204, {} + )); const result = await service.deleteDetector("@bentley/mydetector"); - expect(axiosDeleteStub.calledOnce).to.be.true; - expect(axiosDeleteStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); - expect(result.isError()).to.be.false; - expect(result.value).to.be.null; - }); - - it("createDetectorVersion should call axios.post with the version payload", async () => { - axiosPostStub.resolves({ - status: 201, - data: { - version: { - versionNumber: "1.0", - capabilities: { labels: ["crack"], exports: ["Lines"] }, - creationDate: "2025-03-18T14:11:15.5325351Z", - status: "AwaitingData", - creatorId: "e8be5445-c76a-41c6-9bfe-6a3d71953624" - }, - _links: { - completeUrl: { href: "https://example.com/complete" }, - uploadUrl: { href: "https://example.com/upload" } - } + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector"); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("createDetectorVersion should call fetch with the version payload", async () => { + fetchStub.resolves(mockFetchResponse(201, { + version: { + versionNumber: "1.0", + capabilities: { labels: ["crack"], exports: ["Lines"] }, + creationDate: "2025-03-18T14:11:15.5325351Z", + status: "AwaitingData", + creatorId: "e8be5445-c76a-41c6-9bfe-6a3d71953624" + }, + _links: { + completeUrl: { href: "https://example.com/complete" }, + uploadUrl: { href: "https://example.com/upload" } } - }); + } + )); const versionCreate: DetectorVersionCreate = { versionNumber: "1.0", capabilities: { @@ -492,555 +433,862 @@ describe("RealityCaptureService API calls tests", function () { } }; const result = await service.createDetectorVersion("@bentley/mydetector", versionCreate); - expect(axiosPostStub.calledOnce).to.be.true; - expect(axiosPostStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions"); - expect(axiosPostStub.firstCall.args[1]).to.deep.equal(versionCreate); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions"); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(versionCreate); + expect(result.isError()).to.equal(false); expect(result.value!.version.versionNumber).to.equal("1.0"); expect(result.value!._links.uploadUrl.href).to.equal("https://example.com/upload"); }); - it("deleteDetectorVersion should call axios.delete with encoded detector and version names", async () => { - axiosDeleteStub.resolves({ - status: 204, - data: {} - }); + it("deleteDetectorVersion should call fetch with encoded detector and version names", async () => { + fetchStub.resolves(mockFetchResponse(204, {} + )); const result = await service.deleteDetectorVersion("@bentley/mydetector", "1.0-beta/1"); - expect(axiosDeleteStub.calledOnce).to.be.true; - expect(axiosDeleteStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0-beta%2F1"); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0-beta%2F1"); + expect(result.isError()).to.equal(false); }); - it("publishDetectorVersion should call axios.post on the publish endpoint", async () => { - axiosPostStub.resolves({ - status: 200, - data: {} - }); + it("publishDetectorVersion should call fetch on the publish endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} + )); const result = await service.publishDetectorVersion("@bentley/mydetector", "1.0"); - expect(axiosPostStub.calledOnce).to.be.true; - expect(axiosPostStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/publish"); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/publish"); + expect(result.isError()).to.equal(false); }); - it("unpublishDetectorVersion should call axios.post on the unpublish endpoint", async () => { - axiosPostStub.resolves({ - status: 200, - data: {} - }); + it("unpublishDetectorVersion should call fetch on the unpublish endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} + )); const result = await service.unpublishDetectorVersion("@bentley/mydetector", "1.0"); - expect(axiosPostStub.calledOnce).to.be.true; - expect(axiosPostStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/unpublish"); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/unpublish"); + expect(result.isError()).to.equal(false); }); - it("completeDetectorVersionUpload should call axios.post on the complete endpoint", async () => { - axiosPostStub.resolves({ - status: 200, - data: {} - }); + it("completeDetectorVersionUpload should call fetch on the complete endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} + )); const result = await service.completeDetectorVersionUpload("@bentley/mydetector", "1.0"); - expect(axiosPostStub.calledOnce).to.be.true; - expect(axiosPostStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/complete"); - expect(result.isError()).to.be.false; + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-analysis/detectors/%40bentley%2Fmydetector/versions/1.0/complete"); + expect(result.isError()).to.equal(false); }); //estimateCost tests - it("estimateCost should call axios.post and return a Response", async () => { - axiosPostStub.resolves({ - status: 200, - data: { - "costEstimation": { - "id": "jobId", - "estimatedUnits": 8, - "unitType": "Modeling" - } + it("estimateCost should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "costEstimation": { + "id": "jobId", + "estimatedUnits": 8, + "unitType": "Modeling" } - }); + } + )); const costCreate: CostEstimationCreate = { type: JobType.CALIBRATION } as any; const result = await service.estimateCost(costCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.estimatedUnits).to.equal(8); }); it("estimateCost 401 error", async () => { - axiosPostStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const costCreate: CostEstimationCreate = { type: JobType.CALIBRATION } as any; const result = await service.estimateCost(costCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("estimateCost ill formed error", async () => { - axiosPostStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const costCreate: CostEstimationCreate = { type: JobType.CALIBRATION } as any; const result = await service.estimateCost(costCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // cancelJob tests - it("cancelJob should call axios.delete and return a Response", async () => { - axiosDeleteStub.resolves({ - status: 200, - data: { - "job": { - "id": "jobId", - "state": "Terminating", - "userId": "911edf8b-59ad-404c-a743-aec05ca038e9", - "executionInfo": { - "startedDateTime": "2025-03-10T11:30:03Z", - "createdDateTime": "2025-03-10T11:30:00Z" + it("cancelJob should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "job": { + "id": "jobId", + "state": "Terminating", + "userId": "911edf8b-59ad-404c-a743-aec05ca038e9", + "executionInfo": { + "startedDateTime": "2025-03-10T11:30:03Z", + "createdDateTime": "2025-03-10T11:30:00Z" + }, + "specifications": { + "inputs": { + "scene": "sceneId" }, - "specifications": { - "inputs": { - "scene": "sceneId" - }, - "outputs": { - "modelingReference": { - "location": "modelingReferenceId" - } + "outputs": { + "modelingReference": { + "location": "modelingReferenceId" } - }, - "name": "jobName", - "type": "Reconstruction", - "iTwinId": "uuidIT" - } + } + }, + "name": "jobName", + "type": "Reconstruction", + "iTwinId": "uuidIT" } - }); + } + )); const result = await service.cancelJob("jobId", Service.MODELING); - expect(axiosDeleteStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.state).to.equal("Terminating"); }); it("cancelJob 401 error", async () => { - axiosDeleteStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.cancelJob("jobId", Service.MODELING); - expect(axiosDeleteStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("cancelJob ill formed error", async () => { - axiosDeleteStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.cancelJob("jobId", Service.MODELING); - expect(axiosDeleteStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getJobProgress tests - it("getJobProgress should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "progress": { - "percentage": 5, - "state": "Active" - } + it("getJobProgress should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "progress": { + "percentage": 5, + "state": "Active" } - }); + } + )); const result = await service.getJobProgress("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.percentage).to.equal(5); }); it("getJobProgress 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getJobProgress("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("cancelJob ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getJobProgress("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getJobMessages - it("getJobMessages should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "messages": { - "errors": [{ - "code": "InputData_Invalid", - "message": "Invalid input data. Please check the documentation. (\"%1\")", - "title": "Invalid input data", - "params": ["Sample_scan"] - }], - "warnings": [] - } + it("getJobMessages should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "messages": { + "errors": [{ + "code": "InputData_Invalid", + "message": "Invalid input data. Please check the documentation. (\"%1\")", + "title": "Invalid input data", + "params": ["Sample_scan"] + }], + "warnings": [] } - }); + } + )); const result = await service.getJobMessages("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.errors).to.have.lengthOf(1); expect(result.value!.errors[0].code).to.equal("InputData_Invalid"); }); it("getJobMessages 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getJobMessages("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getJobMessages ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getJobMessages("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getJob tests - it("getJobMessages should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - "job": { - "id": "jobId", - "state": "Active", - "userId": "userId", - "executionInfo": { - "createdDateTime": "2025-03-06T09:42:33Z" - }, - "specifications": { - "inputs": { - "sceneToProcess": "sceneId" - }, - "outputs": { - "scene": "sceneId" - } + it("getJobMessages should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "job": { + "id": "jobId", + "state": "Active", + "userId": "userId", + "executionInfo": { + "createdDateTime": "2025-03-06T09:42:33Z" + }, + "specifications": { + "inputs": { + "sceneToProcess": "sceneId" }, - "name": "jobName", - "type": "FillImageProperties", - "iTwinId": "uuidIT" - } + "outputs": { + "scene": "sceneId" + } + }, + "name": "jobName", + "type": "FillImageProperties", + "iTwinId": "uuidIT" } - }); + } + )); const result = await service.getJob("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.state).to.equal("Active"); expect(result.value!.id).to.equal("jobId"); }); it("getJob 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const result = await service.getJob("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getJob ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const result = await service.getJob("jobId", Service.MODELING); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // submitJob tests - it("submitJob should call axios.post and return a Response", async () => { - axiosPostStub.resolves({ - status: 200, - data: { - "job": { - "id": "jobId", - "state": "Active", - "userId": "userId", - "executionInfo": { - "createdDateTime": "2025-03-10T11:30:00Z" + it("submitJob should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + "job": { + "id": "jobId", + "state": "Active", + "userId": "userId", + "executionInfo": { + "createdDateTime": "2025-03-10T11:30:00Z" + }, + "specifications": { + "inputs": { + "scene": "sceneId" }, - "specifications": { - "inputs": { - "scene": "sceneId" - }, - "outputs": { - "modelingReference": { - "location": "modelingReferenceId" - } + "outputs": { + "modelingReference": { + "location": "modelingReferenceId" } - }, - "name": "jobName", - "type": "Reconstruction", - "iTwinId": "uuidIT" - } + } + }, + "name": "jobName", + "type": "Reconstruction", + "iTwinId": "uuidIT" } - }); + } + )); const jobCreate: JobCreate = { type: JobType.RECONSTRUCTION } as any; const result = await service.submitJob(jobCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.type).to.equal(JobType.RECONSTRUCTION); }); it("submitJob 401 error", async () => { - axiosPostStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: "Header Authorization was not found in the request. Access denied." - } - } + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: "Header Authorization was not found in the request. Access denied." } - }); + } + )); const jobCreate: JobCreate = { type: JobType.RECONSTRUCTION } as any; const result = await service.submitJob(jobCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("submitJob ill formed error", async () => { - axiosPostStub.rejects({ - response: { - status: 400, - data: { - bad: "response" - } - } - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response" + } + )); const jobCreate: JobCreate = { type: JobType.RECONSTRUCTION } as any; const result = await service.submitJob(jobCreate); - expect(axiosPostStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); // getJobs tests - it("getJobs should call axios.get and return a Response", async () => { - axiosGetStub.resolves({ - status: 200, - data: { - jobs: [ - { - id: "2e8b5984-15b1-45d5-8175-572583d8c3c8", - state: "Success", - userId: "c6ed4bad-b7d1-46d5-b9f3-7bae29cf39a9", - executionInfo: { - startedDateTime: "2025-11-24T08:12:33Z", - endedDateTime: "2025-11-24T08:14:00Z", - createdDateTime: "2025-11-24T08:12:09Z", - processingUnits: 0, + it("getJobs should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + jobs: [ + { + id: "2e8b5984-15b1-45d5-8175-572583d8c3c8", + state: "Success", + userId: "c6ed4bad-b7d1-46d5-b9f3-7bae29cf39a9", + executionInfo: { + startedDateTime: "2025-11-24T08:12:33Z", + endedDateTime: "2025-11-24T08:14:00Z", + createdDateTime: "2025-11-24T08:12:09Z", + processingUnits: 0, + }, + specifications: { + inputs: { + imageCollections: ["fc2746d5-7b62-4f00-9a88-1bfaa22475d7"], + }, + outputs: { + scene: "0bdccf29-452e-4610-b00c-d2a1f58c9100", }, - specifications: { - inputs: { - imageCollections: ["fc2746d5-7b62-4f00-9a88-1bfaa22475d7"], - }, - outputs: { - scene: "0bdccf29-452e-4610-b00c-d2a1f58c9100", - }, - options: { - recursiveImageCollections: false, - altitudeReference: "SeaLevel", - }, + options: { + recursiveImageCollections: false, + altitudeReference: "SeaLevel", }, - name: "Unified Job- FillImageProperties", - type: "FillImageProperties", - iTwinId: "2c8e4988-eb9b-4e5f-a903-8c7c18f3030a", }, - { - id: "7358a7f6-dcf3-4f81-8cdd-5df3396bb0c9", - state: "Failed", - userId: "c6ed4bad-b7d1-46d5-b9f3-7bae29cf39a9", - executionInfo: { - startedDateTime: "2025-11-24T13:31:39Z", - endedDateTime: "2025-11-24T13:31:39Z", - createdDateTime: "2025-11-24T08:12:12Z", - processingUnits: 0.0, + name: "Unified Job- FillImageProperties", + type: "FillImageProperties", + iTwinId: "2c8e4988-eb9b-4e5f-a903-8c7c18f3030a", + }, + { + id: "7358a7f6-dcf3-4f81-8cdd-5df3396bb0c9", + state: "Failed", + userId: "c6ed4bad-b7d1-46d5-b9f3-7bae29cf39a9", + executionInfo: { + startedDateTime: "2025-11-24T13:31:39Z", + endedDateTime: "2025-11-24T13:31:39Z", + createdDateTime: "2025-11-24T08:12:12Z", + processingUnits: 0.0, + }, + specifications: { + inputs: { + imageCollections: ["fc2746d5-7b62-4f00-9a88-1bfaa22475d7"], }, - specifications: { - inputs: { - imageCollections: ["fc2746d5-7b62-4f00-9a88-1bfaa22475d7"], - }, - outputs: { - scene: "66d86817-e959-4eea-ac65-176dde1093cf", - }, - options: { - recursiveImageCollections: false, - altitudeReference: "SeaLevel", - }, + outputs: { + scene: "66d86817-e959-4eea-ac65-176dde1093cf", + }, + options: { + recursiveImageCollections: false, + altitudeReference: "SeaLevel", }, - name: "Unified Job- FillImageProperties", - type: "FillImageProperties", - iTwinId: "2c8e4988-eb9b-4e5f-a903-8c7c18f3030a", - }, - ], - _links: { - next: { - href: "https://api.bentley.com/reality-modeling/jobs?$filter=iTwinId%20eq%202c8e4988-eb9b-4e5f-a903-8c7c18f3030a&$top=2&continuationToken=MTRmZDkwOGYtNWEzOS00YzY3LWFmMGYtMGMxMWQxYWNkMDhl", }, + name: "Unified Job- FillImageProperties", + type: "FillImageProperties", + iTwinId: "2c8e4988-eb9b-4e5f-a903-8c7c18f3030a", + }, + ], + _links: { + next: { + href: "https://api.bentley.com/reality-modeling/jobs?$filter=iTwinId%20eq%202c8e4988-eb9b-4e5f-a903-8c7c18f3030a&$top=2&continuationToken=MTRmZDkwOGYtNWEzOS00YzY3LWFmMGYtMGMxMWQxYWNkMDhl", }, }, - }); + }, + )); const result = await service.getJobs(Service.MODELING, "iTwinId eq 2c8e4988-eb9b-4e5f-a903-8c7c18f3030a"); - expect(axiosGetStub.calledOnce).to.be.true; - expect(axiosGetStub.firstCall.args[1].params).to.deep.include({ - $filter: "iTwinId eq 2c8e4988-eb9b-4e5f-a903-8c7c18f3030a", - }); + const calledUrl = new URL(fetchStub.firstCall.args[0]); + expect(fetchStub.calledOnce).to.equal(true); + expect(calledUrl.origin + calledUrl.pathname).to.equal("https://dev-api.bentley.com/reality-modeling/jobs"); + expect(calledUrl.searchParams.get("$filter")).to.equal("iTwinId eq 2c8e4988-eb9b-4e5f-a903-8c7c18f3030a"); + expect(calledUrl.searchParams.get("$top")).to.equal("100"); + expect(calledUrl.searchParams.get("continuationToken")).to.equal(""); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.false; + expect(result.isError()).to.equal(false); expect(result.value!.jobs).to.have.lengthOf(2); expect(result.value!.jobs[0].id).to.equal( "2e8b5984-15b1-45d5-8175-572583d8c3c8" ); expect(result.value!.jobs[1].state).to.equal("Failed"); - expect(result.value!._links).to.not.be.undefined; + expect(result.value!._links).to.not.equal(undefined); expect(result.value!._links!.next.href).to.include("continuationToken"); }); it("getJobs 401 error", async () => { - axiosGetStub.rejects({ - response: { - status: 401, - data: { - error: { - code: "HeaderNotFound", - message: - "Header Authorization was not found in the request. Access denied.", - }, - }, + fetchStub.resolves(mockFetchResponse(401, { + error: { + code: "HeaderNotFound", + message: + "Header Authorization was not found in the request. Access denied.", }, - }); + })); const result = await service.getJobs(Service.MODELING, "iTwinId eq 2c8e4988-eb9b-4e5f-a903-8c7c18f3030a"); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("HeaderNotFound"); }); it("getJobs ill formed error", async () => { - axiosGetStub.rejects({ - response: { - status: 400, - data: { - bad: "response", - }, - }, - }); + fetchStub.resolves(mockFetchResponse(400, { + bad: "response", + })); const result = await service.getJobs(Service.MODELING, "iTwinId eq 2c8e4988-eb9b-4e5f-a903-8c7c18f3030a"); - expect(axiosGetStub.calledOnce).to.be.true; + expect(fetchStub.calledOnce).to.equal(true); expect(result).to.be.instanceOf(Response); - expect(result.isError()).to.be.true; + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + const rdId = "rd-uuid-001"; + const sampleRealityData = { + id: rdId, + displayName: "Test RD", + type: "CCImageCollection", + createdDateTime: "2024-01-01T00:00:00Z", + modifiedDateTime: "2024-01-02T00:00:00Z", + lastAccessedDateTime: "2024-01-03T00:00:00Z", + dataCenterLocation: "East US", + size: 512, + }; + const sampleContainerDetails = { + type: "AzureBlobSasUrl", + access: "Read", + _links: { containerUrl: { href: "https://blob.core.windows.net/container?sas=token" } }, + }; + + it("getRealityData should return a Response on success", async () => { + fetchStub.resolves(mockFetchResponse(200, { realityData: sampleRealityData } )); + const result = await service.getRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(result).to.be.instanceOf(Response); + expect(result.isError()).to.equal(false); + expect(result.value!.id).to.equal(rdId); + }); + + it("getRealityData with iTwinId should append query param", async () => { + fetchStub.resolves(mockFetchResponse(200, { realityData: sampleRealityData } )); + await service.getRealityData(rdId, iTwinId); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}?iTwinId=${iTwinId}` + ); + }); + + it("getRealityData 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } })); + const result = await service.getRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("createRealityData should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(201, { realityData: sampleRealityData } )); + const create = { iTwinId, displayName: "Test RD", type: Type.CC_IMAGE_COLLECTION }; + const result = await service.createRealityData(create); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal("https://dev-api.bentley.com/reality-management/reality-data"); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(create); + expect(result.isError()).to.equal(false); + expect(result.value!.id).to.equal(rdId); + }); + + it("createRealityData 422 error", async () => { + fetchStub.resolves(mockFetchResponse(422, { error: { code: "InvalidRealityData", message: "Invalid payload." } } )); + const result = await service.createRealityData({ iTwinId, displayName: "Test", type: Type.LAS }); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("InvalidRealityData"); + }); + + it("createRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.createRealityData({ iTwinId, displayName: "Test", type: Type.LAS }); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("updateRealityData should call fetch and return a Response", async () => { + const updated = { ...sampleRealityData, displayName: "Updated RD" }; + fetchStub.resolves(mockFetchResponse(200, { realityData: updated } )); + const update = { displayName: "Updated RD" }; + const result = await service.updateRealityData(update, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal(update); + expect(result.isError()).to.equal(false); + expect(result.value!.displayName).to.equal("Updated RD"); + }); + + it("updateRealityData 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.updateRealityData({ displayName: "New" }, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("updateRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.updateRealityData({}, rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("deleteRealityData should call fetch and return a Response", async () => { + fetchStub.resolves(mockFetchResponse(204, {} )); + const result = await service.deleteRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal(`https://dev-api.bentley.com/reality-management/reality-data/${rdId}`); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("deleteRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.deleteRealityData(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("deleteRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.deleteRealityData(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataReadAccess should return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, sampleContainerDetails )); + const result = await service.getRealityDataReadAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/readaccess` + ); + expect(result.isError()).to.equal(false); + expect(result.value!.access).to.equal(Access.READ); + expect(result.value!._links.containerUrl.href).to.equal("https://blob.core.windows.net/container?sas=token"); + }); + + it("getRealityDataReadAccess with iTwinId should append query param only once", async () => { + fetchStub.resolves(mockFetchResponse(200, sampleContainerDetails )); + await service.getRealityDataReadAccess(rdId, iTwinId); + const calledUrl: string = fetchStub.firstCall.args[0]; + expect(calledUrl).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/readaccess?iTwinId=${iTwinId}` + ); + expect(calledUrl.split("iTwinId=").length - 1).to.equal(1); + }); + + it("getRealityDataReadAccess 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataReadAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataReadAccess ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataReadAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataWriteAccess should return a Response with WRITE access", async () => { + const writeDetails = { ...sampleContainerDetails, access: "Write" }; + fetchStub.resolves(mockFetchResponse(200, writeDetails )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/writeaccess` + ); + expect(result.isError()).to.equal(false); + expect(result.value!.access).to.equal(Access.WRITE); + }); + + it("getRealityDataWriteAccess with iTwinId should append query param only once", async () => { + fetchStub.resolves(mockFetchResponse(200, { ...sampleContainerDetails, access: "Write" } )); + await service.getRealityDataWriteAccess(rdId, iTwinId); + const calledUrl: string = fetchStub.firstCall.args[0]; + expect(calledUrl).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/writeaccess?iTwinId=${iTwinId}` + ); + expect(calledUrl.split("iTwinId=").length - 1).to.equal(1); + }); + + it("getRealityDataWriteAccess 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataWriteAccess ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataWriteAccess(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataList should return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [ + { id: "rd-001", displayName: "RD1", type: "CCImageCollection" }, + { id: "rd-002", displayName: "RD2", type: "LAS" }, + ], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/?continuationToken=token123" } }, + }, + )); + const result = await service.getRealityDataList(); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(false); + expect(result.value!.realityData).to.have.lengthOf(2); + }); + + it("getRealityDataList should send Prefer: return=representation when specified", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + await service.getRealityDataList(undefined, Prefer.REPRESENTATION); + expect(fetchStub.firstCall.args[1].headers["Prefer"]).to.equal("return=representation"); + }); + + it("getRealityDataList should send Prefer: return=minimal by default", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + await service.getRealityDataList(); + expect(fetchStub.firstCall.args[1].headers["Prefer"]).to.equal("return=minimal"); + }); + + it("getRealityDataList should pass filter as params", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + const filter: RealityDataFilter = { iTwinId, $top: 10 }; + await service.getRealityDataList(filter); + const calledUrl = new URL(fetchStub.firstCall.args[0]); + expect(calledUrl.origin + calledUrl.pathname).to.equal("https://dev-api.bentley.com/reality-management/reality-data"); + expect(calledUrl.searchParams.get("iTwinId")).to.equal(iTwinId); + expect(calledUrl.searchParams.get("$top")).to.equal("10"); + }); + + it("getRealityDataList should serialize array-valued params as repeated keys", async () => { + fetchStub.resolves(mockFetchResponse(200, { + realityData: [], + links: { next: { href: "https://dev-api.bentley.com/reality-management/reality-data/" } }, + }, + )); + const filter: RealityDataFilter = { types: [Type.LAS, Type.E57] }; + await service.getRealityDataList(filter); + const calledUrl = new URL(fetchStub.firstCall.args[0]); + expect(calledUrl.searchParams.getAll("types")).to.deep.equal(["LAS", "E57"]); + expect(calledUrl.search).to.not.include(","); + }); + + it("getRealityDataList 401 error", async () => { + fetchStub.resolves(mockFetchResponse(401, { error: { code: "HeaderNotFound", message: "Access denied." } } )); + const result = await service.getRealityDataList(); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("HeaderNotFound"); + }); + + it("getRealityDataList ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataList(); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("moveRealityData should call fetch on the move endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/move` + ); + expect(JSON.parse(fetchStub.firstCall.args[1].body)).to.deep.equal({ iTwinId }); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("moveRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("moveRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.moveRealityData(rdId, iTwinId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + it("getRealityDataITwins should return a Response", async () => { + fetchStub.resolves(mockFetchResponse(200, { iTwins: ["itwin-001", "itwin-002"] } )); + const result = await service.getRealityDataITwins(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/iTwins` + ); + expect(result.isError()).to.equal(false); + expect(result.value).to.deep.equal(["itwin-001", "itwin-002"]); + }); + + it("getRealityDataITwins 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.getRealityDataITwins(rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("getRealityDataITwins ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.getRealityDataITwins(rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + // associateRealityData tests + it("associateRealityData should call fetch on the iTwins endpoint", async () => { + fetchStub.resolves(mockFetchResponse(200, {} )); + const result = await service.associateRealityData(iTwinId, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/iTwins/${iTwinId}` + ); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("associateRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.associateRealityData(iTwinId, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("associateRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.associateRealityData(iTwinId, rdId); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("UnknownError"); + }); + + // dissociateRealityData tests + it("dissociateRealityData should call fetch on the iTwins endpoint", async () => { + fetchStub.resolves(mockFetchResponse(204, {} )); + const result = await service.dissociateRealityData(iTwinId, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(fetchStub.firstCall.args[0]).to.equal( + `https://dev-api.bentley.com/reality-management/reality-data/${rdId}/iTwins/${iTwinId}` + ); + expect(result.isError()).to.equal(false); + expect(result.value).to.equal(null); + }); + + it("dissociateRealityData 404 error", async () => { + fetchStub.resolves(mockFetchResponse(404, { error: { code: "RealityDataNotFound", message: "Not found." } } )); + const result = await service.dissociateRealityData(iTwinId, rdId); + expect(fetchStub.calledOnce).to.equal(true); + expect(result.isError()).to.equal(true); + expect(result.error!.error.code).to.equal("RealityDataNotFound"); + }); + + it("dissociateRealityData ill formed error", async () => { + fetchStub.resolves(mockFetchResponse(500, { bad: "response" } )); + const result = await service.dissociateRealityData(iTwinId, rdId); + expect(result.isError()).to.equal(true); expect(result.error!.error.code).to.equal("UnknownError"); }); }); diff --git a/typescript/packages/reality-capture/src/tests/service/test_helpers.ts b/typescript/packages/reality-capture/src/tests/service/test_helpers.ts new file mode 100644 index 00000000..8690557c --- /dev/null +++ b/typescript/packages/reality-capture/src/tests/service/test_helpers.ts @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Bentley Systems, Incorporated. All rights reserved. +* See LICENSE.md in the project root for license terms and full copyright notice. +*--------------------------------------------------------------------------------------------*/ + +/** + * Builds a minimal fetch `Response`-like object for use with a stubbed global `fetch` + * in tests, mirroring what `RealityCaptureService`'s `_request` helper relies on + * (`response.ok`, `response.status`, `response.text()`). + */ +export function mockFetchResponse(status: number, data?: any): globalThis.Response { + return { + ok: status >= 200 && status < 300, + status, + text: async () => (data === undefined || data === null ? "" : typeof data === "string" ? data : JSON.stringify(data)), + } as globalThis.Response; +} diff --git a/typescript/packages/reality-capture/src/tests/specifications/test_production.test.ts b/typescript/packages/reality-capture/src/tests/specifications/test_production.test.ts index 577bb867..8cbb5ac2 100644 --- a/typescript/packages/reality-capture/src/tests/specifications/test_production.test.ts +++ b/typescript/packages/reality-capture/src/tests/specifications/test_production.test.ts @@ -6,15 +6,7 @@ import { ThermalUnit, LODScope, LODType, - CesiumCompression, - SamplingStrategy, - LasCompression, - ProjectionMode, - OrthoFormat, - DSMFormat, - OrthoColorSource, ProductionInputsSchema, - OptionsLASSchema, OptionsOBJSchema, ExportCreateSchema, ProductionOutputsSchema, diff --git a/typescript/packages/reality-data-client/package.json b/typescript/packages/reality-data-client/package.json index a8b38e7c..9797202c 100644 --- a/typescript/packages/reality-data-client/package.json +++ b/typescript/packages/reality-data-client/package.json @@ -45,6 +45,7 @@ "publish-packages-dev": "beachball publish --config beachball.config.dev.js --keep-change-files" }, "dependencies": { + "@itwin/reality-capture": "file:../reality-capture", "axios": "^1.18.0" }, "devDependencies": { diff --git a/typescript/packages/reality-data-client/pnpm-lock.yaml b/typescript/packages/reality-data-client/pnpm-lock.yaml index 8ac6f720..7b77f8cd 100644 --- a/typescript/packages/reality-data-client/pnpm-lock.yaml +++ b/typescript/packages/reality-data-client/pnpm-lock.yaml @@ -8,13 +8,16 @@ importers: .: dependencies: + '@itwin/reality-capture': + specifier: file:../reality-capture + version: file:../reality-capture(@itwin/core-bentley@5.10.0) axios: specifier: ^1.18.0 version: 1.18.0 devDependencies: '@itwin/build-tools': specifier: ^5.0.2 - version: 5.10.0(@types/node@25.9.2)(supports-color@8.1.1) + version: 5.10.0(@types/node@25.9.2) '@itwin/certa': specifier: ^5.0.2 version: 5.10.0 @@ -29,10 +32,10 @@ importers: version: 5.10.0 '@itwin/eslint-plugin': specifier: ^5.2.1 - version: 5.2.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) + version: 5.2.1(eslint@8.57.1)(typescript@5.6.3) '@itwin/oidc-signin-tool': specifier: ^5.1.3 - version: 5.1.3(@itwin/core-bentley@5.10.0)(supports-color@8.1.1) + version: 5.1.3(@itwin/core-bentley@5.10.0) '@playwright/test': specifier: ~1.56.1 version: 1.56.1 @@ -62,10 +65,10 @@ importers: version: 5.1.0 eslint: specifier: ^8.36.0 - version: 8.57.1(supports-color@8.1.1) + version: 8.57.1 eslint-plugin-deprecation: specifier: ^1.3.3 - version: 1.6.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) + version: 1.6.0(eslint@8.57.1)(typescript@5.6.3) rimraf: specifier: ^4.4.1 version: 4.4.1 @@ -84,6 +87,61 @@ importers: packages: + '@azure/abort-controller@2.2.0': + resolution: {integrity: sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==} + engines: {node: '>=22.0.0'} + + '@azure/core-auth@1.11.0': + resolution: {integrity: sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==} + engines: {node: '>=22.0.0'} + + '@azure/core-client@1.11.0': + resolution: {integrity: sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==} + engines: {node: '>=22.0.0'} + + '@azure/core-http-compat@2.5.0': + resolution: {integrity: sha512-BoSmXPx2er1Ai+wKlDvj29jIQespCNBwEmKyZVHO2kEFsWbGjAjwMCGzug3DJM5/QYIV3vej0S1zcU5bq9fa8w==} + engines: {node: '>=22.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 + + '@azure/core-lro@2.7.2': + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} + + '@azure/core-paging@1.7.0': + resolution: {integrity: sha512-7GEAoIsaoBr6KELNRb8nypowCqvk8dnCHFCYg4XD4lOQGY2GqjQg5IhkRjyBFRO18CGSMq05PaNqSOE9GQro3g==} + engines: {node: '>=22.0.0'} + + '@azure/core-rest-pipeline@1.25.0': + resolution: {integrity: sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==} + engines: {node: '>=22.0.0'} + + '@azure/core-tracing@1.4.0': + resolution: {integrity: sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==} + engines: {node: '>=22.0.0'} + + '@azure/core-util@1.14.0': + resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} + engines: {node: '>=22.0.0'} + + '@azure/core-xml@1.6.0': + resolution: {integrity: sha512-e7lX/dk//F6Qf7BB6PTY4+p2yuOQtyOeHGyapYHNwqSp2OnYpwQt49A/Nin2XmKBQ69pwagR4k/lQBq8lbHQkA==} + engines: {node: '>=22.0.0'} + + '@azure/logger@1.4.0': + resolution: {integrity: sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==} + engines: {node: '>=22.0.0'} + + '@azure/storage-blob@12.33.0': + resolution: {integrity: sha512-2SX8oP8PyblUcAFZSg39c8Ls+tFjavM6sBeV+qpw33mRzRhI/5hrFJmJ/x0H9xx5l6ECPvgSP8uPxqTeVbHNIA==} + engines: {node: '>=22.0.0'} + + '@azure/storage-common@12.4.1': + resolution: {integrity: sha512-t14unw/WofGDUi7TKJrsyXyPsN+NLgRm7hMaq0llxNmTIzt7f257+6LE6FKIJPh88zLj6M7LPvzve0fEYg/L3A==} + engines: {node: '>=20.0.0'} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -176,6 +234,11 @@ packages: peerDependencies: '@itwin/core-bentley': ^5.0.0 + '@itwin/reality-capture@file:../reality-capture': + resolution: {directory: ../reality-capture, type: directory} + peerDependencies: + '@itwin/core-bentley': ^5.0.0 + '@itwin/service-authorization@2.1.1': resolution: {integrity: sha512-IqW/ALUccCHhQDM7HqRTNCHsoerioZsSPKf3AI054N2coEf59vYg5MqiSfaKGRMwkDM7C952kDC+M5BL4kA8qQ==} peerDependencies: @@ -210,6 +273,9 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -333,6 +399,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + '@typescript-eslint/eslint-plugin@8.60.1': resolution: {integrity: sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -419,6 +488,10 @@ packages: resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typespec/ts-http-runtime@0.3.8': + resolution: {integrity: sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==} + engines: {node: '>=22.0.0'} + '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} @@ -537,6 +610,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -596,6 +673,9 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -798,6 +878,9 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1253,6 +1336,13 @@ packages: fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-xml-builder@1.3.0: + resolution: {integrity: sha512-F74cZEdCvuw9P41GAC3rod4X04jjWGM1JPEv/GWSqFTWLsdyMSBMBMlm9Hk3GLBgLBbdBNY8yee0pQh2RBVESQ==} + + fast-xml-parser@5.10.1: + resolution: {integrity: sha512-IEMIf7298kXuZSRFoGfMYrl7is8LpavODgbNz1cwIudv7KwVFnuU+UsMporfq6PD6aXSlawZlARiA3UywCTfMw==} + hasBin: true + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -1505,6 +1595,10 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -1513,6 +1607,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -1690,6 +1788,9 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unsafe@2.0.0: + resolution: {integrity: sha512-2LdV822R+wmI86unXA93WCFpL6g+av8ynWk0nrHyJqGop5VoocYsSLFgN8jrfalT6iGeLNM4KXuVSsULP53kEA==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -1820,6 +1921,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libphonenumber-js@1.13.10: + resolution: {integrity: sha512-xJxrdqvbl2rtn2MaUJrUejz8J7/uZNC0V77oks2LxYrO/+ZtVpRmz+fEQMuu6VusnEB1fmpByiLS1WXecOnAnw==} + limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} @@ -2174,6 +2278,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -2566,6 +2674,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.4.1: + resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} + subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} @@ -2768,6 +2879,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} + engines: {node: '>= 0.10'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -2867,6 +2982,10 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + xml@1.0.1: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} @@ -2898,8 +3017,124 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + snapshots: + '@azure/abort-controller@2.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.11.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.11.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.5.0(@azure/core-client@1.11.0)(@azure/core-rest-pipeline@1.25.0)': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-client': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-paging@1.7.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.25.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.4.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.14.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-xml@1.6.0': + dependencies: + fast-xml-parser: 5.10.1 + tslib: 2.8.1 + + '@azure/logger@1.4.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/storage-blob@12.33.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-client': 1.11.0 + '@azure/core-http-compat': 2.5.0(@azure/core-client@1.11.0)(@azure/core-rest-pipeline@1.25.0) + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.7.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/core-xml': 1.6.0 + '@azure/logger': 1.4.0 + '@azure/storage-common': 12.4.1(@azure/core-client@1.11.0) + events: 3.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/storage-common@12.4.1(@azure/core-client@1.11.0)': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-http-compat': 2.5.0(@azure/core-client@1.11.0)(@azure/core-rest-pipeline@1.25.0) + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + events: 3.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -2918,14 +3153,14 @@ snapshots: esquery: 1.7.0 jsdoc-type-pratt-parser: 4.1.0 - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1(supports-color@8.1.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/eslintrc@2.1.4(supports-color@8.1.1)': + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.15.0 debug: 4.4.3(supports-color@8.1.1) @@ -2949,7 +3184,7 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@humanwhocodes/config-array@0.13.0(supports-color@8.1.1)': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.4.3(supports-color@8.1.1) @@ -2970,7 +3205,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@itwin/build-tools@5.10.0(@types/node@25.9.2)(supports-color@8.1.1)': + '@itwin/build-tools@5.10.0(@types/node@25.9.2)': dependencies: '@microsoft/api-extractor': 7.58.7(@types/node@25.9.2) chalk: 3.0.0 @@ -2979,7 +3214,7 @@ snapshots: fs-extra: 8.1.0 glob: 10.5.0 mocha: 11.7.6 - mocha-junit-reporter: 2.2.1(mocha@11.7.6)(supports-color@8.1.1) + mocha-junit-reporter: 2.2.1(mocha@11.7.6) rimraf: 6.1.3 tree-kill: 1.2.2 typedoc: 0.28.19(typescript@5.6.3) @@ -3019,19 +3254,19 @@ snapshots: '@itwin/core-bentley': 5.10.0 flatbuffers: 1.12.0 - '@itwin/eslint-plugin@5.2.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3)': + '@itwin/eslint-plugin@5.2.1(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) - '@typescript-eslint/parser': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) - eslint: 8.57.1(supports-color@8.1.1) + '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.60.1(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 eslint-formatter-visualstudio: 8.40.0 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint@8.57.1(supports-color@8.1.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1) eslint-plugin-jam3: 0.2.3 - eslint-plugin-jsdoc: 50.8.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1(supports-color@8.1.1)) - eslint-plugin-prefer-arrow: 1.2.3(eslint@8.57.1(supports-color@8.1.1)) - eslint-plugin-react: 7.37.5(eslint@8.57.1(supports-color@8.1.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1(supports-color@8.1.1)) + eslint-plugin-jsdoc: 50.8.0(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.57.1) + eslint-plugin-react: 7.37.5(eslint@8.57.1) + eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) typescript: 5.6.3 workspace-tools: 0.36.4 transitivePeerDependencies: @@ -3039,11 +3274,11 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@itwin/oidc-signin-tool@5.1.3(@itwin/core-bentley@5.10.0)(supports-color@8.1.1)': + '@itwin/oidc-signin-tool@5.1.3(@itwin/core-bentley@5.10.0)': dependencies: '@itwin/certa': 5.10.0 '@itwin/core-bentley': 5.10.0 - '@itwin/service-authorization': 2.1.1(@itwin/core-bentley@5.10.0)(supports-color@8.1.1) + '@itwin/service-authorization': 2.1.1(@itwin/core-bentley@5.10.0) '@playwright/test': 1.56.1 dotenv: 10.0.0 dotenv-expand: 12.0.3 @@ -3052,12 +3287,21 @@ snapshots: - electron - supports-color - '@itwin/service-authorization@2.1.1(@itwin/core-bentley@5.10.0)(supports-color@8.1.1)': + '@itwin/reality-capture@file:../reality-capture(@itwin/core-bentley@5.10.0)': + dependencies: + '@azure/storage-blob': 12.33.0 + '@itwin/core-bentley': 5.10.0 + class-validator: 0.14.4 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@itwin/service-authorization@2.1.1(@itwin/core-bentley@5.10.0)': dependencies: '@itwin/core-bentley': 5.10.0 got: 12.6.1 jsonwebtoken: 9.0.3 - jwks-rsa: 3.2.2(supports-color@8.1.1) + jwks-rsa: 3.2.2 transitivePeerDependencies: - supports-color @@ -3115,6 +3359,8 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} + '@nodable/entities@3.0.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3242,15 +3488,17 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3)': + '@types/validator@13.15.10': {} + + '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.60.1(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.60.1 - '@typescript-eslint/type-utils': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.60.1(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 8.60.1(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.60.1 - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.6.3) @@ -3258,19 +3506,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.60.1 '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(supports-color@8.1.1)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.60.1(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/project-service@8.60.1(typescript@5.6.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.6.3) '@typescript-eslint/types': 8.60.1 @@ -3293,13 +3541,13 @@ snapshots: dependencies: typescript: 5.6.3 - '@typescript-eslint/type-utils@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.60.1(eslint@8.57.1)(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(supports-color@8.1.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.60.1(eslint@8.57.1)(typescript@5.6.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 ts-api-utils: 2.5.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: @@ -3309,7 +3557,7 @@ snapshots: '@typescript-eslint/types@8.60.1': {} - '@typescript-eslint/typescript-estree@6.21.0(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -3324,9 +3572,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.60.1(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.60.1(typescript@5.6.3)': dependencies: - '@typescript-eslint/project-service': 8.60.1(supports-color@8.1.1)(typescript@5.6.3) + '@typescript-eslint/project-service': 8.60.1(typescript@5.6.3) '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.6.3) '@typescript-eslint/types': 8.60.1 '@typescript-eslint/visitor-keys': 8.60.1 @@ -3339,27 +3587,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(supports-color@8.1.1)(typescript@5.6.3) - eslint: 8.57.1(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) + eslint: 8.57.1 semver: 7.8.2 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.60.1(eslint@8.57.1(supports-color@8.1.1))(typescript@5.6.3)': + '@typescript-eslint/utils@8.60.1(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@typescript-eslint/scope-manager': 8.60.1 '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(supports-color@8.1.1)(typescript@5.6.3) - eslint: 8.57.1(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.6.3) + eslint: 8.57.1 typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -3374,6 +3622,14 @@ snapshots: '@typescript-eslint/types': 8.60.1 eslint-visitor-keys: 5.0.1 + '@typespec/ts-http-runtime@0.3.8': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@ungap/structured-clone@1.3.1': {} '@vercel/detect-agent@1.2.3': {} @@ -3500,6 +3756,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + ajv-draft-04@1.0.0(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 @@ -3552,6 +3810,8 @@ snapshots: ansi-styles@6.2.3: {} + anynum@1.0.1: {} + are-docs-informative@0.0.2: {} argparse@1.0.10: @@ -3806,6 +4066,12 @@ snapshots: chrome-trace-event@1.0.4: {} + class-validator@0.14.4: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.10 + validator: 13.15.35 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -4136,27 +4402,27 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.13.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1(supports-color@8.1.1)): + eslint-module-utils@2.13.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) - eslint: 8.57.1(supports-color@8.1.1) + '@typescript-eslint/parser': 8.60.1(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color - eslint-plugin-deprecation@1.6.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3): + eslint-plugin-deprecation@1.6.0(eslint@8.57.1)(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) - eslint: 8.57.1(supports-color@8.1.1) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 tslib: 2.8.1 tsutils: 3.21.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint@8.57.1(supports-color@8.1.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -4165,9 +4431,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1(supports-color@8.1.1)) + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.60.1(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -4179,7 +4445,7 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.60.1(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.60.1(eslint@8.57.1)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4191,14 +4457,14 @@ snapshots: has: 1.0.4 requireindex: 1.1.0 - eslint-plugin-jsdoc@50.8.0(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1): + eslint-plugin-jsdoc@50.8.0(eslint@8.57.1): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 espree: 10.4.0 esquery: 1.7.0 parse-imports-exports: 0.2.4 @@ -4207,7 +4473,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1(supports-color@8.1.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -4217,7 +4483,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 hasown: 2.0.4 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -4226,15 +4492,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.1(supports-color@8.1.1)): + eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.1): dependencies: - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 - eslint-plugin-react-hooks@5.2.0(eslint@8.57.1(supports-color@8.1.1)): + eslint-plugin-react-hooks@5.2.0(eslint@8.57.1): dependencies: - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 - eslint-plugin-react@7.37.5(eslint@8.57.1(supports-color@8.1.1)): + eslint-plugin-react@7.37.5(eslint@8.57.1): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -4242,7 +4508,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.3.2 - eslint: 8.57.1(supports-color@8.1.1) + eslint: 8.57.1 estraverse: 5.3.0 hasown: 2.0.4 jsx-ast-utils: 3.3.5 @@ -4272,13 +4538,13 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@8.57.1(supports-color@8.1.1): + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4(supports-color@8.1.1) + '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0(supports-color@8.1.1) + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.3.1 @@ -4409,6 +4675,20 @@ snapshots: fast-uri@3.1.2: {} + fast-xml-builder@1.3.0: + dependencies: + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 + + fast-xml-parser@5.10.1: + dependencies: + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.0 + is-unsafe: 2.0.0 + path-expression-matcher: 1.6.2 + strnum: 2.4.1 + xml-naming: 0.3.0 + fastest-levenshtein@1.0.16: {} fastq@1.20.1: @@ -4687,6 +4967,13 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -4699,6 +4986,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} iconv-lite@0.4.24: @@ -4863,6 +5157,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unsafe@2.0.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -4969,7 +5265,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jwks-rsa@3.2.2(supports-color@8.1.1): + jwks-rsa@3.2.2: dependencies: '@types/jsonwebtoken': 9.0.10 debug: 4.4.3(supports-color@8.1.1) @@ -5005,6 +5301,8 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libphonenumber-js@1.13.10: {} + limiter@1.1.5: {} lines-and-columns@1.2.4: {} @@ -5161,7 +5459,7 @@ snapshots: mkdirp@3.0.1: {} - mocha-junit-reporter@2.2.1(mocha@11.7.6)(supports-color@8.1.1): + mocha-junit-reporter@2.2.1(mocha@11.7.6): dependencies: debug: 4.4.3(supports-color@8.1.1) md5: 2.3.0 @@ -5354,6 +5652,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -5785,6 +6085,10 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.4.1: + dependencies: + anynum: 1.0.1 + subarg@1.0.0: dependencies: minimist: 1.2.8 @@ -5947,6 +6251,8 @@ snapshots: utils-merge@1.0.1: {} + validator@13.15.35: {} + vary@1.1.2: {} watchpack@2.5.1: @@ -6108,6 +6414,8 @@ snapshots: wtfnode@0.9.4: {} + xml-naming@0.3.0: {} + xml@1.0.1: {} y18n@5.0.8: {} @@ -6136,3 +6444,5 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} + + zod@3.25.76: {} diff --git a/typescript/packages/reality-data-client/src/RealityDataClient.ts b/typescript/packages/reality-data-client/src/RealityDataClient.ts index 18db666a..a298fd19 100644 --- a/typescript/packages/reality-data-client/src/RealityDataClient.ts +++ b/typescript/packages/reality-data-client/src/RealityDataClient.ts @@ -13,11 +13,29 @@ import type { CartographicRange, RealityDataAccess, } from "@itwin/core-common"; -import axios, { type AxiosResponse } from "axios"; +import axios from "axios"; import { ITwinRealityData } from "./RealityData"; import { getRequestConfig } from "./RequestOptions"; import { Project } from "./Projects"; import { Angle } from "./helper/Angle"; +import { + type RealityDataCreate as RCRealityDataCreate, + type RealityDataUpdate as RCRealityDataUpdate, + type Response as RCResponse, + type Type as RCType, + RealityCaptureService, +} from "@itwin/reality-capture"; + +/** + * A mutable AuthorizationClient that holds an access token. + * Used internally to bridge the per-call accessToken pattern of RealityDataAccessClient + * to the constructor-injected AuthorizationClient of RealityCaptureService. + */ +class TokenHolder implements AuthorizationClient { + private _token: string = ""; + public setToken(token: string) { this._token = token; } + public async getAccessToken(): Promise { return this._token; } +} /** Options for initializing Reality Data Client * @beta @@ -116,6 +134,9 @@ export class RealityDataAccessClient implements RealityDataAccess { public readonly authorizationClient: AuthorizationClient | undefined = undefined; + private readonly _tokenHolder: TokenHolder; + private readonly _rcService: RealityCaptureService; + /** * Creates an instance of RealityDataAccessClient. */ @@ -129,6 +150,9 @@ export class RealityDataAccessClient implements RealityDataAccess { if (realityDataClientOptions.authorizationClient) this.authorizationClient = realityDataClientOptions.authorizationClient; } + + this._tokenHolder = new TokenHolder(); + this._rcService = new RealityCaptureService(this._tokenHolder, { env: this._getEnv() }); } /** @@ -150,6 +174,39 @@ export class RealityDataAccessClient implements RealityDataAccess { } } + /** + * Derives the environment identifier from the baseUrl so that + * RealityCaptureService targets the same API environment. + */ + private _getEnv(): string | undefined { + if (this.baseUrl.includes("dev-api")) return "dev"; + if (this.baseUrl.includes("qa-api")) return "qa"; + return undefined; + } + + /** + * Resolves the access token (using the authorizationClient if available) + * and injects it into the internal TokenHolder so that the RealityCaptureService + * can consume it transparently. + */ + private async _prepareToken(accessToken: AccessToken): Promise { + const resolved = await this.resolveAccessToken(accessToken); + this._tokenHolder.setToken(resolved); + } + + /** + * Checks a RealityCaptureService response and throws a BentleyError + * when the response indicates an error. + */ + private _throwIfError(response: RCResponse): void { + if (response.isError()) { + throw new BentleyError( + response.status_code, + response.error?.error?.message ?? "Unknown error", + ); + } + } + /** * Try to use authorizationClient in RealityDataClientOptions to get the access token * otherwise, will return the input token @@ -196,29 +253,11 @@ export class RealityDataAccessClient implements RealityDataAccess { iTwinId: string | undefined, realityDataId: string, ): Promise { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${await this.getRealityDataUrl(iTwinId, realityDataId)}`; + await this._prepareToken(accessToken); try { - const realityDataResponse = await axios.get( - url, - getRequestConfig(accessTokenResolved, "GET", url, this.apiVersion), - ); - - // Axios throws on 4XX and 5XX; we make sure the response here is 200 - if (realityDataResponse.status !== 200) - throw new BentleyError( - 422, - iTwinId - ? `Could not fetch reality data: ${realityDataId} with iTwinId ${iTwinId}` - : `Could not fetch reality data: ${realityDataId}`, - ); - - const realityData = new ITwinRealityData( - this, - realityDataResponse.data.realityData, - iTwinId, - ); - return realityData; + const response = await this._rcService.getRealityData(realityDataId, iTwinId); + this._throwIfError(response); + return new ITwinRealityData(this, response.value, iTwinId); } catch (error) { return this.handleError(error); } @@ -488,28 +527,11 @@ export class RealityDataAccessClient implements RealityDataAccess { accessToken: AccessToken, realityDataId: string, ): Promise { + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${this.baseUrl}/${realityDataId}/itwins`; - const options = getRequestConfig( - accessTokenResolved, - "GET", - url, - this.apiVersion, - ); - - // execute query - const response = await axios.get(url, options); - - const iTwinsResponseBody = response.data; - - const iTwinsResponse: string[] = []; - - iTwinsResponseBody.iTwins.forEach((itwinValue: any) => { - iTwinsResponse.push(itwinValue); - }); - - return iTwinsResponse; + const response = await this._rcService.getRealityDataITwins(realityDataId); + this._throwIfError(response); + return response.value as string[]; } catch (error) { return this.handleError(error); } @@ -530,23 +552,13 @@ export class RealityDataAccessClient implements RealityDataAccess { iTwinId: string | undefined, iTwinRealityData: ITwinRealityData, ): Promise { + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = this.baseUrl; - const options = getRequestConfig( - accessTokenResolved, - "POST", - url, - this.apiVersion, - ); - - // creation payload - - const realityDataToCreate = { - displayName: iTwinRealityData.displayName, - classification: iTwinRealityData.classification, - type: iTwinRealityData.type, - iTwinId, + const realityDataToCreate: RCRealityDataCreate = { + iTwinId: iTwinId ?? "", + displayName: iTwinRealityData.displayName ?? "", + type: (iTwinRealityData.type ?? "") as RCType, + classification: iTwinRealityData.classification as any, dataset: iTwinRealityData.dataset, group: iTwinRealityData.group, description: iTwinRealityData.description, @@ -560,17 +572,12 @@ export class RealityDataAccessClient implements RealityDataAccess { termsOfUse: iTwinRealityData.termsOfUse, }; - const response = await axios.post(url, realityDataToCreate, options); - iTwinRealityData = new ITwinRealityData( - this, - response.data.realityData, - iTwinId, - ); + const response = await this._rcService.createRealityData(realityDataToCreate); + this._throwIfError(response); + return new ITwinRealityData(this, response.value, iTwinId); } catch (error) { return this.handleError(error); } - - return iTwinRealityData; } /** @@ -588,24 +595,12 @@ export class RealityDataAccessClient implements RealityDataAccess { iTwinId: string | undefined, iTwinRealityData: ITwinRealityData, ): Promise { + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = new URL(`${this.baseUrl}/${iTwinRealityData.id}`); - - const options = getRequestConfig( - accessTokenResolved, - "PATCH", - url.href, - this.apiVersion, - ); - - // payload - - const realityDataToModify = { - id: iTwinRealityData.id, + const realityDataToModify: RCRealityDataUpdate = { displayName: iTwinRealityData.displayName, - classification: iTwinRealityData.classification, - type: iTwinRealityData.type, + classification: iTwinRealityData.classification as any, + type: iTwinRealityData.type as RCType | undefined, iTwinId, dataset: iTwinRealityData.dataset, group: iTwinRealityData.group, @@ -620,22 +615,12 @@ export class RealityDataAccessClient implements RealityDataAccess { termsOfUse: iTwinRealityData.termsOfUse, }; - const response = await axios.patch( - url.href, - realityDataToModify, - options, - ); - - iTwinRealityData = new ITwinRealityData( - this, - response.data.realityData, - iTwinId, - ); + const response = await this._rcService.updateRealityData(realityDataToModify, iTwinRealityData.id); + this._throwIfError(response); + return new ITwinRealityData(this, response.value, iTwinId); } catch (error) { return this.handleError(error); } - - return iTwinRealityData; } /** @@ -652,24 +637,14 @@ export class RealityDataAccessClient implements RealityDataAccess { accessToken: AccessToken, realityDataId: string, ): Promise { - let response: AxiosResponse; + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${this.baseUrl}/${realityDataId}`; - const options = getRequestConfig( - accessTokenResolved, - "POST", - url, - this.apiVersion, - ); - - response = await axios.delete(url, options); + const response = await this._rcService.deleteRealityData(realityDataId); + this._throwIfError(response); + return true; } catch (error) { return this.handleError(error); } - - if (response.status === 204) return true; - else return false; } /** @@ -688,23 +663,14 @@ export class RealityDataAccessClient implements RealityDataAccess { iTwinId: string, realityDataId: string, ): Promise { - let response: AxiosResponse; + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${this.baseUrl}/${realityDataId}/iTwins/${iTwinId}`; - const options = getRequestConfig( - accessTokenResolved, - "POST", - url, - this.apiVersion, - ); - - response = await axios.post(url, undefined, options); + const response = await this._rcService.associateRealityData(iTwinId, realityDataId); + this._throwIfError(response); + return true; } catch (error) { return this.handleError(error); } - if (response.status === 200) return true; - else return false; } /** @@ -723,23 +689,14 @@ export class RealityDataAccessClient implements RealityDataAccess { iTwinId: string, realityDataId: string, ): Promise { - let response: AxiosResponse; + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${this.baseUrl}/${realityDataId}/iTwins/${iTwinId}`; - const options = getRequestConfig( - accessTokenResolved, - "DELETE", - url, - this.apiVersion, - ); - - response = await axios.delete(url, options); + const response = await this._rcService.dissociateRealityData(iTwinId, realityDataId); + this._throwIfError(response); + return true; } catch (error) { return this.handleError(error); } - if (response.status === 204) return true; - else return false; } /** @@ -759,24 +716,14 @@ export class RealityDataAccessClient implements RealityDataAccess { realityDataId: string, iTwinId: string, ): Promise { - let response: AxiosResponse; + await this._prepareToken(accessToken); try { - const accessTokenResolved = await this.resolveAccessToken(accessToken); - const url = `${this.baseUrl}/${realityDataId}/move`; - const options = getRequestConfig( - accessTokenResolved, - "PATCH", - url, - this.apiVersion, - ); - const payload = { iTwinId }; - - response = await axios.patch(url, payload, options); + const response = await this._rcService.moveRealityData(realityDataId, iTwinId); + this._throwIfError(response); + return true; } catch (error) { return this.handleError(error); } - if (response.status === 204) return true; - else return false; } /** diff --git a/typescript/packages/reality-data-client/tsconfig.tsbuildinfo b/typescript/packages/reality-data-client/tsconfig.tsbuildinfo deleted file mode 100644 index 7396dabc..00000000 --- a/typescript/packages/reality-data-client/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/accesstoken.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/assert.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/beevent.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/bentleyerror.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/bentleyloggercategory.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/statuscategory.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/besqlite.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/id.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/bytestream.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/classutils.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/compare.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/orderedid64iterable.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/sortedarray.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/compressedid64set.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/dictionary.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/disposable.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/expect.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/indexmap.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/jsonschema.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/jsonutils.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/logger.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/lrumap.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/observableset.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/oneatatimeaction.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/orderedset.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/partitionarray.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/priorityqueue.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/processdetector.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/stringutils.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/time.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/tracing.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/tuplekeyedmap.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/utilitytypes.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/typedarraybuilder.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/unexpectederrors.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/yieldmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/internal/repositorystatus.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/internal/besqliteinternal.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/internal/cross-package.d.ts","../../../node_modules/.pnpm/@itwin+core-bentley@5.3.1/node_modules/@itwin/core-bentley/lib/cjs/core-bentley.d.ts","./src/projects.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ambientocclusion.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/growablefloat64array.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/anglesweep.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/xyzprops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/point2dvector2d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/plane3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/matrix3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/indexedxyzcollection.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry4d/matrix4d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/growablexyzarray.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/range.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/transform.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/plane3dbyoriginandunitnormal.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/query/strokecountmap.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/longitudelatitudealtitude.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/polynomials.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curveextendmode.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/strokeoptions.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/loop.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/path.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/parityregion.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/unionregion.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvetypes.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curveprocessor.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvecollection.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/indexedxycollection.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/growablexyarray.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/offsetoptions.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/linestring3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/linesegment3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/arc3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/reusableobjectcache.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/clipplane.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/facetfacedata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/auxdata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/taggednumericdata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/polyfacedata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/indexedpolyfacevisitor.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/polyface.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/convexclipplaneset.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/segment1d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/unionofconvexclipplanesets.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/clipprimitive.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/clipvector.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/cliputils.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/proxycurve.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/akimacurve3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/bezierpolynomials.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/knotvector.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bezier1dnd.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/beziercurvebase.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/beziercurve3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/beziercurve3dh.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bspline1dnd.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/interpolationcurve3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bsplinecurve.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bsplinecurve3dh.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/coordinatexyz.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvechainwithdistanceindex.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/pointstring3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/spiral/transitionconditionalproperties.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/spiral/transitionspiral3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/cone.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/rotationalsweep.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/ruledsweep.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/sphere.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/toruspipe.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/topology/graph.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/polyfacebuilder.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/sweepcontour.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/linearsweep.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/solidprimitive.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/solid/box.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/geometryhandler.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bsplinesurface.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/geometryquery.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/spiral/xycurveevaluator.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/spiral/directspiral3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/spiral/integratedspiral3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curveprimitive.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvelocationdetail.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/ray3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/plane3dbyoriginandvectors.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry4d/point4d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/point3dvector3d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/angle.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/barycentrictriangle.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/surfacelocationdetail.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/bilinearpatch.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/ellipsoid.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/framebuilder.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/frustumanimation.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/growableblockedarray.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/indexedcollectioninterval.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/orderedrotationangles.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/point2darraycarrier.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/pointhelpers.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/point3darraycarrier.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/polylineops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/polygonops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/ray2d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/uvsurfaceops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry3d/yawpitchrollangles.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/constant.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/clipping/booleanclipfactory.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/convexpolygon2d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry4d/planebyoriginandvectors4d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry4d/map4d.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/geometry4d/momentdata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/clusterablearray.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/complex.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/pascalcoefficients.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/quadrature.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/range1darray.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/smallsystem.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/tridiagonalsystem.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/constructcurvebetweencurves.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvecurve.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curvefactory.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/curveops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/regionmomentsxy.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/curve/regionops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/bspline/bsplinecurveops.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/boxtopology.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/facetlocationdetail.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/indexededgematcher.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/indexedpolyfacewalker.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/multiclip/range2dsearchinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/multiclip/griddedraggedrange2dset.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/multiclip/griddedraggedrange2dsetwithoverflow.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/numerics/usagesums.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/rangelengthdata.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/polyfacequery.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/polyfaceclip.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/rangetree/point3darrayrangetreecontext.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/rangetree/linestring3drangetreecontext.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/polyface/rangetree/polyfacerangetreecontext.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/topology/spacetriangulation.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/serialization/imodeljsonschema.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/serialization/deepcompare.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/serialization/geometrysamples.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/serialization/serializationhelpers.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/serialization/bentleygeometryflatbuffer.d.ts","../../../node_modules/.pnpm/@itwin+core-geometry@5.3.1/node_modules/@itwin/core-geometry/lib/cjs/core-geometry.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hslcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hsvcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/colordef.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/image.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/gradient.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changesetprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/cartographic.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geodeticellipsoid.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geodeticdatum.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/projection.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/additionaltransform.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/coordinatereferencesystem.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/frustum.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/placement.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/thumbnail.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodel.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/code.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/entityprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/fonts.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/textstring.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/areapattern.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/linestyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometryparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/imagegraphic.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/base64encodedstring.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblockgeometryprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geometrystream.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/elementgeometry.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/subcategoryappearance.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/elementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/textureprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/thematicdisplay.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/analysisstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textfield.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblock.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textannotation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblocklayoutresult.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/atmosphere.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/authorizationclient.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/planarclipmask.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/terrainsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/backgroundmapsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/backgroundmapprovider.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodelversion.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/briefcasetypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/camera.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/catalogimodel.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changedelements.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changedentities.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewflags.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rgbcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/linepixels.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hiddenline.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featuretable.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/subcategoryoverride.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featuresymbology.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/clipstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/colorbyname.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/commonloggercategory.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/maplayersettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/spatialclassification.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/realitymodeldisplaysettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/contextrealitymodel.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/lightsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/mapimagerysettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/planprojectionsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/entityreference.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/renderschedule.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/groundplane.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rendertexture.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/skybox.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/environment.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/solarshadows.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/whiteonwhitereversalsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/contourdisplay.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/displaystylesettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/domains/functionalelementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/domains/genericelementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecschemaprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecsqltypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/elementmesh.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/emphasizeelementsprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featureindex.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/genericinstancefilter.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geocoordinateservices.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/boundingsphere.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/frustumplanes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometrycontainment.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometrysummary.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/texturemapping.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rendermaterial.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/graphicparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hilite.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodelerror.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/itwincoreerrors.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcsocket.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcwebsockettransport.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcwebsocket.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcsession.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelgeometrychanges.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipcappprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/localization.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/massproperties.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/materialprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelclipgroup.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/nativeappprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/octencodednormal.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/concurrentquery.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecsqlreader.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/qpoint.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/realitydataaccessprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/renderpolyline.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/sessionprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcconstants.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/backendtypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcmarshaling.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcrequest.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcoperation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcinvocation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpccontrol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcrequestcontext.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcroutingtoken.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcconfiguration.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/solarcalculate.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/cesiumionassets.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tileprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tween.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/txnaction.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewdetails.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcsessioninvocation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcpendingqueue.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcregistry.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcpush.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/devtoolsrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/snapping.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/imodelreadrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tilemetadata.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/elementgraphics.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/imodeltilerpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/snapshotimodelrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/testrpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpcrequest.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/openapi.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/bentleycloudrpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/bentleycloudrpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/rpcmultipart.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpclogging.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/b3dmtileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/compositetileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/gltftileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/i3dmtileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/imodeltileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/pntstileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tileset3dschema.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/rendermesh.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/packedfeaturetable.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/rendermaterialparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/rendertextureparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/annotations/fieldformatter.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/cross-package.d.ts","../../../node_modules/.pnpm/@itwin+core-common@5.3.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/core-common.d.ts","../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/index.d.ts","./src/requestoptions.ts","./src/helper/angle.ts","./src/realitydataclient.ts","./src/realitydata.ts","./src/reality-data-client.ts","../../../node_modules/.pnpm/@itwin+oidc-signin-tool@4.4.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/oidc-signin-tool/lib/cjs/testusers.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ambientocclusion.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hslcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hsvcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/colordef.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/image.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/gradient.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changesetprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/cartographic.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geodeticellipsoid.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geodeticdatum.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/projection.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/additionaltransform.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/coordinatereferencesystem.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/frustum.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/placement.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/thumbnail.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodel.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/code.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/entityprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/fonts.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/textstring.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/areapattern.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/linestyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometryparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/imagegraphic.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/base64encodedstring.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblockgeometryprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/geometrystream.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/elementgeometry.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/subcategoryappearance.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblock.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textannotation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/elementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/textureprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/thematicdisplay.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/analysisstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/annotation/textblocklayoutresult.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/atmosphere.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/authorizationclient.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/planarclipmask.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/terrainsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/backgroundmapsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/backgroundmapprovider.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodelversion.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/briefcasetypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/camera.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changedelements.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/changedentities.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewflags.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rgbcolor.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/linepixels.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hiddenline.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featuretable.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/subcategoryoverride.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featuresymbology.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/clipstyle.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/colorbyname.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/commonloggercategory.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/maplayersettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/spatialclassification.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/realitymodeldisplaysettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/contextrealitymodel.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/lightsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/mapimagerysettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/planprojectionsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/entityreference.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/renderschedule.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/groundplane.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rendertexture.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/skybox.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/environment.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/solarshadows.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/whiteonwhitereversalsettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/contourdisplay.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/displaystylesettings.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/domains/functionalelementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/domains/genericelementprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecsqltypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecschemaprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/elementmesh.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/emphasizeelementsprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/featureindex.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/genericinstancefilter.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geocoordinateservices.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/boundingsphere.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometry/frustumplanes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometrycontainment.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/geometrysummary.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/texturemapping.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rendermaterial.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/graphicparams.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/hilite.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/imodelerror.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/itwinerror.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcsocket.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcwebsockettransport.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcwebsocket.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipc/ipcsession.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelgeometrychanges.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ipcappprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/localization.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/massproperties.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/materialprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelclipgroup.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/modelprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/nativeappprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/octencodednormal.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/concurrentquery.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/ecsqlreader.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/backendtypes.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/qpoint.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/realitydataaccessprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/render.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/sessionprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcconstants.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcmarshaling.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcrequest.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcoperation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcinvocation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpccontrol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcrequestcontext.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcroutingtoken.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcconfiguration.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/solarcalculate.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tileprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tween.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/txnaction.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewdetails.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/viewprops.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcsessioninvocation.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcpendingqueue.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcregistry.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/core/rpcpush.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/devtoolsrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/snapping.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/imodelreadrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tilemetadata.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/elementgraphics.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/imodeltilerpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/snapshotimodelrpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/testrpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/wiprpcinterface.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpcrequest.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/openapi.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/bentleycloudrpcprotocol.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/bentleycloudrpcmanager.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/rpcmultipart.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/rpc/web/webapprpclogging.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/b3dmtileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/compositetileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/gltftileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/i3dmtileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/imodeltileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/pntstileio.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/tile/tileset3dschema.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/internal/cross-package.d.ts","../../../node_modules/.pnpm/@itwin+core-common@4.11.6_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/core-common/lib/cjs/core-common.d.ts","../../../node_modules/.pnpm/@itwin+oidc-signin-tool@4.4.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/oidc-signin-tool/lib/cjs/testfrontendauthorizationclient.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/serviceauthorizationclientconfiguration.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/serviceauthorizationclient.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/serviceclientloggercategory.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/oidcdiscoveryclient.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/introspection/introspectionresponse.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/introspection/introspectionclient.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/introspection/imsintrospectionresponse.d.ts","../../../node_modules/.pnpm/@itwin+service-authorization@1.2.3_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/service-authorization/lib/cjs/index.d.ts","../../../node_modules/.pnpm/@itwin+oidc-signin-tool@4.4.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/oidc-signin-tool/lib/cjs/certa/certacommon.d.ts","../../../node_modules/.pnpm/@itwin+oidc-signin-tool@4.4.1_@itwin+core-bentley@5.3.1_@itwin+core-geometry@5.3.1/node_modules/@itwin/oidc-signin-tool/lib/cjs/frontend.d.ts","./src/test/testconfig.ts","../../../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@types+chai-as-promised@7.1.8/node_modules/@types/chai-as-promised/index.d.ts","./src/test/integration/realitydataclient.test.ts","../../../node_modules/.pnpm/@types+mocha@9.1.1/node_modules/@types/mocha/index.d.ts","../../../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/index.d.ts","../../../node_modules/.pnpm/@types+eslint-scope@3.7.7/node_modules/@types/eslint-scope/index.d.ts"],"fileIdsList":[[72],[72,76,77],[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,103],[75,77],[101,102],[67,68],[75],[67],[72,78],[97],[250,432,462],[250,458],[453],[250,447,453],[250,446,453],[430],[104],[469],[467,468,470],[104,433,443,471],[250],[104,441],[476,477,479,482],[104,443],[428,429],[104,250],[104,467,482,487,488],[104,477,478],[427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588],[104,250,427,430,434,443,457,460,462,463,467,469,476,479,481,482,483,488,489,490,491,492,494,498,499,500,501],[460],[535],[104,250,444,445,455,456,457,459],[104,430,482],[104,465,495,497],[104,430,450,477,478,480,481],[104,450],[104,250,439],[104,250,430],[435,436,437,438],[104,250,441,447,450,451,454,455,460],[250,440,512],[250,435],[104,250,430,432,447,448,449,450,451,452,454,460],[250,440,460],[250,446],[104,250,476],[104,430,432,448,449],[250,430,431,462],[430,432,478,517],[104,430],[430,478],[104,250,433,434,439,441,442],[433],[565],[104,250,450,455,476],[522,523],[524],[104,250,433,439,443,472,475,526],[104,520],[250,477],[430,469,486],[104,469,470],[104,460,516],[104,250,444,445,460],[104,472],[534],[430,516],[104,250,477,480,482,493],[543,544,545,548,549,550,552],[547,551,553],[104,541,542,543,546,552],[537,543],[443,542,545,552],[104,443,542,544,545,546,547,548,551,552],[550,552,553],[104,443,542,543,544,546,548,551,552],[545,547],[525,547],[104,443,552],[104,250,443,444,445,446,460,461,507,511,514,515,529,532,535,548,550,552,559,565],[104,443,552,555,568],[443,550,552],[552],[545,550,551,552,553,575,576],[443,543,545,546,547,574,575],[574],[537,544,574],[542,543,545,546,547,552,573],[537,542,543,546,551,573,575],[542,543,544,545,552,574],[443,474,552],[550,551],[104,430,496],[250,434],[430,477],[104,486],[104,430,457],[250,496],[104,431,452,460],[250,430,432,461],[104,580],[104,250,455,456,460,567],[104,441,580],[104,250,480,555],[104,250,531],[104,250,442,445,457,460,473,494,502,532,558],[250,255,283],[250,276,286],[276,285],[250,270,276],[250,269,276],[104,253,269],[293],[291,292,294],[104,256,266,295],[104,256,266],[104,264],[301,302,304,307],[104,266],[251,252],[104,291,307,312,313],[104,302,303],[106,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,418],[104,106,250,253,257,266,280,281,283,284,291,293,301,304,306,307,308,313,314,315,316,317,319,323,324,325,326],[281],[360],[104,250,267,268,278,279,280],[104,253,307],[104,289,320,322],[253],[104,253,273,302,303,305,306],[104,273],[104,250,262],[104,250,253],[258,259,260,261],[104,250,264,270,273,274,277,278,281],[250,263,337],[250,258],[104,250,253,255,270,271,272,273,274,275,277,281],[250,263,281],[250,269],[104,250,301],[104,253,255,271,272],[250,253,254,283],[253,255,303,342],[104,253],[253,303],[104,250,256,257,262,264,265],[256],[250,285],[367,391,413,414,415,416,417],[104,305],[253,341],[253,303,359,364],[321],[104,250,273,278,301],[347,348],[349],[104,250,256,262,266,296,300,351],[250,302],[253,293,311],[104,293,294],[104,281,341],[104,250,267,268,281],[104,296],[341],[104,250,302,305,307,318],[368,369,370,373,374,375,377],[372,376,378],[104,365,366,368,371,377],[367,368],[266,366,370,377],[104,266,366,369,370,371,372,373,376,377],[375,377,378],[104,266,366,368,369,371,373,376,377],[370,372],[350,372],[104,266,377],[104,250,266,267,268,269,281,282,332,336,339,340,354,357,360,373,375,377,385,391],[104,266,377,381,394],[266,375,377],[377],[370,375,376,377,378,400,401],[266,368,370,371,372,399,400],[399],[367,369,399],[366,368,370,371,372,377,398],[366,367,368,371,376,398,400],[366,368,369,370,377,399],[375,376],[104,253,321],[250,257],[253,302],[104,311],[104,253,280],[250,321],[104,254,275,281],[250,253,255,282],[104,405],[104,250,278,279,281,393],[104,264,405],[104,250,305,381],[104,250,356],[104,250,265,268,280,281,297,319,327,357,384],[109,117,150,151,179,181,185,190],[110,146,154,189,190],[110,116,117,134,156,179,187,188,189,190],[110,114,116,117,156,179,186,187,188,189,190],[116,117,118,123,133,134,153,154,155,179,185,187,189,190],[154,190],[115,116,117,118,119,122,123,133,134,152,154,156,157,158,159,160,179,185,186,187,188,189,190,191],[116,117,118,119,123,134,156,161,179,187,188,189,190],[113,160,161,190],[116,117,118,154,179,181,188,189,190],[110,179,186,190],[150],[107,109,111,113,114,115,116,117,118,136,137,150,185,189,190,192],[109,114,116,117,136,145,147,150,185,190],[107,109,113,115,116,117,118,123,128,130,136,137,138,145,147,148,149,181,185,190],[113,114,115,116,117,136,137,146,148,150,185,190],[113,114,115,116,117,118,136,137,138,144,150,185,187,190,192],[113,114,115,116,117,135,136,137,138,145,146,150,185,187,190],[107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,169,170,171,172,174,175,176,177,178,179,180,181,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,235,236,239,240,241,242,243,244,245,246,247,248,249],[108,109,112,114,116,117,118,121,122,123,130,133,134,135,150,179,181,185,186,187,188,189,190,191,192],[134,135,136,179,181],[116,117,179,181,190],[116,117,118,119,122,123,125,130,133,134,179,181,185,186,187,188,190],[115,116,117,122,123,124,125,128,129,179,181,185,186,187,190],[114,128,185,186],[108],[108,109,113,118,123,124,125,128,130,134,136,144,167,170,181,185,187,190,191,192,196],[109,117,185,187,190],[113,116,117,123,124,125,128,130,133,134,185,187],[116,117,118,119,122,123,133,134,135,136,150,152,157,160,161,164,179,181,183,184,186,187,188,190,191],[124,125,126,127,128,130,185],[124,125,126,127,130,185],[116,117,130,144,163,165,177,179,180,185],[116,117,122,123,133,134,150,179,181,185,186,187,188,190,191],[107,109,113,115,116,117,118,119,122,123,132,133,135,150,179,181,185,186,187,188,190,191],[113,123,129,130,179,181,185,190],[123,192],[123,124,128,129,130,179,181],[122,123,129,130,179,181,185,186,190],[109,116,117,118,179,181,190,191],[116,117,118,123,133,134,179,185,187,188,190],[185],[124,126,127,134,135,136,161,162,167,179,185,215],[113,115,116,117,123,124,125,128,130,133,144,173,185,187,190,215],[117,118,123,134,146,166,167,179,182,187,188,190,192],[108,117,118,123,134,146,167,179,181,187,188,190,192],[192],[112,116,117,133,134,146,161,166,185,187,190],[187,188,190],[123,124,126,128,129,130,179,181],[104,108,109,110,189,190],[191],[107,191,192],[117,187,190,191],[116,117,179,187,188,190,194],[108,109,112,116,117,118,120,136,150,179,185,187,188,189,190,192,194],[109,116,117,190,191],[117,190],[110,124,125,126,127,130,134,135,136,144,152,156,157,158,160,161,162,163,164,165,167,168,169,170,171,172,176,178,180,181,185,188,190],[107],[109,110,112,113,115,116,117,131,190],[109,110,112,113,114,116,117,118,190,191],[113],[109,110],[109,116,117,190],[191,192],[109,110,117,189,190,191,192],[112,191,192],[189,190,191],[109,111,117,189,190,191,192],[109,111,117,187,189,190,191],[109,110,131],[109,191,192],[109,113,190],[109,189,191,192],[109,110,113,117,118,189,190],[109,110,111,113,114,115,116,187,190,191],[113,116,118,122,186,190],[109,110,113,115,117,190,191],[109,110,116],[109,116,117,118,186,190,191],[113,115],[109,110,112,116,189,190,191],[116,123,134,179,196],[112,117,190,191,192],[114,117,190,191],[109,112,117,189,190,191],[109,112,114,115,117,190],[189,190],[109,111,118,187,188,190,191],[107,121],[110,115,132,190,199],[110,116,207],[107,108,109,110,116,120,187,190],[107,116],[109,110,189,190],[190],[116],[116,117],[110,116,144],[110,113,131,144,190,191,193,206],[110,142,144,190,192],[143,144],[109,116,234],[109,116],[110,116,117,139,142,143,179,181,190],[109,110,113,115,116,117,123,124,126,127,128,132,134,136,144,146,168,169,170,171,172,173,176,178,179,181,185,190],[123,128,134,138,144,145,147,174,190,191],[110,115,116,117,132,139,140,141,190],[111,113,114,115,124,128,130,134,135,144,173,185,187,190,192,215,231,232,234,238],[115,116,237],[134,186,190],[109,186],[109,144,231],[181],[107,108,109,110,112,114,115,116,117,118,123,124,125,126,127,130,134,135,136,138,140,142,144,146,147,161,162,164,165,167,168,169,170,171,172,176,177,178,180,181,185,187,189,190,192,214],[109,124,125,126,127,130,134,135,136,140,141,144,152,157,158,160,161,162,163,165,167,168,169,170,171,172,176,178,179,180,181,190,191,209],[154],[112,116,117,130,134,177,179,181,190],[110,116,117,123,130,134,177,179,181,188,190],[109,116,117,128,130,175,177,179,181,190],[116,117,128,130,175,177,179,181,187,192],[116,117,128,130,175,177,179,181,185],[117,130,168,169,170,171,172,176,178,181],[108,110,112,116,117,123,124,134,136,177,179,181,188,190],[113,117,123,128,130,144,147,174,187,190],[110,116,117,130,136,177,179,181,188,190,192],[109,110,117,135,190],[134,190],[426,598],[426,590,599],[104,589],[591,592,593,594,595,596,597],[595],[589,591],[602],[606,609],[606,607,608],[609],[105,423,424],[104,419,420,421,423],[104,105,419,420,421,422,424],[420,423],[104,250,419,423,424,601,602,603],[104,600]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"15c1c3d7b2e46e0025417ed6d5f03f419e57e6751f87925ca19dc88297053fe6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0c84cfc9e188a537e7587d955f39c76a83d3afaec2ab24015798edba01f2db25","impliedFormat":1},{"version":"b1bc2ae81b0dad9055308a38c854d36896dd46c40172af76b33cef1fffca97b8","impliedFormat":1},{"version":"ccfa24d9ac456358f8223405cb4c43e080238259eb4608c21211aac663393b4e","impliedFormat":1},{"version":"68ce5bf206d1f99dfaf2cff0c1c1e4e7da0800cc1d155daebd12794144455cc8","impliedFormat":1},{"version":"47bf565cb66f6746d881ff1bc86cde3c483467a35e5025699a625e608334a35e","impliedFormat":1},{"version":"7b4d51dc076974910885c1e0b95ecede0d0f598aead100c3ba86ccdfee8b51eb","impliedFormat":1},{"version":"28e1aad947ec11f04ce973cbb245c7c4d666eff4f587a440e477171d38026af4","impliedFormat":1},{"version":"843b0122572d3e64c52a88b958a9d5b28f8969b96a6beecd7e329ddaf46425ce","impliedFormat":1},{"version":"f51ceeeb5ba474ecb26c36f3d34171dd7edf91b3c35061dae34f626e48b3dadb","impliedFormat":1},{"version":"51390d4c9171737e9bec8bdc5c2413b6e7708f48a5ae5e3d132dcd8d9f235e9d","impliedFormat":1},{"version":"6cb8c19e8e4e38e9e9495fa425978643fd314fc9ce03ea4d832af436ce1ab473","impliedFormat":1},{"version":"a5ed69440ede594132c813a8c6d621244c64aa842a2138bbadc34cf2a92d7c75","impliedFormat":1},{"version":"50abdb460cc00d7e0ef09e2d09576cb059572bfe96f437ca48e46b6b42781ab6","impliedFormat":1},{"version":"6a4140b50955aecf3a0d9e08f4d884c0552799ebcdf73f0d19af6b84429cbd09","impliedFormat":1},{"version":"85aabb086e4cde390cd6e6377b4ec4dd0a426ad5e4e0b325b2cf664c14009b08","impliedFormat":1},{"version":"2f8bcbda9eb84bc7187c05f18850ec77731eddf667756d462bc6353b36d18495","impliedFormat":1},{"version":"4a1ab9215fce72fa6e7c9bdc850c9730df7268b8a8c7bc1c85feef2ade94b1f2","impliedFormat":1},{"version":"2caef0a3071d11f8e267eda30c782bc959eb25867fdb11fc88655b9b93569cf4","impliedFormat":1},{"version":"3d1e8238dc367b4f5c8c8ffb84fe1e366586255ee87d86511b647e603c2d376d","impliedFormat":1},{"version":"6ae6f488b83ac044c46b30e3856e3505d591e70f28f78bfed1628326d89ea4ba","impliedFormat":1},{"version":"07ba1714e8fb2a30f13502011889d32ffd78f7b54de159d763fdfd9f1dfb2b56","impliedFormat":1},{"version":"423ba34fbcbd124e05af000a5e3e2ddd5b660535a36768dde77121e53b47cb4b","impliedFormat":1},{"version":"b587802f1225754f7829c7e3e9cf183446f6711279f92745d7e05a2284ab1860","impliedFormat":1},{"version":"ad75bace30d5439562e9579f702772982b19739f22e155e58d8c627c9f1d3d46","impliedFormat":1},{"version":"63026680f748552c0010a2abb99f91b009ec5f579d589699cf97d71fd08bac57","impliedFormat":1},{"version":"4c600ed15412f57184cefb23fc39fd6eab2d85c4b23b66c1bd731588ff37590f","impliedFormat":1},{"version":"9a1e73cc2813ac3dae8ad28e2862e8c4a5397a3452baab43e7aeec9bb9c251da","impliedFormat":1},{"version":"d82ae0da23fe903aab28da7a5c08db073f6c5c68c760893fd0b60ba44e448961","impliedFormat":1},{"version":"bb48dc37288bfe124b7e65282e3d3f9afacbeffdbb0e5361eb355c6ad2a92be8","impliedFormat":1},{"version":"65c46ff6773c25abd2d20fce440eecc1925dc8cf9e4b17d19118345db4396db3","impliedFormat":1},{"version":"73b234e0d5316166e63e25cef9a32ad6ac53c4016c58722d6b989829dc1ad3d0","impliedFormat":1},{"version":"92bab51d5da2bbbbf6d57f68b5f72b54415a2ad8841fc23b86f89548d0f2247c","impliedFormat":1},{"version":"f35c14e9b2384fd0a9225d0c045e2af20235881e15ae3fd2529a9daae71279df","impliedFormat":1},{"version":"ca8761f52e553465e57890678e6182e98dee01eb48c180fcd81009fdbf47b16e","impliedFormat":1},{"version":"3a865d516031dcd4f96646ba62de455202d4c1212cb0122bd98fc394d8959972","impliedFormat":1},{"version":"150df1ebcd60cfc081591ecf1e5556abd07b408c75970646c60b125e99c834e6","impliedFormat":1},{"version":"001e6fcb68ab8bf6e39840cdd9320dd5a85ac55c0280af340816fa7edd26850b","impliedFormat":1},{"version":"f6df34c8788f1d8b7a182df2a117518e0a1bc1666633424ed31a8242bef971b9","impliedFormat":1},{"version":"e9d88f18add87b17b4e3472de9a4b49709d0caabfc4b5af84338f9fe8a8aa2de","impliedFormat":1},{"version":"9bb85895e372854c0070595862cbce9581fa5baf0fa41d479731d7244c51a5ec","impliedFormat":1},"480750ad6a39d26767ba9b6c383b318c9ded7447093990777a52296420d0c80f",{"version":"8adf39b75996ee76992cae1326db26186e80b9d5671f842f550565830f33b4f6","impliedFormat":1},{"version":"1178e3d79cf20db7b4c32410cd3e8ab6e8d4cd5b84870cc41d139eaf895e3f89","impliedFormat":1},{"version":"369c4030c5113a216a95fac3b02911bad3a991afaa929ce12997e37e4a6d4d8f","impliedFormat":1},{"version":"6be5b07c57246d3b7aeca3881183e814b11ea2e95150adbad7ef5f99570d6ffa","impliedFormat":1},{"version":"456610f88c8a663ebf8192da12dec13efcc29b5ebb16b1c47ecca1c9cbc82b43","impliedFormat":1},{"version":"916cdfc640b81467695aa0f497b9ab8efa3f294141a95c5f94796d4636c07df1","impliedFormat":1},{"version":"8196522643a965d9feb7e19120652496816bebd3b6b16963af5a955837b5bfe3","impliedFormat":1},{"version":"98c36b0c101b1bb720e54bdff8bb63575cd7780dbdb53854d234f5fec3cad61b","impliedFormat":1},{"version":"0502613e346ec8478d9ed092769c50d4850a4bac06db486e3fa7d14eca67fcf6","impliedFormat":1},{"version":"00b631b145388a214ae1d6cdd5f76f8475dcd4c51f2b24ceb42decf8459b8ae5","impliedFormat":1},{"version":"a5ebebda314c554c8f9db6a6d32dfc772254000c88eaccfb51a9f438671b9de6","impliedFormat":1},{"version":"b91a0b05256917c13f251e8d117cd6c474247e01300edc1f5a75fd8bc9dea893","impliedFormat":1},{"version":"d2ba47a36d56706e8418cd6ea94e16a4ef21b578bc46d71468fa0893d847b472","impliedFormat":1},{"version":"067411e9f90a06d75f3c0fbaa8eae46bda95390b32bb7d35a2e9c7b99f35c511","impliedFormat":1},{"version":"582713d8bf414f6b4660e542dfc5e6217a0281bc8a1e0f41a7cdb2f972ef3dbb","impliedFormat":1},{"version":"55f8f15eaa662d1c0843f018f72f28e4738ad2b95b6f6bb2c36d8db863926936","impliedFormat":1},{"version":"69cc24f0fb2043a549bb9e2e053302bd77c9f498198a1c0afe94726606e414a1","impliedFormat":1},{"version":"1bcf66392e2f84b40a88d661adcfc759c1b08b4c5d5de820ae31aad14df167b4","impliedFormat":1},{"version":"7e4ac38015cff0fcd38e5580183c516b2dd62c3ec35e5efa98adbd37fe62cb12","impliedFormat":1},{"version":"6a2c5a9ae506172b076cdc9d2126b1c3f29d783079f6c184b2e981bb8fb4db31","impliedFormat":1},{"version":"faa26147fd21f56347ce2bed4ba972da0958cb7e8a1a71cc1e8a8f56a2a5fa87","impliedFormat":1},{"version":"c8b1d99e48aa5b16dddcd2d2d6163d90cb9f52fb3539b360a316e4b7b0984b57","impliedFormat":1},{"version":"de9f57985f000e7ab0a5c94ef8081b185aca75ab964e88b0a1ef781b65e388fa","impliedFormat":1},{"version":"1d3ea35544be3877c4383a996ec416e7719a90bd3241372441734f706b7f8863","impliedFormat":1},{"version":"e3bdf1784572dc9787cbc47242689f355a4d6c1e8101ddfb965154e83d491791","impliedFormat":1},{"version":"a84cadc18f1c745b4afe98f454b6f08dc43f7e6ae1883884e286f634c5605817","impliedFormat":1},{"version":"64aff1f7a3d748d1c7c99a6da907f9c85ffc7648df930b20ee701c5436ebdc54","impliedFormat":1},{"version":"b6cc5341f9242cd1ec23cd7c7e4056b1b6600c02caa12f0eb35b4e726f03ac53","impliedFormat":1},{"version":"d7d02d7a9f80c984e7619c9b0474a10444abe3e74e09ed58ae1265f749ec281f","impliedFormat":1},{"version":"28baa134f527d152743052f0b91c90e2c24370f3d4884c39cc4b3daaba57c61d","impliedFormat":1},{"version":"d770244bdd2f41ff21d9de4cf3aad386fa62074654e05b7d105ee4507ec536e5","impliedFormat":1},{"version":"71a3fa7f966bae6ed84dec78f4fb8ad49def15a057cd967881619ec6caf17194","impliedFormat":1},{"version":"8c47344c0558c16b382d94e8bd2acb0045a335d99f88681da250f26bab5d559a","impliedFormat":1},{"version":"ad1d1c7ec425f600506cc497534d811b1699312ced75a4159f66dc96bb1af233","impliedFormat":1},{"version":"1ae648fde9d64c1644a5e8ddf1bed0fedc401fc63c1969f4dbb4298ebea7187b","impliedFormat":1},{"version":"1c6ec00a40838deb32ece1f81bb13e89b6b4b8779e6e85a5ab3c38598aede223","impliedFormat":1},{"version":"0b3af85ca88f52d9b6d4a991c48936aca57a39dbcff23a495dbc9acbee159202","impliedFormat":1},{"version":"02311eb99bc5d5812dac2381e9f2c15a4c92c9351d32f592d526704a3961e8a6","impliedFormat":1},{"version":"50cc707d01c6ecfe18bcca56f9ef4edae4324a8f2ea984ed7210b5c5edd0dc3a","impliedFormat":1},{"version":"1576bacb0d8a7cb3fc6f66b17190a7cc8ce30dd9e04c3fb35c3c92073e13e57e","impliedFormat":1},{"version":"17b9a89162bcef683416431868878233a17037e40d017eb62d3ad1d854d32116","impliedFormat":1},{"version":"64e255d381c223f0d8aa5faf2977fb2871d8bc229bac72566f7dd1554f5e40b5","impliedFormat":1},{"version":"11e8652850439a06f1665186017e7d09d683fbd299af4e50d93ec0443126c575","impliedFormat":1},{"version":"2dfdbdce602136b8b53f63759eb46237f095195935735a2a27d98bde989b7e58","impliedFormat":1},{"version":"396c87b020c1f95f75595a35a14ba3ab4dc766eb720a9cd624ae834ebe1b51c9","impliedFormat":1},{"version":"d614d18d6f5544594d86c88f7ec8569585592f1bbb72e75de5d177c39b47a2d5","impliedFormat":1},{"version":"3f0ba7bf70637c81323921ac35ad415a873321a7954a5b961a8666afcc0cf15b","impliedFormat":1},{"version":"c46a172b51e42e9966b3e44cc5326eb6e92e3206252b6a6b9654a695282ecf0b","impliedFormat":1},{"version":"a0877ca90a5b202380d7cf528fce0cbe1c34af9d3b1d7f3f348dda5f1f4a1358","impliedFormat":1},{"version":"42335ea867ea62a0f691fe4adde4c60a7df00806cefcefea7a79c3be0b9acb44","impliedFormat":1},{"version":"b33a46c9f1d193bb0cb6d6d4744f161a8c0e437abe7b51011e7296a2b94ccdf4","impliedFormat":1},{"version":"139b56c9c0a5730219351545eca7691e303f9bb7706ed5420a35666896347ef1","impliedFormat":1},{"version":"93bf237b78177f95399956b9b38d85464b11b3e7e5b5273dfd6593d41a8a2e59","impliedFormat":1},{"version":"2c7e9bd310955ba9c9d857b3510a13e4ac601e276ed4870b9eb40c6130bc3b8b","impliedFormat":1},{"version":"8bbb8637831058d7ec1e6554f16255466cf3bcd7cf99298bccb0233ccbc89759","impliedFormat":1},{"version":"b04dbbdd6def6f7a662ba5064edce039ae0411344490d4d5ee344f041b00d7a3","impliedFormat":1},{"version":"6cce6c3e23ec1f6708024a8b3cfaf5edb0c13fbdca679daa609db1db9b4a9a6f","impliedFormat":1},{"version":"a0dddf821ca62998b5d01a698c9a5ce7670972dfb5ed227485b575310f510cc5","impliedFormat":1},{"version":"c41e21f6336bda2e3ab9ab22d5bc42f4ea4c3c0aa1b56ee326a3acd617acd8db","impliedFormat":1},{"version":"e3fd8f0125d0d8118fc23c2d8a9bfdd69dd3622b2897e3b62c62096538e7b597","impliedFormat":1},{"version":"543344be390b6db9d586acfcf660c4c191180cdcef29e146053cd41ff417b00f","impliedFormat":1},{"version":"ab152fb5dc93f5e79eca5a2153ec4cff2c1f45a0c0c87d74b37308bd5b28533d","impliedFormat":1},{"version":"25d0d435f5e8c823c5c67e8ef2becceda6f2bcf1a0c84df9db27946defbb1daa","impliedFormat":1},{"version":"8cefcfbf962778937365a2d193612cb37f4ec4ff215a922c9f26ebe575aaa51e","impliedFormat":1},{"version":"419fea73db2d510c81566b7a8a1f376f197f1467b6d4184669bf25d6ec7c9368","impliedFormat":1},{"version":"afdb5dfb7e8127705a2b78e1be06dd945b748f40b5a4d70030d335b2ff0f237d","impliedFormat":1},{"version":"22ed1c61749af74d9920bb306b53ea66253d8b582906fa18911b168d0d8ea9ec","impliedFormat":1},{"version":"a5bef66e967c7584b2d5d8fcdf9425525a4dd3c8b954bb19ff8cf7c127e19993","impliedFormat":1},{"version":"60554dd6d55341be3cadea7176dee65c01646b94d46b1c692197dd02108d2bb1","impliedFormat":1},{"version":"3d0ef8d429d95fed1a4020a427d03f8c2b53e066d252fc37cee3ac71043bfdf1","impliedFormat":1},{"version":"84991cfe19ad60b92ca3dc08f93953cd5573a71e10e6e5e53e7f2b323546694d","impliedFormat":1},{"version":"ec7d65dda91630d8411b7d11d787197eada35bf750b4663ee9876a6902ab0301","impliedFormat":1},{"version":"2b5f44d1012c3881641abc51e2b360ddacb43bbe6e61092602643b4f355a21e2","impliedFormat":1},{"version":"d1c854600f3240c48eb0bb7190aac22b35ab7d3af33b570cf98376bdcf083e20","impliedFormat":1},{"version":"6d3b2546bb32c9a4685ecf98bbde89b6ce90f2b5e5abcd9e9d5380ef00a9b866","impliedFormat":1},{"version":"68b2d185a0c76ad15fefffeb64c9b2ca72e4c8c3c13da41f3af4754508c9da9a","impliedFormat":1},{"version":"2b93b51efd38945813801756863b4f1d0b8d11008f503f6c6287949b59149467","impliedFormat":1},{"version":"63785c420c6ca50108ffd6ed8e8fac38e8e5c5a777d8ebfbe7cc27f58b1de9ea","impliedFormat":1},{"version":"9e5ed85a0af6b39c21bcea7a6c3f7b742979a80d864db7b280bf15ab64bd63e1","impliedFormat":1},{"version":"a5d456d8d0243ec40c647710bee1534f1fc338771d6699632d2fba09fdfb0157","impliedFormat":1},{"version":"7e6d8fb55a9d347c19609a370e3a280d1a03dc0eeaeb910b8efa020c00765601","impliedFormat":1},{"version":"a5c7fdc9b1f635dd05ffbad8578e3af3420fc9fc0da4d3164126d77dba2d103c","impliedFormat":1},{"version":"6c8165101abd95a166bcc6d1344b515c65b503ee8f6d1752a93c7390497c54fd","impliedFormat":1},{"version":"618ad9b0cac704096ab18c5d12ae64df8222809e45520acdac99c5efb13b16d5","impliedFormat":1},{"version":"6bb00db44eec11e8faec412a9eabe3ec76664859e9fad1d430bb5667bf27c727","impliedFormat":1},{"version":"b806393f4fa78fb5f2eb6b159b26b5f5183605f6f7dfd261174651f95a4b4502","impliedFormat":1},{"version":"d8c22e9ea6c928dca12a04d68fd7d849708a3c77b272b788abace439e11e2f9b","impliedFormat":1},{"version":"b20d0347e16e301a67bc71173b90fe5a19065b677b59915a7819efbbc42ae595","impliedFormat":1},{"version":"b2e8c86798f7dc8b6a7a62c990dd308190514da15bafd2e7c6698610b67b23a0","impliedFormat":1},{"version":"8378f16254fd06430be6ad6fd47dd390accb1c5278c222e23a3f1c3fc5bb694d","impliedFormat":1},{"version":"0d4c162bbc781e69f61d4292ed9ece30e4c1255f4640f77ab744e082fdd1ee7e","impliedFormat":1},{"version":"ff9e83f781b2150a66a0244bcb54c4c91dcf752df94b5c1e809eeb61f3746d01","impliedFormat":1},{"version":"98ee3b45fd7599bd9bc452642f110f29b9549253f33c1dbc76b22a5039f933dc","impliedFormat":1},{"version":"8e0a8e5703ab5c9a7b9b994e039ad4141ee66c767fefddb766f3ad31aeed8fba","impliedFormat":1},{"version":"883b5ced33452d437c03e777c7d11c1c1de88a333ccaff49e92343a96b53183f","impliedFormat":1},{"version":"1cfc4bd2caad9b1ad09943009d8f94be08ea4bb88c94dcdb67e45f98ec4e2450","impliedFormat":1},{"version":"a61418b55e9714cc7ec8c4c4b89baf12ba5036873dd3c8ddb7a087a4ca7997d3","impliedFormat":1},{"version":"ce0b19e4e6b290ad0ed687b7851f5411f8051bc0469085a6b28953ccb35a08b7","impliedFormat":1},{"version":"acdde7135112a09d2418d04d4aeff7b80bcd32d6be30e9a3e70b4b11b9ee9cbd","impliedFormat":1},{"version":"6122db0a5456728209d885638b81c3237f436016d737ed8564e513deb21aeda2","impliedFormat":1},{"version":"f6047fe34d1062ab7b6c9927cbf5f748e072c11177a8718737387a5b213e7f14","impliedFormat":1},{"version":"1ad5dbf1acb9db9c17b359e9915e94775f2aba0969ee0cbf6e501fbe7f856c65","impliedFormat":1},{"version":"60dfb0693579d61c0aff2cc3844e442e638ec713e971a7c258f73e2557d83981","impliedFormat":1},{"version":"1c5cf312102c1ec30b8f614fe17fac922b58e53e5918b42c3cd746c87ea96b01","impliedFormat":1},{"version":"34d8e31a9b0ea88c00c5fab1ed13e25fcb9df57821d00696e484e2cd72a7386b","impliedFormat":1},{"version":"a499e79a220e05d0107705b87a293235cf25bea83871cd939b7790f8f63193cf","impliedFormat":1},{"version":"246f5749897c326aefd3651c0a63bde2022bff7749a0fb3c87b77fd50f6ef038","impliedFormat":1},{"version":"1da47a790828233e3b03c308af0a16c328fa3c21768bf6e78659246ac0de3250","impliedFormat":1},{"version":"d07a0005ce5b46815c6b1554c4b12113716f417d0b6898c32e806df8800c6913","impliedFormat":1},{"version":"733a281e06278ca9146de9aef3e189fc4f502dcc8e43dad19d7e0b85bc3c7c38","impliedFormat":1},{"version":"d016855cc6ce7b92321a663f68cae212207b130237d245ff02f8340754d368c7","impliedFormat":1},{"version":"25de6fd6692cd1914edb9337729f70211e70292754b350f0ff5443a88bcc3d3e","impliedFormat":1},{"version":"fdb8554ed3ec7946a2128bfdd351484a7a89f9038996432a454f87043fa3fa2d","impliedFormat":1},{"version":"9b910aaeb74156ce668d14a07759bdd235dbb168458c20476396703978ed5893","impliedFormat":1},{"version":"5edab762fb7106d69861761aa935a455bbb2a840b752204e14bb8e52c3d74813","impliedFormat":1},{"version":"17955a14fefeb1a6948ddd93145beceedc741cde3a6ed715522691ac7d85e2fa","impliedFormat":1},{"version":"5601d5842362c9e567dd8dc42b92999fc48b5078baecd1c956ee2325d330cda2","impliedFormat":1},{"version":"e8e461e6d967b9d49fbfbf41927007a14ad18a4974c6c7ba3d4af4a552d160b4","impliedFormat":1},{"version":"060c674e4ce775f14f4da65032032be2d9161032bf1505a0df24e829942bd0d1","impliedFormat":1},{"version":"e169c8d7896508b168cd0963a819b5c5d5a19462b57192c856dc0f37c18694d7","impliedFormat":1},{"version":"b7da89d98a22fa8ec43bf1cb0d77ac9b301ca7f0cbae50c9af9b65d47eef86f9","impliedFormat":1},{"version":"dd1817b824c49e7e20709362caa64ae4d1ecb4fec4b78f708e28a8f2e227cb54","impliedFormat":1},{"version":"1c4cb01cf281a0203c585db99a1bd2eb2ea6e2ea6a07cff24c1ba536d985ab1c","impliedFormat":1},{"version":"2e0a1db3c4a99df316143639cb6531d7a9a7963917800550c3be05871da74d58","impliedFormat":1},{"version":"db21b44d182326eef0fcec0f7ec3d1f150de34f59e752d996931406557fc3d8d","impliedFormat":1},{"version":"147102191a91931da00f6e4818fe664c57826defc56991a55622ec7444724804","impliedFormat":1},{"version":"bfdef1d4f8c04e68f1a29d83ea3a4ba9fbb9a1898602b2653c0a80c76564fa6a","impliedFormat":1},{"version":"b6192f34f335d9a469d2537e1a9d57ad7103f2a5651cc3a39d028dce21a902dd","impliedFormat":1},{"version":"8de5de7b11798400bb87b7aaf75fca389a45e9a1c2be2a4eeddd02ebca42ba28","impliedFormat":1},{"version":"fc8e91b2f63736d8e7e66b64da4ef94e51a76742d1d105e6f910f5efc0c7e342","impliedFormat":1},{"version":"336b45ce269616bfc8c46957d3a104faad7d9d4d18a985a51cca23cb19b3edcf","impliedFormat":1},{"version":"d7fca0137296fb9e9cecf458f861e041c38d0dee009fb354cf13ec1a5f5a4dc2","impliedFormat":1},{"version":"1ef742e7e980f49ac15e47793158ec9010b742d85d53e34092c9734fbc158bc7","impliedFormat":1},{"version":"45cf60ecc05a835a2e3c069f8e4dce3df1d2bc0525e3cebe3f5defa759b2b097","impliedFormat":1},{"version":"b34b09dfddce0a97f257d0d7a0d4352ccff972ca86ae1aeb1c3a397aec1f9c75","impliedFormat":1},{"version":"bb599e9ff7f90a8c315d5dcc9a0345afe0da27eef496651ac721e368ceb2f8ab","impliedFormat":1},{"version":"2b063d5f33e899eaf95715841317c4e3a958cd422f27a2761234eb0efa525dd6","impliedFormat":1},{"version":"561a7797475571e49102f75453d14e53ec1adde810aa0272398a2be6d9b6e675","impliedFormat":1},{"version":"09134279af2dc944e9e634a7e37c1fa409538e1b7df369f4afdda1f1b3a04945","impliedFormat":1},{"version":"0c5ed31d81fb7d72d01be928100a6f9020f098a6c96fef35d841bb89c537318b","impliedFormat":1},{"version":"23f1b2b2ca405a86c0ee55111fd2433b41c51ad70b536dd7f1dff9dcd6f423a7","impliedFormat":1},{"version":"c01607a443c37e487b5ffe6436f2743473aef23c322688c60393df3a1ee33b8c","impliedFormat":1},{"version":"fa9425ba065a2fce00d99a344d7ffe283fe9831f2b002bc7feef1a0fde2c6b95","impliedFormat":1},{"version":"8baa5de4323a9071f59b09d2006c3f7ed1b55df7f819d84481f5363367bae4b4","impliedFormat":1},{"version":"2651c15e337d11e498a2302419efed80850a1399032c73f334c638b569ec0424","impliedFormat":1},{"version":"4c780f28af9c74d9d2feb8f296ce16ea08e7105856da4c00414d4683bc15a172","impliedFormat":1},{"version":"4e187114c33f9f7b0226b7a2b67a1f52f0667da0c15fafa87af701918b899765","impliedFormat":1},{"version":"5f7ec4a13efafc821e3afbe3947eeaa1e64e39a9dc7af296fe8270e3b6254dd6","impliedFormat":1},{"version":"5d6068c02ce0d398272936de1ca44550f253c9237eca4986e1a029d6539e015e","impliedFormat":1},{"version":"a03a2920e649f65b2c0f782139ce3f87fae1fe8bb74a05be26adab33244992e1","impliedFormat":1},{"version":"8c54bba7055d3f92469c8bc82d897295ed876d684c07be7806c675d284512010","impliedFormat":1},{"version":"0543261bae710950d4aa2f20c622a630b1e48cf64ccf9049919482119a6a418d","impliedFormat":1},{"version":"1e09a546409b008425a77322975fd4fc8fa5b25fd77cc893265584777d2e40b8","impliedFormat":1},{"version":"d1e41b5e7eb390edf80daefbbd715ea0635a53c6609f67cef24a3c27c3ef8ac4","impliedFormat":1},{"version":"662d8be18aa6ef1c463ff5130d996cb9594a79e6a5a0a73a78e6eb58c0e7119e","impliedFormat":1},{"version":"a45f7378534b37fb613f43a9ca39f9abbe7e97ab181e36949b06dae19a22127f","impliedFormat":1},{"version":"e9e86a79d55fa4c09cd3314fe33a8a9b9ac2e158d051ffe4e6bd19c0b84082ee","impliedFormat":1},{"version":"1075cb3d1b1f5b7cabe98d4015a7cb56054fa6f594b6e50d1e2a8ef2373a9140","impliedFormat":1},{"version":"1d87498c8b22eed2d4bed0243df4ba9807d8d26e8833d859cbceefaa69d33aea","impliedFormat":1},{"version":"71509956f22e8ce2e77ad8119c3d26f461a7cee582a62d496b69e59d8ac57e30","impliedFormat":1},{"version":"6a5e01506ff3013b13363f8d605bd8d85b088d650dee6569d2c62af266182ef5","impliedFormat":1},{"version":"9d594decd11cbd856152d090f50b0b64b40d3185f2f2de7d0ec50dc94e367da3","impliedFormat":1},{"version":"ca4c6a71225fe8aa2d7fd78df2ac15240a90111aaca31e57bf1bd7a9cf839839","impliedFormat":1},{"version":"dcb44402a8dbb979508dc1c21b292ef050d96616089ba6af47aeeaa154caf95c","impliedFormat":1},{"version":"58caa97171d4f8a8caeb43817d4a6fb76f74270ee27a0448724c303bc925c324","impliedFormat":1},{"version":"f634a6ede00a283133ba631eacc8c9e91b750e59c8185709f17743526dffe0fd","impliedFormat":1},{"version":"dc7a0968d53a9c69335a850e7c1661e75a59b8bf3944859727b6e6c986ebb91a","impliedFormat":1},{"version":"c47e33fde8d14e66d1ca3d334731cc057154a8cf611789a834f91988bef58027","impliedFormat":1},{"version":"b17a37eeb7449541ee9e9d397cd40d6636a038790a6cfe58aec0d6ca86d7a615","impliedFormat":1},{"version":"ab073fd0f72cf813cdbab65ff3d4b228163c7e4a2bc05005729cf9829201db4d","impliedFormat":1},{"version":"56d204458f7859dfb74222acfb4e3ee2b809853ea078f7b0b467ad07390c40a6","impliedFormat":1},{"version":"3389d6e8cf972b15a4c967c0cce22cda6bc6432c25d39737c1f6293ab7e0434a","impliedFormat":1},{"version":"4ace97237738968c48d31badd7c5b157130eb0809993cb32d2aa833ff3d0fe11","impliedFormat":1},{"version":"01880fc9d097cb63446a1c3ebd6ff5b1c881012e9fc1b380bfd9ebede24ca97b","impliedFormat":1},{"version":"7d9adb5abccc66a15d024e0db3b836416107725a0100d6aeffc1e23ea6354b9b","impliedFormat":1},{"version":"8549e454f84a8b476bd53ae3a62739b5faa9e6ffce568e8558ccc4b38e315f00","impliedFormat":1},{"version":"7c9e3eb8c05d04e7c4e57891b5e1b573504fd90cdae9b632dd4a65fc7bc675c3","impliedFormat":1},{"version":"72a9c7654b1b34cf90d4e5432e8ebd0d4d9c60611dc35ecf6bedc4a05cc341f8","impliedFormat":1},{"version":"99ed22973d93200f6bb59224a44f93bcef2f39cfe834e6e1d3efd9ef575c9e92","impliedFormat":1},{"version":"a79d8b37e7e2f0106f57c4d3c3afdb7519ac3397ed7b19b7b3d2c9e2caa38025","impliedFormat":1},{"version":"5601ab8b92fc268efbd79815346279f6d90e447ce7264ae4b2f2c826a012606e","impliedFormat":1},{"version":"d9c02626ce3fa6322527462b33f16232a52858902dcdf0ae2b1847bacaba6ced","impliedFormat":1},{"version":"fa3738d60edb11b64b0103eb02ab925c3301adcd5a12dedad4c2cbe305b9b8d9","impliedFormat":1},{"version":"ffda5b61aadaac78799befb98c81f774685c5f6df08550d2ba8a23ea6cd82f2f","impliedFormat":1},{"version":"9c124dd51574bd8976fc6b4b7e4a7113c08222bfb1529aa3ae7cce15796f3d3f","impliedFormat":1},{"version":"7ed88c8574b057610bd29091bb867468a75e95c6ab82c702972614705aa9f075","impliedFormat":1},{"version":"0d4a49098aab93508ef17d4d2c12cb5caf0c7c36c2f3782411430e56add33f13","impliedFormat":1},{"version":"d16a2359570c636f99285edb748abbac7c5124b002d27c0ed9419da16fc94966","impliedFormat":1},{"version":"7c013a39f01334eaa8bee4d391abb112d1934cc3f6d5f83a6b7449ab96dfda9e","impliedFormat":1},{"version":"46347d9ba6d355004fc13b01a8b5556eaa6a9680a5292bacabfe3cf9c3ed7261","impliedFormat":1},{"version":"ab8310f36396431111c93e9ca1a9a037e48c22d8dce313c78de13adbabf2cd0b","impliedFormat":1},{"version":"982171b404cd228cd1cd0a9a2ee810f5f08f7fb20ca018bb84592e78fcc68152","impliedFormat":1},{"version":"539fef261dccc907204c70e69ad6bdef79ec5b01bfb701b4c48b7c735bead103","impliedFormat":1},{"version":"24b7c3d2cf7dbd731806203c55b9fd48efd2a91e61363159bdc6f5e7522a1ade","impliedFormat":1},{"version":"fb9e1fdcc158b2fc49a6ab93cc6cd8f16c37b9ecdaca0bc22d6927383ed864b5","impliedFormat":1},{"version":"1b5a974ad593388bbaeab00b2dd867128b46203cbb8bf78278a8e7d977930f4b","impliedFormat":1},{"version":"7d8de31d358e2a44b87a2814fcad24fdc6fb538fa370866937031801add88d01","impliedFormat":1},{"version":"f826e81501f8147244d8861dc31af3b052778ef7133d9d95bbe1300e8ce41582","impliedFormat":1},{"version":"7a7a7ae4d5e1a26c4c6b3e0bbd8fb1b5257283faef447ccf127955a73790e023","impliedFormat":1},{"version":"b74a39386f80a71e606ac6b45942c0254a9f4178147c8a2979c25161c1795c49","impliedFormat":1},{"version":"0feab15c5935c8589f6d6e507d8318b2fd2f8c36ed2340a67232958a6cba8367","impliedFormat":1},{"version":"5e3af66007762d5710a94a87988024091893a887169f48198eed109e41b4a134","impliedFormat":1},{"version":"878322c54b2527f8d55b393d6a0d9e5db7872023073ec83305ae93ca64204599","impliedFormat":1},{"version":"c56805cb4622dd6728215b15030285920846ed77e12be0e6ebce0ade4bfecb0d","impliedFormat":1},{"version":"a3542e6fcda2cbb7ef26ea4547b9a413987b9682879bfe9b6d62bd3e1ea5c4bc","impliedFormat":1},{"version":"d6208d5ff9b5b02ca80eb77c053b18c85b449bd2dc71faeb144ce3baecd4acbb","impliedFormat":1},{"version":"a7cb1d01fc96c17b548cbe67b4d5391d901f2052abfc7642e5e5365710a4ff20","impliedFormat":1},{"version":"2a13b2c9a552bd0401e1f855acbb3f5dafec36f36c88bd187ec004ae18bca1f0","impliedFormat":1},{"version":"b5cce958440239e1f803a667308d7036f3234e7c0a3de893f32c9ab6452ee4fc","impliedFormat":1},{"version":"f8063d002ba29841795a07a5339df9df4c54971980a26747aed9026a1568a647","impliedFormat":1},{"version":"9534178ddefa237057f177f2034e20c308c42c88dd61bc072eddc0a644f8a860","impliedFormat":1},{"version":"d333cb68cda06f938758d6f20e3c6b60e639e59927c5415619af17c091da1b62","impliedFormat":1},{"version":"f24f31d0b3ca006ed05b7a4b5fda23a4fac5d9c32a3bfdc5929cf7de7420ab52","impliedFormat":1},{"version":"17d39cc706199fe96d85c5bcb4a1dac3693b595a9c5ec1bb3f05d048a663898b","impliedFormat":1},{"version":"f1ee4104cff885b1ae022353d1f6ea66ad91f4b534c1a6210795d7ea9c71fba3","impliedFormat":1},{"version":"c3921a47463d80f1b5200bdd4c7f0247fba04cc9c89404ce082d5e57dcb445da","impliedFormat":1},{"version":"8fdabe79cf609194031cb0c60fc15426b283ea38cd66db436ddc41ea9a2ba732","impliedFormat":1},{"version":"c86e1bd0879ad4dd4821d2e1c706dda396cdcd9d6dc999ece7d84760080d5740","impliedFormat":1},{"version":"04193e2169cfe772966359fb4607b9bfc8f8ba014fe16e85c4c636c10635a85a","impliedFormat":1},{"version":"9abc4d7a0ed1382e6bcd7b33fe2ef6110c1ffe30967490509d8754e9422fc2d7","impliedFormat":1},{"version":"341fe3082677dac17aabd97f6ba7cee1d59bccc01dbd83245243d9ec83fc6756","impliedFormat":1},{"version":"1b19137641615d983ea2bc1335860a8937c39ed717ea2d35c86c131bc55ec236","impliedFormat":1},{"version":"819d063bbf46bd0adbcfc8d795ec3d39936990b966e62b0c340587e82aa2c78a","impliedFormat":1},{"version":"79eeba68c2948729dd40077460c12f620c4c55c378df91e45c5cf253a317d2b7","impliedFormat":1},{"version":"6f518d3297f921f939432263025b4177ae84ce4421035e3f02f3d00b5cf86002","impliedFormat":1},{"version":"d938df6182337389213b5e0f75d20d06c6b03776a7f3a104065a658579fec44e","impliedFormat":1},{"version":"eb12f4189dc522d96b93d8bd3f3e5bf467833b9029d39c71a2a4a253cf51c81c","impliedFormat":1},{"version":"6f185664efa82bfc56eb17682aa451c501749174e072fa6ee348521449e28435","impliedFormat":1},{"version":"94693d2177f946556d6fb97fd1cf2a341cfdc72feddfb6468c074ef70d9171bd","impliedFormat":1},{"version":"f18b32b868dbc9a52023e0426f061e97ba9ba74c36ec24af0999ff273db5c177","impliedFormat":1},{"version":"767862fceb5400cbd6db5bf19ec95359e39cf818befd2f627ac9ee833b434c25","impliedFormat":1},{"version":"eca1abe8ca2e6c1a7262bfde9e42485bb692504f94c7496aa5683ac4b854eacc","impliedFormat":1},{"version":"08baeeb4dcac00f6a9699d14b41cfce976438271d07bea3db68a55b8bf5b816c","impliedFormat":1},{"version":"d374cc3b7dc1cfb1727e3da450bcc71fdac928f86ec1a05f17bf05786927a40d","impliedFormat":1},{"version":"03c48897915b6c629a075b21dee9e8fd438a72fac365ffeed6083de0f1c5149f","impliedFormat":1},{"version":"fa087840010925cc098ab796516a3cc01c753cd90d3929dab33ba29c33e7d187","impliedFormat":1},{"version":"d488b1d4534f154c2d36433ec775660e03afdb354b305be30f65706ce9cc661c","impliedFormat":1},{"version":"f32106278811900db04f2c617276a6602ff74175a7a2324432d9de4b8d540d20","impliedFormat":1},{"version":"c5ff7d90f09b2cac0a8d7d6efdd39283edf076945b88d7af5314e987fefe0e2c","impliedFormat":1},{"version":"68c912481dbddcba54b58103a23075bdad3deced6ed644d563ec1b4c5f8287be","impliedFormat":1},{"version":"e8aa915e9463e9c39eb20e3d4a7355d52e08ef89524cd662b3a5b1c94db3cf50","impliedFormat":1},{"version":"c7ef7fb1ab026d38913ec21e633b6b21497adb662298abd7acda2c8ec7cf3f61","impliedFormat":1},{"version":"4bc6818d3e7685e9cdd2040a9a418e6e8e1f379c867654aa567ecd99d379f5cc","impliedFormat":1},{"version":"8f252eb4b53f283cf4152974a596d2d5c0367e009270224bf532126ca16715bb","impliedFormat":1},{"version":"1493a2605b11f8cd17d56c5af04ef4b4a67004930dec9de884c232fffe5e98ea","impliedFormat":1},{"version":"505cd8eb686ed801bbfdc432dd00bb1f164f5db27551e4149195dd35c5c8a03b","impliedFormat":1},{"version":"d0d3cec49f4183bee63ac5367b23a34929c458a56b8ce7a18d4a3c70b6ec3912","impliedFormat":1},{"version":"f55acb56b508344172c556ed93663c652442d2cd64da1456d822fee4b86203ac","impliedFormat":1},{"version":"31b97cbfc7f107c1d6ba90c44aeef032a2f2ea185b8d50973819d052b701ebaf","impliedFormat":1},{"version":"9bbfa044c37c78bb1d54bfa9aa07f8d4f04a4260d3a2caaee1f501a036fcfa25","impliedFormat":1},{"version":"649486b764db0718d3dee5d03fd223cdf38e4cadfe6a1465bf9ea477ead7707a","impliedFormat":1},{"version":"cf2da3c5c6a5fae27b36170f6a634b7a0f0b9fbe33de00a6e0225e2b9ac7ff9b","impliedFormat":1},{"version":"c02009914536657bbcf20ebe306cd60ed51e7328bc1a7aa2f2fde5b3d30ba1d7","impliedFormat":1},{"version":"516fb530789b19d06f444e8078c35daa800df6d076b3f797e7859fd12170660e","impliedFormat":1},{"version":"9bb1b43c3f31b6a7ad93e64fcca09c156b257f86be47a74fc233b32cee5fa9cf","impliedFormat":1},{"version":"aac9db78dba65ce930e65812cf427d15eb85d9a29b5f1e7364ec66c801ce062d","impliedFormat":1},{"version":"59b24f8181952f4060d8c83e2c082692d1f203d2a1f80a042ceb310c743c8acb","impliedFormat":1},{"version":"cd54895f60787ec5a0eed77b68b43c4f3086c41fc5b92344e95c4a48ebe457d9","impliedFormat":1},{"version":"33baa9c8c8f934de93b134219e8cc71fd5c060c5926d30b4e27bc7970cb4c306","impliedFormat":1},{"version":"b4a5831d04bec3b759b1531e983ac237abb6084aa8c7ad1757896cbff8d4a739","impliedFormat":1},{"version":"0f62654e144a243209deb93ccd592fb37155b930c090d3f15cf0f336f1fb09ee","impliedFormat":1},{"version":"fa6c156ed3b8cb663270be3cb4dbc68ab0020b66fd452e114c73adedb8e94571","impliedFormat":1},{"version":"d572c7dc04ce69763dceb61a9390caba5676e8b5fad3ba884a295c13fcc1e9a2","impliedFormat":1},{"version":"4391270928e45f2feb6de2cb0699b36b0582e3e88857bd0973531afcf6f53820","impliedFormat":1},{"version":"7dd9edf209b702f571398dd10a4ac1ede0ccf6438ff7f6fd51b6d7d90b3dd079","impliedFormat":1},{"version":"3963681c3857ffd2fea3631a5f60fdba5995200cbd38e21b9fabe482711ed198","impliedFormat":1},{"version":"0f495ff07adcc35c67d97e2f83c684b77d443d1d104caac907e6b0ba6237eb82","impliedFormat":1},{"version":"27d4092b619b0d740fa198cb45fb96358aa624c29de2ca10680aec14790596f4","impliedFormat":1},{"version":"c4bd7c069cb452647726c40cbe523b0275323ceea7e75d255943ca59a11a0c09","impliedFormat":1},{"version":"fc6f9741dd9a0aacea6e8454e972b192c77e84301ccd8620e07099112f3dfdef","impliedFormat":1},{"version":"a13cead416d8d53b5ea6bc736a70b4469c8b203c96b9e93203238026f8456ee9","impliedFormat":1},{"version":"60e253772cf9af065357fd804a2bd4411c9f61c0a51d9151d4d0eec65cfb0a85","impliedFormat":1},{"version":"e5269c6b3ac4e799a7446a50f602debd6cb325cceb134d2183fc0bd228dd66fa","impliedFormat":1},{"version":"0b6501d93f4b0777dccbef3dafc900a3b6d38d24ebb5f41adc1db44a6e78513d","impliedFormat":1},{"version":"c0aab0e4877df025407ca3553fd497096a657d4b30e488b22634aef58b0eb5ca","impliedFormat":1},{"version":"1872d3d97b04ced11e71993e0e6225ce57dd6397859b782401be7e32b671e6f6","impliedFormat":1},{"version":"918dedf9a2916fe8f390ddd0acd4367ed7f462bc3367e9093ef22497e8eba55a","impliedFormat":1},{"version":"bd27f573899bfd477ed699de7028529454b32e89b440fbccca14df63629658da","impliedFormat":1},{"version":"8615cb0aa12a2c555019f18a8ae3e36bee1d39a7b62df819885dc5ea642eb140","impliedFormat":1},{"version":"5c96feafb4b881c9bd8fa62475b85f7fbedf17ffa13df758d8eb0173205db8d2","impliedFormat":1},{"version":"d983fec7743a79b5d4e763057509374afaae270e6ff91ad4d4855bcc19077c20","impliedFormat":1},{"version":"7522ac46eac42ff0b50a9353454b460c5117147e262941e2ad87a520d464de4b","impliedFormat":1},{"version":"9a7e2e46e97f89a00cbc911a313446282e0411dd9a00b8707c9b78dc2b461dd1","impliedFormat":1},{"version":"c904d220f7feacf62ffadd65879d946621884bd8d95f94373cfa786f895f6781","impliedFormat":1},{"version":"477b91db1745a2f5db085f1c373dca2a5075b727c1b3e5eea1438def8931fc45","impliedFormat":1},{"version":"e0498f3451a1c80899e23f9b4b8901aa9c63985a2fecce9dc6c9574ae30c693f","impliedFormat":1},{"version":"4bb91ff66a2566cf69c8eafec2cf4c4b3146d76f250a86c17803bc35cb64f521","impliedFormat":1},{"version":"43936740dbf4de443ba6055ac312413424e8f51d51d86c4b068c69e973de0380","impliedFormat":1},{"version":"70c29353974cf728526fc8a2e75a51b87823909e22f7ec7a4af4efcaae368f37","impliedFormat":1},{"version":"57a03784368af2e08a9c3f07aedfcc6d9c599b8b13ea1aefd91da3de817394c2","impliedFormat":1},{"version":"4f01a3f0f78d2f9026e1a949d6ea96663acd994251b06a06c076b9e10ff6fdda","impliedFormat":1},{"version":"1540deb4cc5e382c297d7b030a9aca0f867190d6a5826fdcf5661124ae3bf786","impliedFormat":1},{"version":"f622d7a53990ab687257e046d7dee7c71cd55963a54f4ed461fe5b69226a058e","impliedFormat":1},{"version":"cb9f3037e1718cdcf4ab52df0c1a3c53a352b235a29a6c5fcbaaff6e966c1d52","impliedFormat":1},{"version":"956aa2ef77f706bc8159cab12646f9fbdad0cd7029d2e7d1cf9f6015f573148d","impliedFormat":1},{"version":"ceb7698ecad7695f6dbe2b5993ae58fe2976cb060ec09e107afccf692ccd41c1","impliedFormat":1},{"version":"3bba3c4034e7a2c7234ded8f03930e36d01ba5287bc04472744c881034d2f734","impliedFormat":1},{"version":"09ee4dbf6e4080ddc997a457a59f07895165866bf3c79cdab2d4e3dac87b8fc2","impliedFormat":1},{"version":"be6d2e0d07a97a8f679d9a59d0e6b99ecff903d70521748ab22519cec3a1a8e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"a5356d2e07840011f4b5d5f41875e579442d4ee69dfa7087b8d4f54d4139ad7e","impliedFormat":1},{"version":"35c3ccf717cedea34f667b6332abcc3da98dc3759d76e235a3d7abfe6102152c","impliedFormat":1},{"version":"53cdd1eefd57fa58e402732489db4e2a118599edb7e2105bdcf1bb60d27dfbbd","impliedFormat":1},{"version":"d1c12d3457839f32681cff9650748ba7531dca3154fab2c449ea995031414eda","impliedFormat":1},{"version":"2f660700594abc586d02c7ccfba70de09dbf27c1a9ea63f8a79476335e5770d8","impliedFormat":1},{"version":"fae5e3a1e3bb6ebfd3a97782c2cc7367c974e84760c608ae9af533ac7dbfa638","impliedFormat":1},{"version":"639d0290cf42ae43046121ef45900f7d915de2b384fcc002c0e0f71753f8ce72","impliedFormat":1},{"version":"926f7ce9ac0e3cf28f88c5a629ce0cd41c35f1b0ca70d0f595888eecc347e08f","impliedFormat":1},{"version":"fece822c8e72f084892e851ff99be8b7b3ae186390f7ba2763591f05962b7ca5","impliedFormat":1},{"version":"f0d396d00241d875cf79ba28da7b1cb96772b179a0f5b003233c702ce85e7aaf","impliedFormat":1},{"version":"884b482f935d6b76268eee347d590c349994de1bc4edf0d6ed8987ffd7e33fa6","impliedFormat":1},{"version":"e3be2c87fec8c254856c8fbfd49cbdb09f5f1d9f8d54304dd614fe458130f650","impliedFormat":1},{"version":"2bb7dd685d6c1671525371869d339ad33f866c65dcda8166d3db2f2a4be56859","impliedFormat":1},{"version":"bf74f8c9e942c0323b590ec01bf399fa007d36150ec385523f8f0094f88c5ca7","impliedFormat":1},{"version":"7a6e5535a7876dabb7300d02d25a01c694d74f2f38588d3fe4ff5289c306dd6a","impliedFormat":1},{"version":"1c9800fbae1b443d77672e6d3e715df7280479b7c41f08cb790e750f01b50d90","impliedFormat":99},"d073ea9de1292be47c5bae3e67f4fdb213b1e703af2592eba76f7fbe28d922e8","e33ed5ce675b0011e0353782b5fdd56a3f7d35db5ad1d2330b19d34e946e3f8d","5ae2d0512126121ad669a81cf1da17007c1c9b6fcab25f72d7f9f0e7a6944c64","c0c92e4e224992929bbe76eea3075ca428545ff2d6c531b682bfe1e89522e57a","9a94f28cbd026c2d2f0331e6041ecd18eb850a27b80bb6b86146dcd1e32cba3f",{"version":"644e42dffff36077d369921d00afc94afcb10d9c81d067d5c906f1ce11ef55ad","impliedFormat":1},{"version":"8adf39b75996ee76992cae1326db26186e80b9d5671f842f550565830f33b4f6","impliedFormat":1},{"version":"4c780f28af9c74d9d2feb8f296ce16ea08e7105856da4c00414d4683bc15a172","impliedFormat":1},{"version":"4e187114c33f9f7b0226b7a2b67a1f52f0667da0c15fafa87af701918b899765","impliedFormat":1},{"version":"5f7ec4a13efafc821e3afbe3947eeaa1e64e39a9dc7af296fe8270e3b6254dd6","impliedFormat":1},{"version":"88d23cfe9cca143a5b34cb7813c4c6b1919ee5f772e8c69b2db26c210556e2fd","impliedFormat":1},{"version":"35d2f436b02d50acb4c2902c388d70255cd3080a9683f3cfdb08eec90df0c418","impliedFormat":1},{"version":"9b140f38453b5eaca316cfb80a9e506bbf598a3adad48094234af8611679fa4c","impliedFormat":1},{"version":"0543261bae710950d4aa2f20c622a630b1e48cf64ccf9049919482119a6a418d","impliedFormat":1},{"version":"1e09a546409b008425a77322975fd4fc8fa5b25fd77cc893265584777d2e40b8","impliedFormat":1},{"version":"d1e41b5e7eb390edf80daefbbd715ea0635a53c6609f67cef24a3c27c3ef8ac4","impliedFormat":1},{"version":"662d8be18aa6ef1c463ff5130d996cb9594a79e6a5a0a73a78e6eb58c0e7119e","impliedFormat":1},{"version":"7279aabe0c1f3af7fc7d6d9ed95935780305ffff1c61c30356c920461da02def","impliedFormat":1},{"version":"e9e86a79d55fa4c09cd3314fe33a8a9b9ac2e158d051ffe4e6bd19c0b84082ee","impliedFormat":1},{"version":"1075cb3d1b1f5b7cabe98d4015a7cb56054fa6f594b6e50d1e2a8ef2373a9140","impliedFormat":1},{"version":"1d87498c8b22eed2d4bed0243df4ba9807d8d26e8833d859cbceefaa69d33aea","impliedFormat":1},{"version":"f984300c99f739fe5950949dd628dcd7fb23938bd790714c0e3e436d3df75445","impliedFormat":1},{"version":"2ad43c6ed3bd733d3ba162691019fa734af02d1cf3d3885bfe62cb54607e8408","impliedFormat":1},{"version":"09e71426c1fb3dcb4a205f57540f02c8b81b0a5aea9a6d50e3e5438aac3de7dc","impliedFormat":1},{"version":"68d1ccaaea896c7416e41d6222f1d422aa3a169c428a57b7a6b3b6636aa90683","impliedFormat":1},{"version":"547d2ed75a7e879e039ec475b6119ce3151b2d1ef8610d3659f4b5d74dcb9786","impliedFormat":1},{"version":"58caa97171d4f8a8caeb43817d4a6fb76f74270ee27a0448724c303bc925c324","impliedFormat":1},{"version":"f634a6ede00a283133ba631eacc8c9e91b750e59c8185709f17743526dffe0fd","impliedFormat":1},{"version":"dc7a0968d53a9c69335a850e7c1661e75a59b8bf3944859727b6e6c986ebb91a","impliedFormat":1},{"version":"84efb6677865b03ef14a4cfcd8c37fb36921b1c0a97611bc31200db58d5b8ff2","impliedFormat":1},{"version":"b17a37eeb7449541ee9e9d397cd40d6636a038790a6cfe58aec0d6ca86d7a615","impliedFormat":1},{"version":"ab073fd0f72cf813cdbab65ff3d4b228163c7e4a2bc05005729cf9829201db4d","impliedFormat":1},{"version":"0262c21c122648a088d7c0e88c048aa12ac35f25c39f72829d87595dc69c038f","impliedFormat":1},{"version":"58c2ba8fe72c512f5c55780c0a5372cc6c00a7b29b810895efef836611f66048","impliedFormat":1},{"version":"4ace97237738968c48d31badd7c5b157130eb0809993cb32d2aa833ff3d0fe11","impliedFormat":1},{"version":"a60e0206d2aded926c9550613dd7a87c8d1126af68df093e4c78210938b6939a","impliedFormat":1},{"version":"7d9adb5abccc66a15d024e0db3b836416107725a0100d6aeffc1e23ea6354b9b","impliedFormat":1},{"version":"e71a06b8e1bf89b385bbcee2425ad51c32b188f7b3fa7869d993c8b79888c3ac","impliedFormat":1},{"version":"7a8edeaac6c297f9fba5b3193c75e727a1551e1d7d1c8971b56a3645054ddbe1","impliedFormat":1},{"version":"1bbb21a76b9fda4738b4288beef9cf0c8f9ea4533133ba8bfb85541b9f0a2441","impliedFormat":1},{"version":"7c9e3eb8c05d04e7c4e57891b5e1b573504fd90cdae9b632dd4a65fc7bc675c3","impliedFormat":1},{"version":"72a9c7654b1b34cf90d4e5432e8ebd0d4d9c60611dc35ecf6bedc4a05cc341f8","impliedFormat":1},{"version":"f38d603c018434e89e163e88e92b07564c301ccf70c0271d4bc76fc4c74aae6d","impliedFormat":1},{"version":"d2752672ae69717d9e074bc3d3524261028f26cf3269462b98bdaac675f150d1","impliedFormat":1},{"version":"ffda5b61aadaac78799befb98c81f774685c5f6df08550d2ba8a23ea6cd82f2f","impliedFormat":1},{"version":"9c124dd51574bd8976fc6b4b7e4a7113c08222bfb1529aa3ae7cce15796f3d3f","impliedFormat":1},{"version":"1cd1f47f037ae81aca1ed163f57ca114276035a1e5f1bd0063ab8b1df10163a3","impliedFormat":1},{"version":"bfed6b7ec77ced5a9960f40d8474989ba6dca081df5621c1da6b0a81f943bc75","impliedFormat":1},{"version":"ad6412353e9b906f39317ecbc91d62478668c906c2d7c503eb3f00528d16b6d8","impliedFormat":1},{"version":"7c013a39f01334eaa8bee4d391abb112d1934cc3f6d5f83a6b7449ab96dfda9e","impliedFormat":1},{"version":"46347d9ba6d355004fc13b01a8b5556eaa6a9680a5292bacabfe3cf9c3ed7261","impliedFormat":1},{"version":"035f3acf225c848e1efc71ca2a62869f57a79e4e7ee0b9b46f5e134ea5cf5796","impliedFormat":1},{"version":"982171b404cd228cd1cd0a9a2ee810f5f08f7fb20ca018bb84592e78fcc68152","impliedFormat":1},{"version":"24b7c3d2cf7dbd731806203c55b9fd48efd2a91e61363159bdc6f5e7522a1ade","impliedFormat":1},{"version":"fb9e1fdcc158b2fc49a6ab93cc6cd8f16c37b9ecdaca0bc22d6927383ed864b5","impliedFormat":1},{"version":"4447d254d93dd213acc9c813e8310760243018a309c26dd737debd9403cc578f","impliedFormat":1},{"version":"7d8de31d358e2a44b87a2814fcad24fdc6fb538fa370866937031801add88d01","impliedFormat":1},{"version":"f826e81501f8147244d8861dc31af3b052778ef7133d9d95bbe1300e8ce41582","impliedFormat":1},{"version":"d40846d867051e21651243d7d7b738fb13e85d37696bb0f0fdc2228808efe241","impliedFormat":1},{"version":"f774b5bfbff417a6bdfaeba8aef20d229bbc47feb140274c2ee8a4e1856f23e1","impliedFormat":1},{"version":"0feab15c5935c8589f6d6e507d8318b2fd2f8c36ed2340a67232958a6cba8367","impliedFormat":1},{"version":"3638df938473eb962a1f7dfde9af212ef4b7ca4c64a0190ca976849309324b14","impliedFormat":1},{"version":"724cd0d5584e98f77367b37ec547abab64a36e1d1f8f115a215d4720e22ac4af","impliedFormat":1},{"version":"c56805cb4622dd6728215b15030285920846ed77e12be0e6ebce0ade4bfecb0d","impliedFormat":1},{"version":"12f3f2c6192eb7b569c262302a188312bcfc126d7e55be6de628bb7d5d376a94","impliedFormat":1},{"version":"dd275c8c6b9260ec326505fa16b3cfe8e8c2d4c870df87c3cc788a4eb3baccdc","impliedFormat":1},{"version":"a7cb1d01fc96c17b548cbe67b4d5391d901f2052abfc7642e5e5365710a4ff20","impliedFormat":1},{"version":"2a13b2c9a552bd0401e1f855acbb3f5dafec36f36c88bd187ec004ae18bca1f0","impliedFormat":1},{"version":"5ae6c86bade3cfbde19883ab0c26533279a87032e171132b764790968b284bcd","impliedFormat":1},{"version":"f8063d002ba29841795a07a5339df9df4c54971980a26747aed9026a1568a647","impliedFormat":1},{"version":"9534178ddefa237057f177f2034e20c308c42c88dd61bc072eddc0a644f8a860","impliedFormat":1},{"version":"f9b7fe2aa2cf3d7a555e268ff03ae6891515b319505c2f7d72ddf5350d0ba6ca","impliedFormat":1},{"version":"f24f31d0b3ca006ed05b7a4b5fda23a4fac5d9c32a3bfdc5929cf7de7420ab52","impliedFormat":1},{"version":"0a7bf32b64d70e0fcfe4cd27da2e0ffd4d6d0a39aaa3edcbfe9c358172fa27a5","impliedFormat":1},{"version":"f1ee4104cff885b1ae022353d1f6ea66ad91f4b534c1a6210795d7ea9c71fba3","impliedFormat":1},{"version":"0bbee49a83394c4d0ce01d6525b59e6c93d29cf2e7f8b80ee6b86bf1e0f54718","impliedFormat":1},{"version":"8fdabe79cf609194031cb0c60fc15426b283ea38cd66db436ddc41ea9a2ba732","impliedFormat":1},{"version":"c86e1bd0879ad4dd4821d2e1c706dda396cdcd9d6dc999ece7d84760080d5740","impliedFormat":1},{"version":"04193e2169cfe772966359fb4607b9bfc8f8ba014fe16e85c4c636c10635a85a","impliedFormat":1},{"version":"9abc4d7a0ed1382e6bcd7b33fe2ef6110c1ffe30967490509d8754e9422fc2d7","impliedFormat":1},{"version":"5eb029da7570b9402bb91aa7d1bc770297cbfa95ddf2d435601228369756f274","impliedFormat":1},{"version":"1b19137641615d983ea2bc1335860a8937c39ed717ea2d35c86c131bc55ec236","impliedFormat":1},{"version":"819d063bbf46bd0adbcfc8d795ec3d39936990b966e62b0c340587e82aa2c78a","impliedFormat":1},{"version":"79eeba68c2948729dd40077460c12f620c4c55c378df91e45c5cf253a317d2b7","impliedFormat":1},{"version":"d938df6182337389213b5e0f75d20d06c6b03776a7f3a104065a658579fec44e","impliedFormat":1},{"version":"6f518d3297f921f939432263025b4177ae84ce4421035e3f02f3d00b5cf86002","impliedFormat":1},{"version":"eb12f4189dc522d96b93d8bd3f3e5bf467833b9029d39c71a2a4a253cf51c81c","impliedFormat":1},{"version":"6f185664efa82bfc56eb17682aa451c501749174e072fa6ee348521449e28435","impliedFormat":1},{"version":"94693d2177f946556d6fb97fd1cf2a341cfdc72feddfb6468c074ef70d9171bd","impliedFormat":1},{"version":"f18b32b868dbc9a52023e0426f061e97ba9ba74c36ec24af0999ff273db5c177","impliedFormat":1},{"version":"caa6da083c5601eabdc0c6e5b089f1669cb18aa7268fa0087693060758136791","impliedFormat":1},{"version":"eca1abe8ca2e6c1a7262bfde9e42485bb692504f94c7496aa5683ac4b854eacc","impliedFormat":1},{"version":"08baeeb4dcac00f6a9699d14b41cfce976438271d07bea3db68a55b8bf5b816c","impliedFormat":1},{"version":"d374cc3b7dc1cfb1727e3da450bcc71fdac928f86ec1a05f17bf05786927a40d","impliedFormat":1},{"version":"03c48897915b6c629a075b21dee9e8fd438a72fac365ffeed6083de0f1c5149f","impliedFormat":1},{"version":"1ad4adf3fd36a30feb7fe81ee1f58a8553b6d726d9ca112b8a6c1dfd8c98fd7b","impliedFormat":1},{"version":"1915bc4c614eea44bc63708dd1e18927880bea4335753537799f0876f8cbeda7","impliedFormat":1},{"version":"c34f1a73e9a2739ac14d15ecf90b6200e5fc4949a560ad8cbe05e5c380230a15","impliedFormat":1},{"version":"c5ff7d90f09b2cac0a8d7d6efdd39283edf076945b88d7af5314e987fefe0e2c","impliedFormat":1},{"version":"3b0aeaa1e5626a7e6f0f35a7f91975c2fd4b9e0f505a3fae7fdd2b2e6c0a5591","impliedFormat":1},{"version":"dba588175f52782ca25ae231ef4035a410a0665ebce8e4d78f0d58fa6e3ed7e4","impliedFormat":1},{"version":"029ae4649325e9fb5c9acdb9302b9f7689747024f90e5a42108c5c33339a2869","impliedFormat":1},{"version":"4bc6818d3e7685e9cdd2040a9a418e6e8e1f379c867654aa567ecd99d379f5cc","impliedFormat":1},{"version":"8f252eb4b53f283cf4152974a596d2d5c0367e009270224bf532126ca16715bb","impliedFormat":1},{"version":"1493a2605b11f8cd17d56c5af04ef4b4a67004930dec9de884c232fffe5e98ea","impliedFormat":1},{"version":"505cd8eb686ed801bbfdc432dd00bb1f164f5db27551e4149195dd35c5c8a03b","impliedFormat":1},{"version":"f4175fbecc0e45d4034a33e6f814a5efab03bc8d5c971a9c20592e68a5c00955","impliedFormat":1},{"version":"b93ad1bdbd0eb3fdb7a39e8e85d9c0d63fa839730f3d0a835084fffbc9c54e23","impliedFormat":1},{"version":"c3077608436ec03a81097991ea725c5b3fa35bc66639f4542ca4ed31fd2299c6","impliedFormat":1},{"version":"3b5d8ae86ac229a03f266d4fc5208c4e44f1ba5486bea5a6e071b4231b35f10c","impliedFormat":1},{"version":"649486b764db0718d3dee5d03fd223cdf38e4cadfe6a1465bf9ea477ead7707a","impliedFormat":1},{"version":"cf2da3c5c6a5fae27b36170f6a634b7a0f0b9fbe33de00a6e0225e2b9ac7ff9b","impliedFormat":1},{"version":"c02009914536657bbcf20ebe306cd60ed51e7328bc1a7aa2f2fde5b3d30ba1d7","impliedFormat":1},{"version":"516fb530789b19d06f444e8078c35daa800df6d076b3f797e7859fd12170660e","impliedFormat":1},{"version":"429e3cea2c9348810bc21fc220732349a3b7ef916e8592df06930af68c834bcb","impliedFormat":1},{"version":"aac9db78dba65ce930e65812cf427d15eb85d9a29b5f1e7364ec66c801ce062d","impliedFormat":1},{"version":"cf37598fcf06849d7c38250d94bf9a78ba1f3319c18bb3fbe997ad022cc6880f","impliedFormat":1},{"version":"185f01c0128844c7de7fe0896cbc5b036f534edd02487860cc65db4a37263438","impliedFormat":1},{"version":"cd54895f60787ec5a0eed77b68b43c4f3086c41fc5b92344e95c4a48ebe457d9","impliedFormat":1},{"version":"3cad4b56c78cbfef3042e20c81b30c107dc5fa5e4e9e354beb8692e003e2dcdd","impliedFormat":1},{"version":"b4a5831d04bec3b759b1531e983ac237abb6084aa8c7ad1757896cbff8d4a739","impliedFormat":1},{"version":"27c9b85c9aeddc8bc2f81bbb595a2430810133b462fe5a503f18f992e0151dda","impliedFormat":1},{"version":"d572c7dc04ce69763dceb61a9390caba5676e8b5fad3ba884a295c13fcc1e9a2","impliedFormat":1},{"version":"7f4d3686b860f4ac3b44b0f31eedbf951d9062bed506be02e26f3a1c29855f7b","impliedFormat":1},{"version":"4f09be806cae47a0e2eb8c024f7c34a0d8c34194b4ff4ac58cbd2bd8a3fb1627","impliedFormat":1},{"version":"3963681c3857ffd2fea3631a5f60fdba5995200cbd38e21b9fabe482711ed198","impliedFormat":1},{"version":"0f495ff07adcc35c67d97e2f83c684b77d443d1d104caac907e6b0ba6237eb82","impliedFormat":1},{"version":"27d4092b619b0d740fa198cb45fb96358aa624c29de2ca10680aec14790596f4","impliedFormat":1},{"version":"c4bd7c069cb452647726c40cbe523b0275323ceea7e75d255943ca59a11a0c09","impliedFormat":1},{"version":"fc6f9741dd9a0aacea6e8454e972b192c77e84301ccd8620e07099112f3dfdef","impliedFormat":1},{"version":"5839c6854ed56b6a4b3f16272dc4a7a875ea3daf012bb13aaa9a7a3e0cfad4b9","impliedFormat":1},{"version":"60e253772cf9af065357fd804a2bd4411c9f61c0a51d9151d4d0eec65cfb0a85","impliedFormat":1},{"version":"e5269c6b3ac4e799a7446a50f602debd6cb325cceb134d2183fc0bd228dd66fa","impliedFormat":1},{"version":"0b6501d93f4b0777dccbef3dafc900a3b6d38d24ebb5f41adc1db44a6e78513d","impliedFormat":1},{"version":"1872d3d97b04ced11e71993e0e6225ce57dd6397859b782401be7e32b671e6f6","impliedFormat":1},{"version":"9538db963fdb2d8a4d1273c53cf34f4dbdaf7d1aefec53337b88f2509192cf18","impliedFormat":1},{"version":"bd27f573899bfd477ed699de7028529454b32e89b440fbccca14df63629658da","impliedFormat":1},{"version":"8615cb0aa12a2c555019f18a8ae3e36bee1d39a7b62df819885dc5ea642eb140","impliedFormat":1},{"version":"baf980878016439ecb34e0940350d9c5abe069ba8061b7ef440d3b11e0d95f1f","impliedFormat":1},{"version":"d983fec7743a79b5d4e763057509374afaae270e6ff91ad4d4855bcc19077c20","impliedFormat":1},{"version":"7522ac46eac42ff0b50a9353454b460c5117147e262941e2ad87a520d464de4b","impliedFormat":1},{"version":"9a7e2e46e97f89a00cbc911a313446282e0411dd9a00b8707c9b78dc2b461dd1","impliedFormat":1},{"version":"c904d220f7feacf62ffadd65879d946621884bd8d95f94373cfa786f895f6781","impliedFormat":1},{"version":"477b91db1745a2f5db085f1c373dca2a5075b727c1b3e5eea1438def8931fc45","impliedFormat":1},{"version":"e0498f3451a1c80899e23f9b4b8901aa9c63985a2fecce9dc6c9574ae30c693f","impliedFormat":1},{"version":"0d4659fd8566c98e0f82dea27868767863555e847b025f469978349f3220b7ff","impliedFormat":1},{"version":"de2fd0ebd0d8e9f23171b0e22f5937ba76c0cd8e351737f588e99515f57d8bd4","impliedFormat":1},{"version":"70c29353974cf728526fc8a2e75a51b87823909e22f7ec7a4af4efcaae368f37","impliedFormat":1},{"version":"57a03784368af2e08a9c3f07aedfcc6d9c599b8b13ea1aefd91da3de817394c2","impliedFormat":1},{"version":"52c235f901c00269fc458367de9a5d85ce18c72a28c122d0c4f429e4a484273b","impliedFormat":1},{"version":"1540deb4cc5e382c297d7b030a9aca0f867190d6a5826fdcf5661124ae3bf786","impliedFormat":1},{"version":"1ed27f07365ef77e83372438deabf9db6413e3665946240742d252040b33acb0","impliedFormat":1},{"version":"f622d7a53990ab687257e046d7dee7c71cd55963a54f4ed461fe5b69226a058e","impliedFormat":1},{"version":"e06028e8683f113dc7e402fbf33ae7e0dc59f53cc3a1837ee3f63db05f0c074b","impliedFormat":1},{"version":"5da8f0bc22406720347fca89c0f3b8027f8fd2dbf957bd4f562d135101973ef2","impliedFormat":1},{"version":"ceb7698ecad7695f6dbe2b5993ae58fe2976cb060ec09e107afccf692ccd41c1","impliedFormat":1},{"version":"3bba3c4034e7a2c7234ded8f03930e36d01ba5287bc04472744c881034d2f734","impliedFormat":1},{"version":"9bd7b527fbf5ac5bd8802639e47d5e9c74728e791d8da1ad318d327eb08f9c0d","impliedFormat":1},{"version":"866e38913d52800e6a3e974eb8dd586c3dcf7a76d15d6f8d6f5f1c6c25018cf5","impliedFormat":1},{"version":"a5356d2e07840011f4b5d5f41875e579442d4ee69dfa7087b8d4f54d4139ad7e","impliedFormat":1},{"version":"35c3ccf717cedea34f667b6332abcc3da98dc3759d76e235a3d7abfe6102152c","impliedFormat":1},{"version":"53cdd1eefd57fa58e402732489db4e2a118599edb7e2105bdcf1bb60d27dfbbd","impliedFormat":1},{"version":"f8e3729f37aa0179ffa02fefdc1d3a281a42e5f667ef652bfdd1e028aabf73f7","impliedFormat":1},{"version":"2f660700594abc586d02c7ccfba70de09dbf27c1a9ea63f8a79476335e5770d8","impliedFormat":1},{"version":"7b1da0ea878bb7bc91fd4234f87852180bb34157c8f5dd20840ca89775fab55c","impliedFormat":1},{"version":"639d0290cf42ae43046121ef45900f7d915de2b384fcc002c0e0f71753f8ce72","impliedFormat":1},{"version":"926f7ce9ac0e3cf28f88c5a629ce0cd41c35f1b0ca70d0f595888eecc347e08f","impliedFormat":1},{"version":"eda88de3222d2b828deb12d7987117f0d7359b968b71177bee533bdd3082bfc1","impliedFormat":1},{"version":"6671c799e14deab88983034d7ed767370009c89115a6ce7c39a4fe6df4b27824","impliedFormat":1},{"version":"c33d9bb9dd1ad84c01d1e1c6d46bf4c5d2d4ef0f3c2e046977e38e145cb43377","impliedFormat":1},{"version":"6ba7d600d00a5aa44379548cc91772ba8d9880c95897d3851d81857c0126938f","impliedFormat":1},{"version":"ade7d090512796863a2ed49a32d9cb4c4c30a079063f1bf8442023836b6399ea","impliedFormat":1},{"version":"a5d8e323d1a1e27545e1b4506adf48c29698a7b8a1b2c618f364463b67fd247d","impliedFormat":1},{"version":"44f79b48dc4abcd71f75d297c0c70071aeb22cd7c090d962ef960a486d5e844b","impliedFormat":1},{"version":"57fe680e36ea98f50b8461c8c6d94df8c70f2e3122a680b13d92690ec11cb59a","impliedFormat":1},{"version":"c6ca41cecfe0d4bcc7ad91cff42e80df461b5389b2ba68c08b49d80b13dc9f53","impliedFormat":1},{"version":"add8e1c1a6417e45929892f4947b3fcc9bd0330972ac4450a2cabd49de756e23","impliedFormat":1},{"version":"ccfdb275a518764fe7dbf3eb7dc5a4bb4bccadf95596bfd7b4a2d82ba5e31750","impliedFormat":1},{"version":"f4108dd0e05b0576c5741cfbbc8397ad672293e4770accdbee613d3fe869c96e","impliedFormat":1},{"version":"4289c52598e69a96f3d220ce2388f9e159578273626f2b84a9066d77d8a9805e","impliedFormat":1},"fe035307fd7f8c8f26c7678131827c425ab734d06b3f44d124f5773f2f559ae5",{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"86e56d97b13ef0a58bc9c59aee782ae7d47d63802b5b32129ec5e5d62c20dbfa","affectsGlobalScope":true,"impliedFormat":1},"a6a226e26576cadd9430d15f5ff173fb3dd5ab3c6010c8abab787aee50e1aa74",{"version":"3f6d6465811321abc30a1e5f667feed63e5b3917b3d6c8d6645daf96c75f97ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1}],"root":[105,[421,425],601,604],"options":{"alwaysStrict":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"jsx":2,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":false,"noUnusedParameters":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"strictPropertyInitialization":false,"stripInternal":false,"target":10},"referencedMap":[[73,1],[78,2],[104,3],[79,4],[82,4],[103,5],[85,6],[86,7],[87,8],[76,9],[89,4],[91,4],[77,7],[98,10],[463,11],[459,12],[458,13],[454,14],[464,15],[453,16],[466,17],[470,18],[469,19],[472,20],[473,21],[474,22],[475,17],[483,23],[444,24],[430,25],[535,26],[489,27],[501,28],[589,29],[502,30],[503,31],[504,31],[536,32],[505,17],[507,26],[460,33],[508,34],[445,17],[493,17],[498,35],[509,16],[482,36],[480,37],[440,21],[511,38],[448,39],[512,21],[434,21],[439,40],[456,41],[513,42],[436,43],[455,44],[451,26],[449,26],[441,45],[447,46],[514,47],[450,48],[515,17],[432,49],[518,50],[495,51],[479,52],[519,16],[428,16],[429,16],[443,53],[520,17],[471,54],[588,55],[565,56],[524,57],[523,58],[527,59],[521,60],[490,61],[491,62],[486,63],[529,26],[530,64],[531,26],[526,26],[532,65],[533,66],[534,21],[467,17],[538,26],[539,17],[540,67],[517,68],[494,69],[496,17],[477,16],[551,70],[548,71],[547,72],[544,73],[546,74],[543,75],[563,17],[562,76],[545,77],[549,78],[560,79],[564,80],[566,81],[569,82],[570,83],[571,84],[577,85],[576,86],[575,87],[578,88],[579,89],[574,90],[573,91],[572,92],[552,93],[553,83],[541,17],[497,94],[554,95],[499,96],[487,97],[457,51],[481,98],[468,18],[516,99],[461,100],[462,101],[581,102],[582,102],[568,103],[583,102],[584,102],[585,104],[586,102],[580,26],[567,105],[587,17],[555,26],[558,106],[476,17],[559,107],[284,108],[287,109],[286,110],[277,111],[288,112],[285,17],[276,113],[290,17],[294,114],[293,115],[296,116],[297,21],[298,117],[299,118],[300,17],[308,119],[267,120],[253,121],[360,26],[314,122],[326,123],[419,124],[327,125],[328,126],[329,126],[361,127],[331,17],[332,26],[281,128],[333,129],[268,17],[318,17],[323,130],[334,131],[307,132],[305,133],[263,21],[336,134],[261,21],[271,135],[337,21],[257,21],[262,136],[279,137],[338,138],[259,139],[278,140],[274,26],[272,26],[264,141],[270,142],[339,143],[273,144],[340,17],[255,145],[343,146],[320,147],[304,148],[344,131],[251,131],[252,131],[266,149],[345,17],[295,150],[417,151],[418,152],[414,153],[415,154],[413,155],[416,156],[391,157],[349,158],[348,159],[352,160],[346,17],[315,161],[316,162],[311,163],[354,26],[355,164],[356,26],[351,26],[357,165],[358,166],[359,21],[291,17],[362,26],[363,17],[342,167],[319,168],[321,17],[302,131],[376,169],[373,170],[372,171],[369,172],[371,173],[368,174],[389,17],[388,175],[370,176],[374,177],[386,178],[390,179],[392,180],[395,181],[396,182],[397,183],[402,184],[401,185],[400,186],[403,187],[404,188],[399,189],[398,190],[377,191],[378,182],[365,17],[322,192],[379,193],[324,194],[312,195],[280,147],[306,196],[292,114],[341,197],[282,198],[283,199],[406,200],[407,200],[394,201],[408,200],[409,200],[410,202],[411,200],[405,26],[393,203],[412,17],[381,26],[384,204],[301,17],[385,205],[152,206],[155,207],[157,208],[158,209],[156,210],[159,211],[161,212],[162,213],[229,214],[180,215],[160,206],[194,216],[211,217],[138,218],[148,219],[150,220],[149,221],[145,222],[147,223],[250,224],[136,225],[223,226],[163,227],[164,228],[130,229],[224,230],[122,231],[225,232],[186,233],[226,234],[185,235],[129,236],[128,237],[181,238],[135,239],[134,240],[124,241],[133,242],[126,243],[125,244],[165,245],[151,246],[119,247],[227,248],[228,249],[183,250],[184,251],[166,252],[167,253],[182,254],[123,252],[127,255],[191,256],[192,257],[108,258],[193,259],[195,260],[196,261],[197,262],[198,263],[179,264],[199,265],[132,266],[115,267],[200,268],[131,269],[113,270],[120,271],[112,272],[201,273],[111,274],[118,275],[188,276],[202,277],[110,278],[204,279],[190,280],[203,281],[206,282],[205,283],[116,284],[207,285],[187,286],[137,287],[117,288],[208,289],[209,290],[214,291],[114,292],[215,293],[213,294],[189,295],[153,296],[216,297],[217,271],[212,298],[121,299],[220,300],[221,301],[222,302],[237,303],[140,304],[230,302],[139,305],[231,306],[143,307],[233,308],[235,309],[236,309],[234,310],[144,311],[174,312],[240,313],[142,314],[239,315],[238,316],[242,317],[241,318],[243,319],[249,320],[247,321],[245,322],[248,323],[178,324],[168,325],[176,326],[169,327],[170,328],[177,329],[171,330],[175,331],[172,332],[173,333],[244,334],[599,335],[600,336],[590,337],[598,338],[597,339],[596,339],[592,340],[603,341],[610,342],[609,343],[608,344],[105,17],[425,345],[424,346],[423,347],[421,348],[604,349],[601,350]],"affectedFilesPendingEmit":[[422,51],[105,51],[425,51],[424,51],[423,51],[421,51],[604,51],[601,51]],"version":"5.6.3"} \ No newline at end of file