Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions .github/workflows/azure-static-web-apps-red-stone-0d8c5ed03.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Azure Static Web Apps CI/CD

on:
push:
branches:
- dev
- main

jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v3
with:
submodules: true
lfs: false
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_RED_STONE_0D8C5ED03 }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "/out" # Built app content directory - optional
###### End of Repository/Build Configurations ######

31 changes: 1 addition & 30 deletions .storybook/main.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,7 @@ const config = {
// lightweight mocks so components render without a Next.js runtime.
alias: {
...config.resolve?.alias,
// stub for mui-tiptap's uninstalled required peer @tiptap/extension-image
'@tiptap/extension-image': path.resolve(
dirname,
'../tests/mocks/tiptap-extension-image.js',
),
'next/dynamic': path.resolve(dirname, '../tests/mocks/next-dynamic.js'),
'next/dynamic': path.resolve(dirname, '../tests/mocks/next-dynamic.jsx'),
'next/router': path.resolve(dirname, '../tests/mocks/next-router.js'),
'next/navigation': path.resolve(dirname, '../tests/mocks/next-navigation.js'),
'next/head': path.resolve(dirname, '../tests/mocks/next-head.js'),
Expand All @@ -66,16 +61,6 @@ const config = {
'process.env': '{}',
global: 'window',
},
esbuild: {
...config.esbuild,
// The codebase uses .js files with JSX syntax. Vite's default esbuild loader
// only handles JSX in .jsx files, so we override the loader for all .js files.
jsx: 'automatic',
jsxImportSource: 'react',
loader: 'jsx',
include: /(src|tests|\.storybook)\/.*\.(js|jsx)$/,
exclude: [],
},
build: {
...config.build,
rollupOptions: {
Expand All @@ -89,20 +74,6 @@ const config = {
},
},
},
optimizeDeps: {
...config.optimizeDeps,
// Same JSX-in-.js fix as above, but for Vite's dependency pre-bundling step
// (esbuild runs separately for optimizeDeps vs transform).
esbuildOptions: {
...config.optimizeDeps?.esbuildOptions,
jsx: 'automatic',
jsxImportSource: 'react',
loader: {
'.js': 'jsx',
'.jsx': 'jsx',
},
},
},
}
},
staticDirs: ['../public'],
Expand Down
5 changes: 3 additions & 2 deletions .storybook/vitest.setup.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { configure } from 'storybook/test'
import '../tests/mocks/require-context'

// coverage instrumentation slows lazy chunks and fetches past the 1s default
configure({ asyncUtilTimeout: 10000 })
// coverage instrumentation and vite 8's slower module serving push lazy chunks
// and fetches past the 1s default (and past 10s when the full suite runs)
configure({ asyncUtilTimeout: 30000 })
3 changes: 3 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ const eslintConfig = defineConfig([
maximum: 10,
},
],
// JSX must live in .jsx files: vite 8's oxc transform (vitest/storybook)
// decides JSX handling purely by file extension
'react/jsx-filename-extension': ['error', { extensions: ['.jsx'] }],
},
},
{
Expand Down
1 change: 0 additions & 1 deletion next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ const config = {
webpackMemoryOptimizations: true,
preloadEntriesOnStart: false,
turbopackFileSystemCacheForDev: false,
turbopackMemoryLimit: 4096,
},
images: {
unoptimized: true,
Expand Down
89 changes: 48 additions & 41 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cipp",
"version": "10.9.1",
"version": "11.0.2",
"author": "CIPP Contributors",
"homepage": "https://cipp.app/",
"bugs": {
Expand Down Expand Up @@ -38,38 +38,40 @@
"@emotion/react": "11.14.0",
"@emotion/server": "11.11.0",
"@emotion/styled": "11.14.1",
"@floating-ui/dom": "1.8.0",
"@heroicons/react": "2.2.0",
"@monaco-editor/react": "^4.6.0",
"@mui/icons-material": "7.3.10",
"@mui/lab": "7.0.0-beta.17",
"@mui/material": "7.3.10",
"@mui/system": "7.3.10",
"@mui/x-date-pickers": "^9.10.1",
"@mui/icons-material": "9.4.0",
"@mui/lab": "9.0.0-beta.9",
"@mui/material": "9.4.0",
"@mui/system": "9.4.0",
"@mui/x-date-pickers": "^9.12.0",
"@musement/iso-duration": "^1.0.0",
"@nivo/core": "^0.99.0",
"@nivo/sankey": "^0.99.0",
"@react-pdf/renderer": "^4.5.1",
"@react-pdf/renderer": "4.5.1",
"@reduxjs/toolkit": "^2.12.0",
"@tanstack/query-sync-storage-persister": "^5.90.25",
"@tanstack/react-query": "^5.101.2",
"@tanstack/query-sync-storage-persister": "^5.102.8",
"@tanstack/react-query": "^5.104.0",
"@tanstack/react-query-devtools": "^5.101.2",
"@tanstack/react-query-persist-client": "^5.101.2",
"@tanstack/react-table": "^8.19.2",
"@tiptap/core": "^3.29.2",
"@tiptap/extension-heading": "^3.27.3",
"@tiptap/extension-table": "^3.20.5",
"@tiptap/pm": "^3.29.2",
"@tiptap/react": "^3.20.5",
"@tiptap/starter-kit": "^3.29.2",
"@tiptap/core": "^3.31.3",
"@tiptap/extension-heading": "^3.31.3",
"@tiptap/extension-image": "^3.31.3",
"@tiptap/extension-table": "^3.31.3",
"@tiptap/pm": "^3.31.3",
"@tiptap/react": "^3.31.3",
"@tiptap/starter-kit": "^3.31.3",
"@vvo/tzdb": "^6.198.0",
"apexcharts": "6.6.1",
"axios": "1.18.1",
"apexcharts": "7.1.0",
"axios": "1.20.0",
"date-fns": "4.4.0",
"diff": "^9.0.0",
"dompurify": "^3.4.12",
"driver.js": "^1.4.0",
"driver.js": "^1.8.0",
"eml-parse-js": "^1.2.0-beta.0",
"export-to-csv": "^1.3.0",
"export-to-csv": "^1.5.0",
"formik": "2.4.9",
"gray-matter": "4.0.3",
"javascript-time-ago": "^2.6.2",
Expand All @@ -82,75 +84,80 @@
"material-react-table": "^3.0.1",
"monaco-editor": "^0.55.1",
"mui-tiptap": "^1.31.0",
"next": "^16.2.11",
"next": "^16.3.8",
"nprogress": "0.2.0",
"numeral": "2.0.6",
"prop-types": "15.8.1",
"punycode": "^2.3.1",
"react": "19.2.8",
"react": "19.3.0",
"react-apexcharts": "2.1.1",
"react-beautiful-dnd": "13.1.1",
"react-dom": "19.2.8",
"react-dropzone": "20.0.0",
"react-dom": "19.3.0",
"react-dropzone": "20.1.2",
"react-error-boundary": "^6.1.2",
"react-hook-form": "^7.76.1",
"react-hot-toast": "2.6.0",
"react-html-parser": "^2.0.2",
"react-is": "19.2.8",
"react-leaflet": "5.0.0",
"react-leaflet-markercluster": "^5.0.0-rc.0",
"react-markdown": "10.1.0",
"react-media-hook": "^0.5.0",
"react-papaparse": "^4.4.0",
"react-quill": "^2.0.0",
"react-redux": "9.3.0",
"react-syntax-highlighter": "^16.1.0",
"react-time-ago": "^7.3.3",
"react-virtuoso": "^4.18.7",
"recharts": "^3.8.1",
"recharts": "^3.10.1",
"redux": "5.0.1",
"redux-persist": "^6.0.0",
"rehype-raw": "^7.0.0",
"remark-gfm": "^4.0.0",
"remark-parse": "^11.0.0",
"simplebar": "6.3.3",
"simplebar-react": "3.3.2",
"stylis": "4.2.0",
"stylis-plugin-rtl": "2.1.1",
"swagger-ui-dist": "5.32.12",
"unified": "^11.0.5",
"yup": "1.7.1"
},
"devDependencies": {
"@storybook/addon-a11y": "10.3.5",
"@storybook/addon-docs": "10.3.5",
"@storybook/addon-themes": "10.3.5",
"@storybook/addon-vitest": "10.3.5",
"@storybook/addon-a11y": "10.6.0",
"@storybook/addon-docs": "10.5.10",
"@storybook/addon-themes": "10.5.10",
"@storybook/addon-vitest": "10.6.0",
"@storybook/react-vite": "10.3.5",
"@svgr/webpack": "8.1.0",
"@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "16.3.2",
"@testing-library/user-event": "14.6.1",
"@vitest/browser-playwright": "4.1.10",
"@vitest/coverage-v8": "4.1.10",
"@testing-library/user-event": "14.6.7",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitest/browser-playwright": "4.1.11",
"@vitest/coverage-v8": "4.1.11",
"eslint": "^9.39.4",
"eslint-config-next": "^16.2.10",
"eslint-config-next": "^16.3.6",
"eslint-config-prettier": "^10.1.8",
"jsdom": "29.0.1",
"msw": "2.12.14",
"msw-storybook-addon": "3.0.0",
"playwright": "1.59.1",
"msw": "2.15.0",
"msw-storybook-addon": "3.0.3",
"playwright": "1.63.0",
"prettier": "^3.9.6",
"storybook": "10.5.7",
"storybook": "10.6.0",
"typescript": "5.9.3",
"vite": "7.3.6",
"vitest": "4.1.10"
"vite": "8.2.2",
"vitest": "4.1.11"
},
"msw": {
"workerDirectory": [
"public"
]
},
"resolutions": {
"vite": "7.3.6"
"vite": "8.2.2",
"postcss": "^8.5.23",
"sharp": "^0.35.0",
"monaco-editor/dompurify": "^3.4.14"
}
}
2 changes: 1 addition & 1 deletion public/intune-definitions/03.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/05.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/07.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/08.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/0b.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/0e.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/0f.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/13.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/15.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/17.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/1a.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/1b.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/20.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/24.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/25.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/28.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/2c.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/30.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/31.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/33.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/34.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/38.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/3d.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/3e.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/41.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/42.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/46.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/49.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/4c.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/50.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/51.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/54.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/55.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/59.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/5a.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/5b.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/64.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/69.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/70.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/76.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/86.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/88.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/89.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/8e.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/8f.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/93.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/94.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/9a.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/9b.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/9c.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/9e.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/a1.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/a2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/ac.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/ad.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/af.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/b2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/b5.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/b7.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/ba.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/bb.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/be.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/bf.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/c4.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/c6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/cb.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/cd.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/cf.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/d4.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/d6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/d7.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/d8.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/da.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/e6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/e7.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/e9.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/f0.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/f3.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/f8.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/f9.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/fb.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/fc.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/fd.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/fe.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intune-definitions/ff.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/intuneCategories.json

Large diffs are not rendered by default.

30 changes: 21 additions & 9 deletions public/mockServiceWorker.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
* - Please do NOT modify this file.
*/

const PACKAGE_VERSION = '2.12.14'
const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
const PACKAGE_VERSION = '2.15.0'
const INTEGRITY_CHECKSUM = '03cb67ac84128e63d7cd722a6e5b7f1e'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set()

Expand Down Expand Up @@ -137,8 +137,18 @@ async function handleRequest(event, requestId, requestInterceptedAt) {
if (client && activeClientIds.has(client.id)) {
const serializedRequest = await serializeRequest(requestCloneForEvents)

// Omit the body of server-sent event stream responses.
// Cloning such responses would prevent client-side stream cancelations
// from reaching the original stream (a teed stream only cancels its
// source once both of its branches cancel) and would buffer the
// entire stream into the unconsumed clone indefinitely.
const isEventStreamResponse = response.headers
.get('content-type')
?.toLowerCase()
.startsWith('text/event-stream')

// Clone the response so both the client and the library could consume it.
const responseClone = response.clone()
const responseClone = isEventStreamResponse ? null : response.clone()

sendToClient(
client,
Expand All @@ -151,15 +161,17 @@ async function handleRequest(event, requestId, requestInterceptedAt) {
...serializedRequest,
},
response: {
type: responseClone.type,
status: responseClone.status,
statusText: responseClone.statusText,
headers: Object.fromEntries(responseClone.headers.entries()),
body: responseClone.body,
type: response.type,
status: response.status,
statusText: response.statusText,
headers: Object.fromEntries(response.headers.entries()),
body: responseClone ? responseClone.body : null,
},
},
},
responseClone.body ? [serializedRequest.body, responseClone.body] : [],
responseClone && responseClone.body
? [serializedRequest.body, responseClone.body]
: [],
)
}

Expand Down
46 changes: 41 additions & 5 deletions public/sw.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,44 @@
// Minimal service worker to satisfy Chrome's installability criteria.
// This does NOT cache anything or provide offline support — it simply
// passes all requests through to the network so Chrome treats the site
// as an installable web app.
// Minimal service worker: no caching or offline support, every request passes
// through to the network. It exists so the site is installable and so Web Push
// has somewhere to land when the app is closed.

self.addEventListener('install', () => self.skipWaiting())
self.addEventListener('activate', (event) => event.waitUntil(self.clients.claim()))
self.addEventListener('activate', (event) =>
event.waitUntil(self.clients.claim())
)
self.addEventListener('fetch', () => {})

self.addEventListener('push', (event) => {
let data = {}
try {
data = event.data ? event.data.json() : {}
} catch {
data = { body: event.data ? event.data.text() : '' }
}
event.waitUntil(
self.registration.showNotification(data.title || 'CIPP', {
body: data.body || '',
icon: '/android-chrome-192x192.png',
badge: '/android-chrome-192x192.png',
data: { url: data.url || '/' },
})
)
})

self.addEventListener('notificationclick', (event) => {
event.notification.close()
const url = new URL(event.notification.data?.url || '/', self.location.origin)
.href
event.waitUntil(
self.clients
.matchAll({ type: 'window', includeUncontrolled: true })
.then((clients) => {
const existing = clients.find((client) => 'focus' in client)
if (existing) {
existing.navigate(url)
return existing.focus()
}
return self.clients.openWindow(url)
})
)
})
4 changes: 2 additions & 2 deletions public/version.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"version": "10.9.1"
}
"version": "11.0.2"
}
Loading
Loading