{ "name": "monitor", "version": "1.0.0", "description": "Firefox Monitor", "engines": { "node": "18.12.x", "npm": "9.6.5" }, "type": "module", "scripts": { "dev": "next dev --port=6060", "build": "npm run get-location-data && npm run build-glean && next build", "start": "next start", "lint": "stylelint '**/*.scss' && prettier --check './src' && next lint --max-warnings=0", "fix": "prettier --write './src' && next lint --fix && stylelint --fix '**/*.scss'", "test": "jest", "e2e": "playwright test src/e2e/", "e2e:debug": "playwright test src/e2e/ --ui", "e2e:smoke": "playwright test src/e2e/ --grep @smoke", "db:migrate": "node -r dotenv/config node_modules/knex/bin/cli.js migrate:latest --knexfile src/db/knexfile.js", "db:rollback": "node -r dotenv/config node_modules/knex/bin/cli.js migrate:rollback --knexfile src/db/knexfile.js", "prepare": "husky install", "postinstall": "patch-package", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "create-location-data": "node src/scripts/uploadAutoCompleteLocations.js", "get-location-data": "node src/scripts/getAutoCompleteLocations.js", "build-glean": "glean translate src/telemetry/metrics.yaml --format javascript --output src/telemetry/generated" }, "nodemonConfig": { "watch": [ ".env" ], "env": { "LIVE_RELOAD": true }, "ext": "js,css,json,ftl,env" }, "repository": { "type": "git", "url": "git+https://github.com/mozilla/blurts-server.git" }, "homepage": "https://github.com/mozilla/blurts-server", "license": "MPL-2.0", "volta": { "node": "20.5.1", "npm": "9.6.5" }, "dependencies": { "@aws-sdk/client-s3": "^3.428.0", "@aws-sdk/lib-storage": "^3.428.0", "@fluent/bundle": "^0.18.0", "@fluent/langneg": "^0.7.0", "@fluent/react": "^0.15.2", "@google-cloud/pubsub": "^4.0.6", "@grpc/grpc-js": "1.9.5", "@leeoniya/ufuzzy": "^1.0.8", "@mozilla/glean": "^2.0.2", "@sentry/nextjs": "^7.73.0", "@sentry/node": "^7.58.1", "@sentry/tracing": "^7.58.1", "@types/jsdom": "^21.1.3", "@types/node": "^20.6.5", "@types/react": "^18.2.28", "@types/react-dom": "^18.2.13", "client-oauth2": "^4.3.3", "dotenv": "^16.3.1", "eslint-config-next": "^13.5.4", "jsdom": "^22.0.0", "jsonwebtoken": "^9.0.0", "jwk-to-pem": "^2.0.5", "knex": "^3.0.1", "mozlog": "^3.0.2", "next": "^13.5.4", "next-auth": "^4.22.1", "nodemailer": "^6.9.1", "patch-package": "^8.0.0", "pg": "^8.11.3", "react": "^18.2.0", "react-aria": "^3.29.0", "react-cookie": "^4.1.1", "react-dom": "^18.2.0", "react-stately": "^3.27.0", "uuid": "^9.0.0" }, "devDependencies": { "@faker-js/faker": "^8.0.2", "@playwright/test": "^1.36.1", "@storybook/addon-a11y": "^7.4.6", "@storybook/addon-essentials": "^7.4.6", "@storybook/addon-interactions": "^7.4.6", "@storybook/addon-links": "^7.4.6", "@storybook/blocks": "^7.0.18", "@storybook/nextjs": "^7.4.6", "@storybook/react": "^7.0.18", "@storybook/testing-library": "^0.2.2", "@testing-library/jest-dom": "^6.1.4", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.5.1", "@types/adm-zip": "^0.5.2", "@types/jest-axe": "^3.5.6", "@types/jsonwebtoken": "^9.0.2", "@types/jwk-to-pem": "^2.0.1", "@types/nodemailer": "^6.4.8", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", "adm-zip": "^0.5.10", "c8": "^8.0.1", "eslint": "^8.51.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-check-file": "^2.6.2", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jest": "^27.4.2", "eslint-plugin-jsdoc": "^46.8.2", "eslint-plugin-storybook": "^0.6.15", "husky": "^8.0.3", "jest": "^29.7.0", "jest-axe": "^8.0.0", "jest-environment-jsdom": "^29.7.0", "jest-fail-on-console": "^3.1.1", "lint-staged": "^14.0.1", "prettier": "3.0.3", "react-intersection-observer": "^9.5.2", "sass": "^1.69.2", "storybook": "^7.4.6", "stylelint": "^15.6.0", "stylelint-config-recommended-scss": "^11.0.0", "stylelint-scss": "^5.2.1", "ts-jest": "^29.1.0", "ts-node": "^10.9.1", "typescript": "^5.0.4" } }