diff --git a/.env_example b/.env_example
index 13cf99c6..d064efed 100644
--- a/.env_example
+++ b/.env_example
@@ -2,7 +2,10 @@ D2AP_BUNGIE_API_KEY=
D2AP_BUNGIE_CLIENT_ID=
D2AP_BUNGIE_CLIENT_SECRET=
-D2AP_HIGHLIGHT_MONITORING_ID=
+D2AP_SENTRY_DSN=
+D2AP_OPEN_REPLAY_PROJECT_KEY=
+
+D2AP_SHOW_LOGS=0
D2AP_FEATURE_ENABLE_MODSLOT_LIMITATION=0
D2AP_FEATURE_ENABLE_ZERO_WASTE=0
diff --git a/README.md b/README.md
index 5b0c6baa..8e134bb1 100644
--- a/README.md
+++ b/README.md
@@ -39,8 +39,8 @@ D2ArmorPicker is a powerful web-based tool designed for Destiny 2 players who wa
### Building Production and Beta packages
- Copy `.env_dev` to `.env` and/or `.env_beta`.
-- To build a production package, set the environment flag `PRODUCTION=1`.
-- To build a beta package, set the environment flag `BETA=1`.
+- To build a production package, set the environment flag `RELEASE=PROD`.
+- To build a beta package, set the environment flag `RELEASE=BETA`.
Then you can use `npm run build`.
@@ -48,7 +48,7 @@ Then you can use `npm run build`.
You can also deploy the page to a "github pages" page. Please note that I strongly discourage hosting alternative D2AP installations, let's make this one as awesome as possible.
-1. Set the environment flag `BETA=1` or `PRODUCTION=1`.
+1. Set the environment flag `RELEASE` to one of the posible values `PROD`, `BETA`, `CANARY`, `DEV`.
1. Modify the `deploy` script in `package.json` and remove`--base-href=/ --cname=d2armorpicker.com`. The same for the beta command. If you deploy to `yourname.github.io/fancyrepo`, then you may have to set `--base-href=/fancyrepo`.
1. `npm run deploy` (given you forked the repository first).
diff --git a/angular.json b/angular.json
index 63466a74..d4352ddc 100644
--- a/angular.json
+++ b/angular.json
@@ -24,7 +24,12 @@
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
- "src/assets"
+ "src/assets",
+ {
+ "glob": "sql-wasm.wasm",
+ "input": "node_modules/sql.js/dist/",
+ "output": "assets/"
+ }
],
"styles": [
{
@@ -55,12 +60,7 @@
"maximumError": "80kb"
}
],
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ],
+ "fileReplacements": [],
"outputHashing": "all",
"sourceMap": true,
"vendorChunk": true
@@ -78,12 +78,7 @@
"maximumError": "80kb"
}
],
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ],
+ "fileReplacements": [],
"outputHashing": "all",
"sourceMap": true,
"vendorChunk": true
@@ -101,12 +96,7 @@
"maximumError": "80kb"
}
],
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ],
+ "fileReplacements": [],
"styles": [
{
"input": "src/styles.scss",
@@ -159,7 +149,8 @@
"browserTarget": "D2ArmorPicker:build:canary"
},
"development": {
- "browserTarget": "D2ArmorPicker:build:development"
+ "browserTarget": "D2ArmorPicker:build:development",
+ "host": "192.168.100.15"
}
},
"defaultConfiguration": "development"
@@ -176,10 +167,19 @@
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
- "karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
- "src/assets"
+ "src/assets",
+ {
+ "glob": "*.wasm",
+ "input": "node_modules/sql.js/dist/",
+ "output": "assets/"
+ },
+ {
+ "glob": "sql-wasm.js",
+ "input": "node_modules/sql.js/dist/",
+ "output": "assets/"
+ }
],
"styles": [
"./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css",
@@ -219,4 +219,4 @@
"setParserOptionsProject": true
}
}
-}
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index f48ea883..0610603b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "d2-armor-picker",
- "version": "2.9.6",
+ "version": "2.9.10",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "d2-armor-picker",
- "version": "2.9.6",
+ "version": "2.9.10",
"dependencies": {
"@angular/animations": "^16.2.12",
"@angular/cdk": "^16.2.14",
@@ -19,16 +19,21 @@
"@angular/platform-browser-dynamic": "^16.2.12",
"@angular/router": "^16.2.12",
"@destinyitemmanager/dim-api-types": "^1.31.0",
+ "@openreplay/tracker": "^17.1.6",
+ "@openreplay/tracker-assist": "^11.0.11",
+ "@sentry/angular": "^10.38.0",
"all-contributors-cli": "^6.26.1",
"angular-cli-ghpages": "^1.0.7",
"angular-oauth2-oidc": "^12.1.0",
"bungie-api-ts": "^5.1.0",
"dexie": "^4.0.7",
"highlight.run": "^9.7.1",
+ "jszip": "^3.10.1",
"lodash": "^4.17.21",
"lzutf8": "^0.6.3",
"ngx-logger": "^5.0.12",
"rxjs": "^6.6.7",
+ "sql.js": "^1.14.0",
"tslib": "^2.6.2",
"zone.js": "^0.13.0"
},
@@ -43,9 +48,12 @@
"@angular/compiler-cli": "^16.2.12",
"@commitlint/cli": "^18.2.12",
"@commitlint/config-angular": "^18.2.12",
+ "@sentry/webpack-plugin": "^4.9.1",
"@types/jasmine": "^5.1.4",
+ "@types/jszip": "^3.4.0",
"@types/lodash": "^4.17.13",
"@types/node": "^22.9.3",
+ "@types/sql.js": "^1.4.9",
"@typescript-eslint/eslint-plugin": "^5.59.2",
"@typescript-eslint/parser": "^5.59.2",
"dotenv": "^16.4.5",
@@ -5320,6 +5328,42 @@
"node": ">= 10"
}
},
+ "node_modules/@openreplay/network-proxy": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@openreplay/network-proxy/-/network-proxy-1.2.2.tgz",
+ "integrity": "sha512-Zr53s6DZvBvHTDyASMKA4G1pGHZtXLDdmWAk6hDKtnzUdRuNW66D+ja2v+x+zbCGBN95iBlOcAxbLlYbwmoMjg==",
+ "license": "MIT"
+ },
+ "node_modules/@openreplay/tracker": {
+ "version": "17.1.6",
+ "resolved": "https://registry.npmjs.org/@openreplay/tracker/-/tracker-17.1.6.tgz",
+ "integrity": "sha512-NmDHw9xh1eRkoyMTcjdtt0tJyIVgI4yqG/c1HgLvjHSvOn/wQIM5L6+cfsDTjR40IyVxD7IxH3oqBtsvow0b0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@openreplay/network-proxy": "^1.2.2",
+ "error-stack-parser": "^2.1.4",
+ "error-stack-parser-es": "^0.1.5",
+ "fflate": "^0.8.2",
+ "web-vitals": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/@openreplay/tracker-assist": {
+ "version": "11.0.11",
+ "resolved": "https://registry.npmjs.org/@openreplay/tracker-assist/-/tracker-assist-11.0.11.tgz",
+ "integrity": "sha512-oBn3VQJ56CHlmx0gkWhlW40kxlgHwvRXs9OZzWH6SLE607lDxQ+3r5sBvNDfxCoK92lXGKrZ9/spTUhDW84e/w==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.1.3",
+ "fflate": "^0.8.2",
+ "socket.io-client": "^4.8.1"
+ },
+ "peerDependencies": {
+ "@openreplay/tracker": ">=14.0.14"
+ }
+ },
"node_modules/@parcel/watcher": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz",
@@ -5367,6 +5411,408 @@
"yarn": ">= 1.13.0"
}
},
+ "node_modules/@sentry-internal/browser-utils": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.38.0.tgz",
+ "integrity": "sha512-UOJtYmdcxHCcV0NPfXFff/a95iXl/E0EhuQ1y0uE0BuZDMupWSF5t2BgC4HaE5Aw3RTjDF3XkSHWoIF6ohy7eA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "10.38.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry-internal/feedback": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.38.0.tgz",
+ "integrity": "sha512-JXneg9zRftyfy1Fyfc39bBlF/Qd8g4UDublFFkVvdc1S6JQPlK+P6q22DKz3Pc8w3ySby+xlIq/eTu9Pzqi4KA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "10.38.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry-internal/replay": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.38.0.tgz",
+ "integrity": "sha512-YWIkL6/dnaiQyFiZXJ/nN+NXGv/15z45ia86bE/TMq01CubX/DUOilgsFz0pk2v/pg3tp/U2MskLO9Hz0cnqeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry-internal/browser-utils": "10.38.0",
+ "@sentry/core": "10.38.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry-internal/replay-canvas": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.38.0.tgz",
+ "integrity": "sha512-OXWM9jEqNYh4VTvrMu7v+z1anz+QKQ/fZXIZdsO7JTT2lGNZe58UUMeoq386M+Saxen8F9SUH7yTORy/8KI5qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry-internal/replay": "10.38.0",
+ "@sentry/core": "10.38.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/angular": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-10.38.0.tgz",
+ "integrity": "sha512-Ncr4dzE1QUqrf1yaKovUrtvsvOH+rhV8Gu0ZExJyhw8NnqlRLypV/p8XwKgJwged36gFzzbeuW+cGVRXwua+yg==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/browser": "10.38.0",
+ "@sentry/core": "10.38.0",
+ "tslib": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@angular/common": ">= 14.x <= 21.x",
+ "@angular/core": ">= 14.x <= 21.x",
+ "@angular/router": ">= 14.x <= 21.x",
+ "rxjs": "^6.5.5 || ^7.x"
+ }
+ },
+ "node_modules/@sentry/babel-plugin-component-annotate": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-4.9.1.tgz",
+ "integrity": "sha512-0gEoi2Lb54MFYPOmdTfxlNKxI7kCOvNV7gP8lxMXJ7nCazF5OqOOZIVshfWjDLrc0QrSV6XdVvwPV9GDn4wBMg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@sentry/browser": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.38.0.tgz",
+ "integrity": "sha512-3phzp1YX4wcQr9mocGWKbjv0jwtuoDBv7+Y6Yfrys/kwyaL84mDLjjQhRf4gL5SX7JdYkhBp4WaiNlR0UC4kTA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry-internal/browser-utils": "10.38.0",
+ "@sentry-internal/feedback": "10.38.0",
+ "@sentry-internal/replay": "10.38.0",
+ "@sentry-internal/replay-canvas": "10.38.0",
+ "@sentry/core": "10.38.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-4.9.1.tgz",
+ "integrity": "sha512-moii+w7N8k8WdvkX7qCDY9iRBlhgHlhTHTUQwF2FNMhBHuqlNpVcSJJqJMjFUQcjYMBDrZgxhfKV18bt5ixwlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.18.5",
+ "@sentry/babel-plugin-component-annotate": "4.9.1",
+ "@sentry/cli": "^2.57.0",
+ "dotenv": "^16.3.1",
+ "find-up": "^5.0.0",
+ "glob": "^10.5.0",
+ "magic-string": "0.30.8",
+ "unplugin": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.4.tgz",
+ "integrity": "sha512-ArDrpuS8JtDYEvwGleVE+FgR+qHaOp77IgdGSacz6SZy6Lv90uX0Nu4UrHCQJz8/xwIcNxSqnN22lq0dH4IqTg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "FSL-1.1-MIT",
+ "dependencies": {
+ "https-proxy-agent": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "progress": "^2.0.3",
+ "proxy-from-env": "^1.1.0",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "sentry-cli": "bin/sentry-cli"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@sentry/cli-darwin": "2.58.4",
+ "@sentry/cli-linux-arm": "2.58.4",
+ "@sentry/cli-linux-arm64": "2.58.4",
+ "@sentry/cli-linux-i686": "2.58.4",
+ "@sentry/cli-linux-x64": "2.58.4",
+ "@sentry/cli-win32-arm64": "2.58.4",
+ "@sentry/cli-win32-i686": "2.58.4",
+ "@sentry/cli-win32-x64": "2.58.4"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-darwin": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.4.tgz",
+ "integrity": "sha512-kbTD+P4X8O+nsNwPxCywtj3q22ecyRHWff98rdcmtRrvwz8CKi/T4Jxn/fnn2i4VEchy08OWBuZAqaA5Kh2hRQ==",
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.4.tgz",
+ "integrity": "sha512-rdQ8beTwnN48hv7iV7e7ZKucPec5NJkRdrrycMJMZlzGBPi56LqnclgsHySJ6Kfq506A2MNuQnKGaf/sBC9REA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd",
+ "android"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm64": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.4.tgz",
+ "integrity": "sha512-0g0KwsOozkLtzN8/0+oMZoOuQ0o7W6O+hx+ydVU1bktaMGKEJLMAWxOQNjsh1TcBbNIXVOKM/I8l0ROhaAb8Ig==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd",
+ "android"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-i686": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.4.tgz",
+ "integrity": "sha512-NseoIQAFtkziHyjZNPTu1Gm1opeQHt7Wm1LbLrGWVIRvUOzlslO9/8i6wETUZ6TjlQxBVRgd3Q0lRBG2A8rFYA==",
+ "cpu": [
+ "x86",
+ "ia32"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd",
+ "android"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-x64": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.4.tgz",
+ "integrity": "sha512-d3Arz+OO/wJYTqCYlSN3Ktm+W8rynQ/IMtSZLK8nu0ryh5mJOh+9XlXY6oDXw4YlsM8qCRrNquR8iEI1Y/IH+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd",
+ "android"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-arm64": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.4.tgz",
+ "integrity": "sha512-bqYrF43+jXdDBh0f8HIJU3tbvlOFtGyRjHB8AoRuMQv9TEDUfENZyCelhdjA+KwDKYl48R1Yasb4EHNzsoO83w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-i686": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.4.tgz",
+ "integrity": "sha512-3triFD6jyvhVcXOmGyttf+deKZcC1tURdhnmDUIBkiDPJKGT/N5xa4qAtHJlAB/h8L9jgYih9bvJnvvFVM7yug==",
+ "cpu": [
+ "x86",
+ "ia32"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-x64": {
+ "version": "2.58.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.4.tgz",
+ "integrity": "sha512-cSzN4PjM1RsCZ4pxMjI0VI7yNCkxiJ5jmWncyiwHXGiXrV1eXYdQ3n1LhUYLZ91CafyprR0OhDcE+RVZ26Qb5w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "FSL-1.1-MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/magic-string": {
+ "version": "0.30.8",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
+ "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@sentry/core": {
+ "version": "10.38.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.38.0.tgz",
+ "integrity": "sha512-1pubWDZE5y5HZEPMAZERP4fVl2NH3Ihp1A+vMoVkb3Qc66Diqj1WierAnStlZP7tCx0TBa0dK85GTW/ZFYyB9g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@sentry/webpack-plugin": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-4.9.1.tgz",
+ "integrity": "sha512-Ssx2lHiq8VWywUGd/hmW3U3VYBC0Up7D6UzUiDAWvy18PbTCVszaa54fKMFEQ1yIBg/ePRET53pIzfkcZgifmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/bundler-plugin-core": "4.9.1",
+ "unplugin": "1.0.1",
+ "uuid": "^9.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "webpack": ">=4.40.0"
+ }
+ },
+ "node_modules/@sentry/webpack-plugin/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@sigstore/bundle": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz",
@@ -5513,7 +5959,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
- "dev": true,
"license": "MIT"
},
"node_modules/@tootallnate/once": {
@@ -5663,6 +6108,13 @@
"@types/node": "*"
}
},
+ "node_modules/@types/emscripten": {
+ "version": "1.41.5",
+ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.41.5.tgz",
+ "integrity": "sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -5740,6 +6192,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/jszip": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.4.0.tgz",
+ "integrity": "sha512-GFHqtQQP3R4NNuvZH3hNCYD0NbyBZ42bkN7kO3NDrU/SnvIZWMS8Bp38XCsRKBT5BXvgm0y1zqpZWp/ZkRzBzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jszip": "*"
+ }
+ },
"node_modules/@types/lodash": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz",
@@ -5859,6 +6321,17 @@
"@types/node": "*"
}
},
+ "node_modules/@types/sql.js": {
+ "version": "1.4.9",
+ "resolved": "https://registry.npmjs.org/@types/sql.js/-/sql.js-1.4.9.tgz",
+ "integrity": "sha512-ep8b36RKHlgWPqjNG9ToUrPiwkhwh0AEzy883mO5Xnd+cL6VBH1EvSjBAAuxLUFF2Vn/moE3Me6v9E1Lo+48GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/emscripten": "*",
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/ws": {
"version": "8.5.13",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz",
@@ -8230,7 +8703,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/cors": {
@@ -8447,6 +8919,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
"node_modules/custom-event": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
@@ -8493,7 +8971,6 @@
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -8986,11 +9463,61 @@
"node": ">=10.2.0"
}
},
+ "node_modules/engine.io-client": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz",
+ "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.18.3",
+ "xmlhttprequest-ssl": "~2.1.1"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/engine.io-client/node_modules/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/engine.io-parser": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -9125,6 +9652,24 @@
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/error-stack-parser": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+ "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "stackframe": "^1.3.4"
+ }
+ },
+ "node_modules/error-stack-parser-es": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz",
+ "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -9814,6 +10359,12 @@
"node": ">=0.8.0"
}
},
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
+ "license": "MIT"
+ },
"node_modules/figures": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
@@ -10899,13 +11450,6 @@
"pako": "^1.0.3"
}
},
- "node_modules/hdr-histogram-js/node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true,
- "license": "(MIT AND Zlib)"
- },
"node_modules/hdr-histogram-percentiles-obj": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz",
@@ -11306,6 +11850,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
"node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -11691,7 +12241,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/isbinaryfile": {
@@ -12092,6 +12641,48 @@
"node": "*"
}
},
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/jszip/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/jszip/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/jszip/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/karma": {
"version": "6.4.4",
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz",
@@ -12439,6 +13030,15 @@
}
}
},
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
"node_modules/lilconfig": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
@@ -13939,7 +14539,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/multicast-dns": {
@@ -14929,6 +15528,12 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "license": "(MIT AND Zlib)"
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -15499,9 +16104,18 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
@@ -16732,6 +17346,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "license": "MIT"
+ },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -17023,11 +17643,42 @@
}
}
},
+ "node_modules/socket.io-client": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
+ "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-client": "~6.6.1",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
"node_modules/socket.io-parser": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
@@ -17254,6 +17905,12 @@
"dev": true,
"license": "BSD-3-Clause"
},
+ "node_modules/sql.js": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.14.0.tgz",
+ "integrity": "sha512-NXYh+kFqLiYRCNAaHD0PcbjFgXyjuolEKLMk5vRt2DgPENtF1kkNzzMlg42dUk5wIsH8MhUzsRhaUxIisoSlZQ==",
+ "license": "MIT"
+ },
"node_modules/ssri": {
"version": "10.0.6",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
@@ -17277,6 +17934,12 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/stackframe": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
+ "license": "MIT"
+ },
"node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -18402,6 +19065,19 @@
"node": ">= 0.8"
}
},
+ "node_modules/unplugin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.0.1.tgz",
+ "integrity": "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.8.1",
+ "chokidar": "^3.5.3",
+ "webpack-sources": "^3.2.3",
+ "webpack-virtual-modules": "^0.5.0"
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
@@ -18661,6 +19337,12 @@
"defaults": "^1.0.3"
}
},
+ "node_modules/web-vitals": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz",
+ "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==",
+ "license": "Apache-2.0"
+ },
"node_modules/webidl-conversions": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
@@ -18899,6 +19581,13 @@
}
}
},
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
+ "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -19161,6 +19850,14 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index df5ad7b9..a4ee1cbc 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,12 @@
{
"name": "d2-armor-picker",
- "version": "2.9.6",
+ "version": "2.9.10",
"scripts": {
"ng": "ng",
"config": "ts-node set-env.ts",
- "start": "npm run config && ng serve --ssl",
+ "start": "npm run config && ng serve --ssl --disable-host-check",
"build": "npm run config && ng build",
- "deploy": "npm run config && ng deploy D2ArmorPicker --base-href=/ --cname=d2armorpicker.com",
+ "deploy": "npm run config && ng deploy D2ArmorPicker --repo=https://github.com/Mijago/D2ArmorPicker.git --base-href=/ --cname=d2armorpicker.com",
"deploy-beta": "npm run config && ng deploy D2ArmorPicker --build-target D2ArmorPicker:build:beta --repo=https://github.com/Mijago/D2ArmorPicker-beta.git --base-href=/ --cname=beta.d2armorpicker.com",
"deploy-canary": "npm run config && ng deploy D2ArmorPicker --build-target D2ArmorPicker:build:canary --repo=https://github.com/Mijago/D2ArmorPicker-Canary.git --base-href=/ --cname=canary.d2armorpicker.com ",
"deploy-nznaza": "npm run config && ng deploy D2ArmorPicker --build-target D2ArmorPicker:build:beta --no-silent --repo=https://github.com/nznaza/D2ArmorPicker.git --base-href=/D2ArmorPicker/ --cname=nznaza.github.io/D2ArmorPicker/",
@@ -30,16 +30,21 @@
"@angular/platform-browser-dynamic": "^16.2.12",
"@angular/router": "^16.2.12",
"@destinyitemmanager/dim-api-types": "^1.31.0",
+ "@openreplay/tracker": "^17.1.6",
+ "@openreplay/tracker-assist": "^11.0.11",
+ "@sentry/angular": "^10.38.0",
"all-contributors-cli": "^6.26.1",
"angular-cli-ghpages": "^1.0.7",
"angular-oauth2-oidc": "^12.1.0",
"bungie-api-ts": "^5.1.0",
"dexie": "^4.0.7",
"highlight.run": "^9.7.1",
+ "jszip": "^3.10.1",
"lodash": "^4.17.21",
"lzutf8": "^0.6.3",
"ngx-logger": "^5.0.12",
"rxjs": "^6.6.7",
+ "sql.js": "^1.14.0",
"tslib": "^2.6.2",
"zone.js": "^0.13.0"
},
@@ -54,9 +59,12 @@
"@angular/compiler-cli": "^16.2.12",
"@commitlint/cli": "^18.2.12",
"@commitlint/config-angular": "^18.2.12",
+ "@sentry/webpack-plugin": "^4.9.1",
"@types/jasmine": "^5.1.4",
+ "@types/jszip": "^3.4.0",
"@types/lodash": "^4.17.13",
"@types/node": "^22.9.3",
+ "@types/sql.js": "^1.4.9",
"@typescript-eslint/eslint-plugin": "^5.59.2",
"@typescript-eslint/parser": "^5.59.2",
"dotenv": "^16.4.5",
diff --git a/set-env.ts b/set-env.ts
index c10d7486..712bf753 100644
--- a/set-env.ts
+++ b/set-env.ts
@@ -17,48 +17,95 @@
const writeFile = require("fs").writeFile;
-const production = process.env["PRODUCTION"] === "1";
-const beta_branch = process.env["BETA"] === "1";
-const canary_branch = process.env["CANARY"] === "1";
+// RELEASE can be one of: 'PROD', 'BETA', 'CANARY'. Defaults to 'CANARY' if missing/invalid
+const releaseRaw = (process.env["RELEASE"] || "").toUpperCase();
+const release = ["PROD", "BETA", "CANARY", "DEV"].includes(releaseRaw) ? releaseRaw : "DEV";
-const version = "2.9.6";
+const is_production = release === "PROD";
+const is_beta = release === "BETA";
+const is_canary = release === "CANARY";
+const is_dev = release === "DEV";
+
+const version = "2.9.10";
// Configure Angular `environment.ts` file path
-const targetPath = production
+const targetPath = "./src/environments/environment.ts";
+
+const copyPath = is_production
? "./src/environments/environment.prod.ts"
- : beta_branch || canary_branch
- ? "./src/environments/environment.prod.ts"
- : "./src/environments/environment.ts";
+ : is_beta
+ ? "./src/environments/environment.beta.ts"
+ : is_canary
+ ? "./src/environments/environment.canary.ts"
+ : "./src/environments/environment.dev.ts";
// Load node modules
-const dotenvfile = production
+const dotenvfile = is_production
? ".env"
- : beta_branch
+ : is_beta
? ".env_beta"
- : canary_branch
+ : is_canary
? ".env_canary"
: ".env_dev";
-require("dotenv").config({ path: dotenvfile });
+// Only load from .env if key variables are not already present in the environment
+const requiredEnvKeys = [
+ "D2AP_BUNGIE_API_KEY",
+ "D2AP_BUNGIE_CLIENT_ID",
+ "D2AP_BUNGIE_CLIENT_SECRET",
+ "D2AP_OPEN_REPLAY_PROJECT_KEY",
+ "D2AP_FEATURE_ENABLE_MODSLOT_LIMITATION",
+ "D2AP_FEATURE_ENABLE_ZERO_WASTE",
+ "D2AP_FEATURE_ENABLE_GUARDIAN_GAMES_FEATURES",
+ "D2AP_SHOW_LOGS",
+ // Feature flags are optional; they default to disabled when not set
+];
+
+const optionalEnvKeys = ["D2AP_SENTRY_DSN"];
+
+const hasAllRequiredEnv = requiredEnvKeys.every((k) => {
+ const val = process.env[k] ?? "";
+ return val.length > 0;
+});
+
+if (!hasAllRequiredEnv) {
+ const dotenv = require("dotenv");
+ const result = dotenv.config({ path: dotenvfile });
+ if (result.error) {
+ throw new Error(`Failed to load env file at ${dotenvfile}: ${result.error}`);
+ }
+ // After attempting to load, warn for any missing keys
+ const missingKeys = requiredEnvKeys.filter((k) => !process.env[k]);
+ if (missingKeys.length > 0) {
+ throw new Error(
+ `Missing required environment variables after loading ${dotenvfile}: ${missingKeys.join(", ")}`
+ );
+ }
+} else {
+ console.log("Environment variables already set; skipping .env file load.");
+}
const revision = require("child_process").execSync("git rev-parse --short HEAD").toString().trim();
-var version_tag = production ? "" : beta_branch ? "-beta-" + revision : "-dev-" + revision;
+var version_tag = is_production ? "" : is_beta ? "-beta-" + revision : "-dev-" + revision;
-console.log(`Reading ${dotenvfile} version ${version + version_tag}`);
+console.log(`Reading ${dotenvfile} version ${version + version_tag} (RELEASE=${release})`);
const data = {
version: version + version_tag,
revision: revision,
- production: production,
- beta: beta_branch,
- canary: canary_branch,
+ production: is_production,
+ beta: is_beta,
+ canary: is_canary,
apiKey: process.env["D2AP_BUNGIE_API_KEY"],
clientId: process.env["D2AP_BUNGIE_CLIENT_ID"],
client_secret: process.env["D2AP_BUNGIE_CLIENT_SECRET"],
nodeEnv: process.env["NODE_ENV"],
offlineMode: false,
- highlight_project_id: process.env["D2AP_HIGHLIGHT_MONITORING_ID"],
+ // highlight_project_id: process.env["D2AP_HIGHLIGHT_MONITORING_ID"],
+ open_replay_project_key: process.env["D2AP_OPEN_REPLAY_PROJECT_KEY"],
+ sentryDsn: process.env["D2AP_SENTRY_DSN"],
+ showLogs: process.env["D2AP_SHOW_LOGS"] == "1",
featureFlags: {
enableModslotLimitation: process.env["D2AP_FEATURE_ENABLE_MODSLOT_LIMITATION"] == "1",
enableZeroWaste: process.env["D2AP_FEATURE_ENABLE_ZERO_WASTE"] == "1",
@@ -72,6 +119,14 @@ writeFile(targetPath, envConfigFile, (err: NodeJS.ErrnoException | null) => {
if (err) {
throw console.error(err);
} else {
- console.log(`Angular environment.ts file generated correctly at ${targetPath} \n`);
+ console.log(`Angular environment.ts file generated correctly\n`);
+
+ writeFile(copyPath, envConfigFile, (err2: NodeJS.ErrnoException | null) => {
+ if (err2) {
+ throw console.error(err2);
+ } else {
+ console.log(`Active Angular environment copied to ${copyPath}`);
+ }
+ });
}
});
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 39d3a0d5..5abba084 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -17,8 +17,8 @@
{{ entry.text }}
- -