diff --git a/.eslintrc.json b/.eslintrc.json index 5662ac5281..c79ba1bcb1 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -139,6 +139,15 @@ "tailwindcss/no-contradicting-classname": "error" } }, + { + "files": ["libs/admin-console/src/**/*.ts"], + "rules": { + "no-restricted-imports": [ + "error", + { "patterns": ["@bitwarden/admin-console/*", "src/**/*"] } + ] + } + }, { "files": ["libs/angular/src/**/*.ts"], "rules": { @@ -151,6 +160,12 @@ "no-restricted-imports": ["error", { "patterns": ["@bitwarden/auth/*", "src/**/*"] }] } }, + { + "files": ["libs/billing/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/billing/*", "src/**/*"] }] + } + }, { "files": ["libs/common/src/**/*.ts"], "rules": { @@ -184,6 +199,12 @@ "no-restricted-imports": ["error", { "patterns": ["@bitwarden/node/*", "src/**/*"] }] } }, + { + "files": ["libs/platform/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/platform/*", "src/**/*"] }] + } + }, { "files": ["libs/vault/src/**/*.ts"], "rules": { diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 38eb90b1b0..6a56162b3b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -55,11 +55,13 @@ apps/web/src/app/admin-console @bitwarden/team-admin-console-dev bitwarden_license/bit-web/src/app/admin-console @bitwarden/team-admin-console-dev libs/angular/src/admin-console @bitwarden/team-admin-console-dev libs/common/src/admin-console @bitwarden/team-admin-console-dev +libs/admin-console @bitwarden/team-admin-console-dev ## Billing team files ## apps/web/src/app/billing @bitwarden/team-billing-dev libs/angular/src/billing @bitwarden/team-billing-dev libs/common/src/billing @bitwarden/team-billing-dev +libs/billing @bitwarden/team-billing-dev ## Platform team files ## apps/browser/src/platform @bitwarden/team-platform-dev @@ -70,6 +72,7 @@ libs/angular/src/platform @bitwarden/team-platform-dev libs/common/src/platform @bitwarden/team-platform-dev libs/common/spec @bitwarden/team-platform-dev libs/common/src/state-migrations @bitwarden/team-platform-dev +libs/platform @bitwarden/team-platform-dev # Node-specifc platform files libs/node @bitwarden/team-platform-dev # Web utils used across app and connectors diff --git a/.github/whitelist-capital-letters.txt b/.github/whitelist-capital-letters.txt index ef2ff29ed8..353cc05610 100644 --- a/.github/whitelist-capital-letters.txt +++ b/.github/whitelist-capital-letters.txt @@ -15,7 +15,10 @@ ./libs/angular/src/scss/webfonts/Open_Sans-normal-600.woff ./libs/angular/src/scss/webfonts/Open_Sans-normal-800.woff ./libs/angular/src/scss/webfonts/Open_Sans-normal-400.woff +./libs/admin-console/README.md ./libs/auth/README.md +./libs/billing/README.md +./libs/platform/README.md ./libs/tools/README.md ./libs/vault/README.md ./README.md diff --git a/apps/browser/tsconfig.json b/apps/browser/tsconfig.json index 3ad2be7c02..d7f44476ad 100644 --- a/apps/browser/tsconfig.json +++ b/apps/browser/tsconfig.json @@ -10,13 +10,16 @@ "sourceMap": true, "baseUrl": ".", "paths": { + "@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/auth": ["../../libs/auth/src"], + "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], "@bitwarden/exporter/*": ["../../libs/exporter/src/*"], "@bitwarden/importer/core": ["../../libs/importer/src"], "@bitwarden/importer/ui": ["../../libs/importer/src/components"], + "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/vault": ["../../libs/vault/src"] }, "useDefineForClassFields": false diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json index 6f220dd26a..6de6305f92 100644 --- a/apps/desktop/tsconfig.json +++ b/apps/desktop/tsconfig.json @@ -10,14 +10,17 @@ "types": [], "baseUrl": ".", "paths": { + "@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/auth": ["../../libs/auth/src"], + "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], "@bitwarden/exporter/*": ["../../libs/exporter/src/*"], "@bitwarden/importer/core": ["../../libs/importer/src"], "@bitwarden/importer/ui": ["../../libs/importer/src/components"], "@bitwarden/node/*": ["../../libs/node/src/*"], + "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/vault": ["../../libs/vault/src"] }, "useDefineForClassFields": false diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index a1ea71f4bb..1670518318 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -5,13 +5,16 @@ "module": "ES2020", "resolveJsonModule": true, "paths": { + "@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/auth": ["../../libs/auth/src"], + "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], "@bitwarden/exporter/*": ["../../libs/exporter/src/*"], "@bitwarden/importer/core": ["../../libs/importer/src"], "@bitwarden/importer/ui": ["../../libs/importer/src/components"], + "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/vault": ["../../libs/vault/src"], "@bitwarden/web-vault/*": ["src/*"] } diff --git a/bitwarden_license/bit-web/tsconfig.json b/bitwarden_license/bit-web/tsconfig.json index 0612053e4e..c94e20a2a8 100644 --- a/bitwarden_license/bit-web/tsconfig.json +++ b/bitwarden_license/bit-web/tsconfig.json @@ -2,11 +2,14 @@ "extends": "../../apps/web/tsconfig", "compilerOptions": { "paths": { + "@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/auth": ["../../libs/auth/src"], + "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], "@bitwarden/exporter/*": ["../../libs/exporter/src/*"], + "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/vault": ["../../libs/vault/src"], "@bitwarden/web-vault/*": ["../../apps/web/src/*"] } diff --git a/jest.config.js b/jest.config.js index 035d90bda6..41249c2397 100644 --- a/jest.config.js +++ b/jest.config.js @@ -20,12 +20,15 @@ module.exports = { "/apps/web/jest.config.js", "/bitwarden_license/bit-web/jest.config.js", + "/libs/admin-console/jest.config.js", "/libs/angular/jest.config.js", "/libs/auth/jest.config.js", + "/libs/billing/jest.config.js", "/libs/common/jest.config.js", "/libs/components/jest.config.js", "/libs/exporter/jest.config.js", "/libs/importer/jest.config.js", + "/libs/platform/jest.config.js", "/libs/node/jest.config.js", "/libs/vault/jest.config.js", ], diff --git a/libs/admin-console/README.md b/libs/admin-console/README.md new file mode 100644 index 0000000000..51e70b2cd5 --- /dev/null +++ b/libs/admin-console/README.md @@ -0,0 +1,3 @@ +# Admin Console + +This lib represents the public API of the Admin Console team at Bitwarden. Modules are imported using `@bitwarden/admin-console`. diff --git a/libs/admin-console/jest.config.js b/libs/admin-console/jest.config.js new file mode 100644 index 0000000000..5d6c94d585 --- /dev/null +++ b/libs/admin-console/jest.config.js @@ -0,0 +1,16 @@ +const { pathsToModuleNameMapper } = require("ts-jest"); + +const { compilerOptions } = require("../shared/tsconfig.libs"); + +const sharedConfig = require("../../libs/shared/jest.config.angular"); + +/** @type {import('jest').Config} */ +module.exports = { + ...sharedConfig, + displayName: "libs/admin-console tests", + preset: "jest-preset-angular", + setupFilesAfterEnv: ["/test.setup.ts"], + moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { + prefix: "/", + }), +}; diff --git a/libs/admin-console/package.json b/libs/admin-console/package.json new file mode 100644 index 0000000000..c319beb8f4 --- /dev/null +++ b/libs/admin-console/package.json @@ -0,0 +1,20 @@ +{ + "name": "@bitwarden/admin-console", + "version": "0.0.0", + "description": "Common code used across Bitwarden JavaScript projects.", + "keywords": [ + "bitwarden" + ], + "author": "Bitwarden Inc.", + "homepage": "https://bitwarden.com", + "repository": { + "type": "git", + "url": "https://github.com/bitwarden/clients" + }, + "license": "GPL-3.0", + "scripts": { + "clean": "rimraf dist", + "build": "npm run clean && tsc", + "build:watch": "npm run clean && tsc -watch" + } +} diff --git a/libs/admin-console/src/index.ts b/libs/admin-console/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/admin-console/test.setup.ts b/libs/admin-console/test.setup.ts new file mode 100644 index 0000000000..6be6e7b8dd --- /dev/null +++ b/libs/admin-console/test.setup.ts @@ -0,0 +1,28 @@ +import { webcrypto } from "crypto"; +import "jest-preset-angular/setup-jest"; + +Object.defineProperty(window, "CSS", { value: null }); +Object.defineProperty(window, "getComputedStyle", { + value: () => { + return { + display: "none", + appearance: ["-webkit-appearance"], + }; + }, +}); + +Object.defineProperty(document, "doctype", { + value: "", +}); +Object.defineProperty(document.body.style, "transform", { + value: () => { + return { + enumerable: true, + configurable: true, + }; + }, +}); + +Object.defineProperty(window, "crypto", { + value: webcrypto, +}); diff --git a/libs/admin-console/tsconfig.json b/libs/admin-console/tsconfig.json new file mode 100644 index 0000000000..6004a56fb5 --- /dev/null +++ b/libs/admin-console/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../shared/tsconfig.libs", + "include": ["src", "spec"], + "exclude": ["node_modules", "dist"] +} diff --git a/libs/admin-console/tsconfig.spec.json b/libs/admin-console/tsconfig.spec.json new file mode 100644 index 0000000000..de184bd760 --- /dev/null +++ b/libs/admin-console/tsconfig.spec.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "files": ["./test.setup.ts"] +} diff --git a/libs/billing/README.md b/libs/billing/README.md new file mode 100644 index 0000000000..696680b8b0 --- /dev/null +++ b/libs/billing/README.md @@ -0,0 +1,3 @@ +# Billing + +This lib represents the public API of the Billing team at Bitwarden. Modules are imported using `@bitwarden/billing`. diff --git a/libs/billing/jest.config.js b/libs/billing/jest.config.js new file mode 100644 index 0000000000..d9bae9633e --- /dev/null +++ b/libs/billing/jest.config.js @@ -0,0 +1,16 @@ +const { pathsToModuleNameMapper } = require("ts-jest"); + +const { compilerOptions } = require("../shared/tsconfig.libs"); + +const sharedConfig = require("../../libs/shared/jest.config.angular"); + +/** @type {import('jest').Config} */ +module.exports = { + ...sharedConfig, + displayName: "libs/billing tests", + preset: "jest-preset-angular", + setupFilesAfterEnv: ["/test.setup.ts"], + moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { + prefix: "/", + }), +}; diff --git a/libs/billing/package.json b/libs/billing/package.json new file mode 100644 index 0000000000..8858cfaa26 --- /dev/null +++ b/libs/billing/package.json @@ -0,0 +1,20 @@ +{ + "name": "@bitwarden/billing", + "version": "0.0.0", + "description": "Common code used across Bitwarden JavaScript projects.", + "keywords": [ + "bitwarden" + ], + "author": "Bitwarden Inc.", + "homepage": "https://bitwarden.com", + "repository": { + "type": "git", + "url": "https://github.com/bitwarden/clients" + }, + "license": "GPL-3.0", + "scripts": { + "clean": "rimraf dist", + "build": "npm run clean && tsc", + "build:watch": "npm run clean && tsc -watch" + } +} diff --git a/libs/billing/src/index.ts b/libs/billing/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/billing/test.setup.ts b/libs/billing/test.setup.ts new file mode 100644 index 0000000000..6be6e7b8dd --- /dev/null +++ b/libs/billing/test.setup.ts @@ -0,0 +1,28 @@ +import { webcrypto } from "crypto"; +import "jest-preset-angular/setup-jest"; + +Object.defineProperty(window, "CSS", { value: null }); +Object.defineProperty(window, "getComputedStyle", { + value: () => { + return { + display: "none", + appearance: ["-webkit-appearance"], + }; + }, +}); + +Object.defineProperty(document, "doctype", { + value: "", +}); +Object.defineProperty(document.body.style, "transform", { + value: () => { + return { + enumerable: true, + configurable: true, + }; + }, +}); + +Object.defineProperty(window, "crypto", { + value: webcrypto, +}); diff --git a/libs/billing/tsconfig.json b/libs/billing/tsconfig.json new file mode 100644 index 0000000000..6004a56fb5 --- /dev/null +++ b/libs/billing/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../shared/tsconfig.libs", + "include": ["src", "spec"], + "exclude": ["node_modules", "dist"] +} diff --git a/libs/billing/tsconfig.spec.json b/libs/billing/tsconfig.spec.json new file mode 100644 index 0000000000..de184bd760 --- /dev/null +++ b/libs/billing/tsconfig.spec.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "files": ["./test.setup.ts"] +} diff --git a/libs/platform/README.md b/libs/platform/README.md new file mode 100644 index 0000000000..0c67aba14c --- /dev/null +++ b/libs/platform/README.md @@ -0,0 +1,3 @@ +# Platform + +This lib represents the public API of the Platform team at Bitwarden. Modules are imported using `@bitwarden/platform`. diff --git a/libs/platform/jest.config.js b/libs/platform/jest.config.js new file mode 100644 index 0000000000..4649b293a7 --- /dev/null +++ b/libs/platform/jest.config.js @@ -0,0 +1,16 @@ +const { pathsToModuleNameMapper } = require("ts-jest"); + +const { compilerOptions } = require("../shared/tsconfig.libs"); + +const sharedConfig = require("../../libs/shared/jest.config.angular"); + +/** @type {import('jest').Config} */ +module.exports = { + ...sharedConfig, + displayName: "libs/platform tests", + preset: "jest-preset-angular", + setupFilesAfterEnv: ["/test.setup.ts"], + moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { + prefix: "/", + }), +}; diff --git a/libs/platform/package.json b/libs/platform/package.json new file mode 100644 index 0000000000..093019b446 --- /dev/null +++ b/libs/platform/package.json @@ -0,0 +1,20 @@ +{ + "name": "@bitwarden/platform", + "version": "0.0.0", + "description": "Common code used across Bitwarden JavaScript projects.", + "keywords": [ + "bitwarden" + ], + "author": "Bitwarden Inc.", + "homepage": "https://bitwarden.com", + "repository": { + "type": "git", + "url": "https://github.com/bitwarden/clients" + }, + "license": "GPL-3.0", + "scripts": { + "clean": "rimraf dist", + "build": "npm run clean && tsc", + "build:watch": "npm run clean && tsc -watch" + } +} diff --git a/libs/platform/src/index.ts b/libs/platform/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/platform/test.setup.ts b/libs/platform/test.setup.ts new file mode 100644 index 0000000000..6be6e7b8dd --- /dev/null +++ b/libs/platform/test.setup.ts @@ -0,0 +1,28 @@ +import { webcrypto } from "crypto"; +import "jest-preset-angular/setup-jest"; + +Object.defineProperty(window, "CSS", { value: null }); +Object.defineProperty(window, "getComputedStyle", { + value: () => { + return { + display: "none", + appearance: ["-webkit-appearance"], + }; + }, +}); + +Object.defineProperty(document, "doctype", { + value: "", +}); +Object.defineProperty(document.body.style, "transform", { + value: () => { + return { + enumerable: true, + configurable: true, + }; + }, +}); + +Object.defineProperty(window, "crypto", { + value: webcrypto, +}); diff --git a/libs/platform/tsconfig.json b/libs/platform/tsconfig.json new file mode 100644 index 0000000000..6004a56fb5 --- /dev/null +++ b/libs/platform/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../shared/tsconfig.libs", + "include": ["src", "spec"], + "exclude": ["node_modules", "dist"] +} diff --git a/libs/platform/tsconfig.spec.json b/libs/platform/tsconfig.spec.json new file mode 100644 index 0000000000..de184bd760 --- /dev/null +++ b/libs/platform/tsconfig.spec.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "files": ["./test.setup.ts"] +} diff --git a/libs/shared/tsconfig.libs.json b/libs/shared/tsconfig.libs.json index 1addd88d4c..59558c37cc 100644 --- a/libs/shared/tsconfig.libs.json +++ b/libs/shared/tsconfig.libs.json @@ -2,13 +2,16 @@ "extends": "./tsconfig", "compilerOptions": { "paths": { + "@bitwarden/admin-console": ["../admin-console/src"], "@bitwarden/angular/*": ["../angular/src/*"], "@bitwarden/auth": ["../auth/src"], + "@bitwarden/billing": ["../billing/src"], "@bitwarden/common/*": ["../common/src/*"], "@bitwarden/components": ["../components/src"], "@bitwarden/exporter/*": ["../exporter/src/*"], "@bitwarden/importer/core": ["../importer/src"], "@bitwarden/importer/ui": ["../importer/src/components"], + "@bitwarden/platform": ["../platform/src"], "@bitwarden/node/*": ["../node/src/*"], "@bitwarden/vault": ["../vault/src"] } diff --git a/package-lock.json b/package-lock.json index ea8955f2ad..6cce32b3e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -262,6 +262,10 @@ "name": "@bitwarden/web-vault", "version": "2023.12.0" }, + "libs/admin-console": { + "version": "0.0.0", + "license": "GPL-3.0" + }, "libs/angular": { "name": "@bitwarden/angular", "version": "0.0.0", @@ -272,6 +276,10 @@ "version": "0.0.0", "license": "GPL-3.0" }, + "libs/billing": { + "version": "0.0.0", + "license": "GPL-3.0" + }, "libs/common": { "name": "@bitwarden/common", "version": "0.0.0", @@ -306,6 +314,10 @@ "@bitwarden/common": "file:../common" } }, + "libs/platform": { + "version": "0.0.0", + "license": "GPL-3.0" + }, "libs/vault": { "name": "@bitwarden/vault", "version": "0.0.0", @@ -4577,6 +4589,10 @@ "dev": true, "peer": true }, + "node_modules/@bitwarden/admin-console": { + "resolved": "libs/admin-console", + "link": true + }, "node_modules/@bitwarden/angular": { "resolved": "libs/angular", "link": true @@ -4585,6 +4601,10 @@ "resolved": "libs/auth", "link": true }, + "node_modules/@bitwarden/billing": { + "resolved": "libs/billing", + "link": true + }, "node_modules/@bitwarden/browser": { "resolved": "apps/browser", "link": true @@ -4621,6 +4641,10 @@ "resolved": "libs/node", "link": true }, + "node_modules/@bitwarden/platform": { + "resolved": "libs/platform", + "link": true + }, "node_modules/@bitwarden/vault": { "resolved": "libs/vault", "link": true diff --git a/tailwind.config.js b/tailwind.config.js index f5770840dd..50d82bf7d8 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -3,7 +3,10 @@ const config = require("./libs/components/tailwind.config.base"); config.content = [ "./libs/components/src/**/*.{html,ts,mdx}", + "./libs/admin-console/src/**/*.{html,ts,mdx}", "./libs/auth/src/**/*.{html,ts,mdx}", + "./libs/billing/src/**/*.{html,ts,mdx}", + "./libs/platform/src/**/*.{html,ts,mdx}", "./libs/vault/src/**/*.{html,ts,mdx}", "./apps/web/src/**/*.{html,ts,mdx}", "./bitwarden_license/bit-web/src/**/*.{html,ts,mdx}", diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 0ccac14430..72c3f9bde9 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -15,13 +15,16 @@ "outDir": "dist", "baseUrl": ".", "paths": { + "@bitwarden/admin-console": ["./libs/admin-console/src"], "@bitwarden/angular/*": ["./libs/angular/src/*"], "@bitwarden/auth": ["./libs/auth/src"], + "@bitwarden/billing": ["./libs/billing/src"], "@bitwarden/common/*": ["./libs/common/src/*"], "@bitwarden/components": ["./libs/components/src"], "@bitwarden/exporter/*": ["./libs/exporter/src/*"], "@bitwarden/importer/core": ["./libs/importer/src"], "@bitwarden/importer/ui": ["./libs/importer/src/components"], + "@bitwarden/platform": ["./libs/platform/src"], "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/vault": ["./libs/vault/src"] }, diff --git a/tsconfig.json b/tsconfig.json index 03404b581b..b04fa3fb0e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,13 +15,16 @@ "baseUrl": ".", "resolveJsonModule": true, "paths": { + "@bitwarden/admin-console": ["./libs/admin-console/src"], "@bitwarden/angular/*": ["./libs/angular/src/*"], "@bitwarden/auth": ["./libs/auth/src"], + "@bitwarden/billing": ["./libs/billing/src"], "@bitwarden/common/*": ["./libs/common/src/*"], "@bitwarden/components": ["./libs/components/src"], "@bitwarden/exporter/*": ["./libs/exporter/src/*"], "@bitwarden/importer/core": ["./libs/importer/src"], "@bitwarden/importer/ui": ["./libs/importer/src/components"], + "@bitwarden/platform": ["./libs/platform/src"], "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/web-vault/*": ["./apps/web/src/*"], "@bitwarden/vault": ["./libs/vault/src"]