diff --git a/README.md b/README.md index cf9ece3..2b943d6 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,93 @@ -# Website +# 确实开源帮助中心 -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. +## 贡献文档方式 +#### 1.复刻主仓库 +![](https://gitlink.org.cn/api/attachments/412462) +
-## Installation +#### 2.进入复刻仓库编辑文档 +![](https://gitlink.org.cn/api/attachments/412465) -```console -npm install +
+ +可采用如下两种方式编辑: +* 克隆复刻仓库到本地后,在**gitlink_help_center/docs**文件夹下新建文件夹或markdown文档,依次执行 +```bash + git add <新增文件> + git commit <新增文件> -m "提交信息" + git push ``` +* 在gitlink代码仓库页面进行编辑,然后点击“提交变更” +![](https://gitlink.org.cn/api/attachments/412426) -## Local Development +
-```console -npm run dev -``` +#### 3.向主仓提交合并请求 +![](https://gitlink.org.cn/api/attachments/412466) -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. +
-## Build +## 页面目录——仓库目录示意图 -```console -npm run build -``` +
-This command generates static content into the `build` directory and can be served using any static contents hosting service. +1.如下图左边为帮助中心侧边栏一级目录展示效果,右边为代码仓库文件夹目录: +![](https://gitlink.org.cn/api/attachments/412473) -## Deployment +
-This website is deployed on render.com +2.如下图左边为帮助中心侧边栏点击一级目录“Test1”后展开效果,右边为点击代码仓库文件夹“test1”后md文件目录: +![](https://gitlink.org.cn/api/attachments/412474) -## Contributing +## 创建markdown文档 +* 创建第一篇文档 +在**docs/test1**目录下创建hello.md -Thanks for taking the time to contribute! Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make will benefit everybody and are appreciated. + ```bash + # Hello + + This is my **first document**! + ``` + 在一级标题中:#与标题内容间需要入空格(# Hello) -Please try to create bug reports that are: +* 配置侧边栏 + + ```bash + --- + sidebar_label: 'Hi!' + sidebar_position: 3 + --- + + # Hello + + This is my **first document**! + ``` + +
+ +* 链接 + + 支持使用 url 路径或相对文件路径的常规 Markdown 链接 + ```bash + git操作 [git](/git). + ``` + ``` + git操作 [git](./git.md). + ``` + +
+ +* 图片 + + 支持常规markdown图片,在**static/img/gitlink_logo.png**中添加一个图像.png并在Markdown中显示它: + ```bash + ![gitlink logo](/img/gitlink_logo.png) + + ``` + + ## 前端build成中文 (i18n中可编辑对应中文内容) + npm run build -- --locale zh-CN + 启动 npm run serve -- _Reproducible._ Include steps to reproduce the problem. -- _Specific._ Include as much detail as possible: which version, what environment, etc. -- _Unique._ Do not duplicate existing opened issues. -- _Scoped to a Single Bug._ One bug per report. -## Community -- [Discord](https://discord.gg/uyb7pYt4Pa) (For live discussion with the Community and BoxyHQ team) -- [Twitter](https://twitter.com/BoxyHQ) (Get the news fast) diff --git a/blog/2021-08-16-enterprise-readiness-made-simple.md b/blog/2021-08-16-enterprise-readiness-made-simple.md deleted file mode 100644 index 19ed8dd..0000000 --- a/blog/2021-08-16-enterprise-readiness-made-simple.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -slug: enterprise-readiness-made-simple -title: Enterprise Readiness made simple -author: Deepak Prabhakara -author_title: Co-founder & CEO @BoxyHQ -author_url: https://github.com/deepakprabhakara -author_image_url: https://boxyhq.com/img/team/deepak.jpg -tags_disabled: [enterprise-readiness] -image: /img/blog/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg ---- - -I love Lego (don't we all), probably a little more than my kids. It invokes a builder's instinct. I feel the same way with code as well. When I started my career in the early 2000s building software was complex. You had to visit datacenters and set up your servers to even get started, it was the age of the ASPs; the predecessor of SaaS. - -![Lego](/img/blog/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg) - -
Photo by Xavi Cabrera on Unsplash
- -Then came the Cloud; infrastructure at the click of a button. Nothing short of magic! And then over the last decade or so the Cloud enabled a lot of the re-usable services to be packaged up as APIs; enter the API Economy. If you need audio or video in your app, dial the Twilio API. If you need payments, cash in on the Stripe API. If you need authentication, sign in to the Auth0 API. The list is endless (also I ran out of puns). - -Coding today is like assembling lego blocks thanks to these APIs and developers love it. There is no need to re-invent these blocks in every startup, it’s much better to outsource the non-core stuff. - -I have spent a significant part of my career building products that were sold to the Enterprise. I have helped build out numerous Compliance and Security features, all essential to make the sale but still a big distraction from the core product. I have personally experienced the pain of balancing these Enterprise features with other core features. My co-founder Sama has spent a significant part of his career helping startups accelerate and connecting them to Enterprises. He has seen the pain of startups not being ready to sell to the Enterprise despite having fantastic products. - -We both looked at all this and questioned ourselves: What if Enterprise Readiness had an API? What would that look like? How would it work? Could we create a product that will help developers at startups address the hard problems of enterprise readiness, data security, and compliance? - -And we went ahead and started BoxyHQ to build this vision. BoxyHQ is a commercial open source software that helps you add enterprise features to your app in just a few lines of code. We want to make enterprise features simple, that's it. That's our focus for the next few years. We want to solve the hard things for you and give you back valuable time to focus on your core products. - -If you are selling to the Enterprise, come and say hello. We'd love to give you early access and help you with other aspects of Enterprise sales as well. - -_"Enterprise sales is fun!"_ - said no one ever diff --git a/blog/2021-11-07-the-ikea-effect-in-software-engineering.md b/blog/2021-11-07-the-ikea-effect-in-software-engineering.md deleted file mode 100644 index 851106f..0000000 --- a/blog/2021-11-07-the-ikea-effect-in-software-engineering.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -slug: the-ikea-effect-in-software-engineering -title: The IKEA effect in Software Engineering -author: Deepak Prabhakara -author_title: Co-founder & CEO @BoxyHQ -author_url: https://github.com/deepakprabhakara -author_image_url: https://boxyhq.com/img/team/deepak.jpg -tags_disabled: [enterprise-readiness, ikea-effect] -image: /img/blog/jay-wennington-BdeMttZx6Fs-unsplash.jpg ---- - -I recently had to revamp my home office setup and decided to make a trip to my closest IKEA. The wide range of choices of desks in Micke, Malm, Brusali, Alex, and Bekant was only the beginning of the journey. I knew I had to head back home with the desk, find a good place to unpack the unit, find my screwdrivers, hammer, alan keys, and finally dedicate a few hours of labor to assemble everything. I enjoy the process but it is not devoid of frustrations. In the end, I now have a desk I value more because of the labor I put into it. - -![IKEA Assembly](/img/blog/jay-wennington-BdeMttZx6Fs-unsplash.jpg) - -
Photo by Jay Wennington on Unsplash
- -This is the IKEA effect, a cognitive bias where we place a disproportionately high value on products that we have partially created. This makes people value things they had a part in building than the ones they didn’t. We face this challenge as developers every day, the classic build vs buy decisions when we build software. We’d love to build everything ourselves and in an ideal world this would be possible but we need to juggle business requirements, limited resources, and deadlines. The challenge is always in striking the right balance between building what is core to the business and finding ways to offload non-core tasks. - -Just like how an IKEA desk is pretty useless if half-assembled, a feature we set out to build is pretty useless if we end up getting caught up in the implementation details and are unable to see it through. When we set out to build BoxyHQ we constantly heard about the challenges of enterprise readiness from startups. They have to support a range of compliance, security, and governance requirements from their enterprise customers and their developers end up spending 30-40% of their time bogged down in the details of implementation. These startups build teams to work on cool and exciting things that are core to their business but the reality is that non-core features start competing for attention. As a result these non-core features also end up being just good enough to check some boxes and never quite get as innovative as they can get. - -We have seen software eat the world. This has led to more surface area for security exploits and leaks which in turn is driving a broader awareness of security topics in enterprises. Security has become the top priority for all companies now and is no longer seen as the sole responsibility of the CISO’s team. This means a shift-left trend in compliance and data security for developers and we are taking a new approach at BoxyHQ to solve this problem. BoxyHQ provides developers with non-core building blocks (described above) that integrate easily with their products. Simple self-hosted services and APIs that they can pull into their existing technology stack. Developers no longer have to worry about correctly implementing SAML login flows, building and scaling a robust audit logs service, or figuring out the best encryption technique to safeguard PII data. - -BoxyHQ will build IKEA desks for all our customers so they don’t have to. Just sit at your pre-assembled desk and continue working on cool things that you set out to build in the first place. - -PS: Announcing SAML Jackson (who doesn’t like a bit of Pulp Fiction), a SAML SSO service that works seamlessly as an OAuth 2.0 flow and abstracts away the tedious XML bits of the SAML protocol. Check out and the demo at . If SAML SSO is not relevant to you at this moment don’t forget to bookmark us and check back again. We are building a **"DevSecMesh"** over time so you can expect a lot of exciting features in the coming months. diff --git a/blog/2022-02-21-how-early-stage-startups-should-sell-to-enterprises.md b/blog/2022-02-21-how-early-stage-startups-should-sell-to-enterprises.md deleted file mode 100644 index b66b9b4..0000000 --- a/blog/2022-02-21-how-early-stage-startups-should-sell-to-enterprises.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -slug: how-early-stage-startups-should-sell-to-enterprises -title: How early-stage startups should sell to enterprises -author: Sama - Carlos Samame -author_title: Co-founder & COO @BoxyHQ -author_url: https://www.linkedin.com/in/samame/ -author_image_url: https://boxyhq.com/img/team/sama.jpg -tags_disabled: - [enterprise-readiness, startups, enterprises, corporates, sales, founder] -image: /img/blog/mulyadi-dDlvuSKUDZM-unsplash.jpg ---- - -You have decided to quit your job and start something on your own, congratulations! Welcome to a new way of living, as our little green friend told us some years ago “do or do not, there is no try”. Resilience and perseverance will be your two new best friends now; we all know that starting a company is not hard at all, but something hard at the beginning of the journey is finding product-market fit, especially if you are selling to enterprises (if you are an open-source founder, make sure you prioritize project-community fit first). - -![Star Wars Lego](/img/blog/mulyadi-dDlvuSKUDZM-unsplash.jpg) - -
Photo by Mulyadi on Unsplash
- -Having worked for companies like Amazon Web Services & O2-Telefónica connecting enterprises with startups around the world, there are some best practices that I would like to share. We just have to remember that enterprises are conformed by groups of people, and every person is different. So please, don’t expect the secret sauce or the “right way” to do it. Even though each case will be unique, always look for the patterns of what works best for your company. I like to use the process DIA (Discover – Imagine – Act) to overcome challenges, so let me take you through it. - -## Discover - -First, you have to understand the problem that you are solving. Is it really a problem or are you just in love with a good idea? Asking many times “why” will help you understand the hidden problem (the real one), and it will allow you to understand the needs that the enterprise has. Once you understand the needs of the enterprise, it is time to focus on understanding the needs of your user and your buyer, most of the time these are two different stakeholders within the organization. Is the need of the user a priority for the buyer, or is it just a distraction? You will see that in some organizations they are aligned and in others, they cannot even stand each other; so you must take the time to understand the dynamics between these stakeholders, and the culture of the enterprise itself (how they make decisions). - -Sales cycles are indeed long if you look at them from a startup’s point of view. Remember that this is the standard speed for enterprises. Startups speak AGILE and Enterprises speak SECURITY, and for many people, these two terms can’t go together (don’t worry, we are proving them wrong @BoxyHQ). Enterprises have got plenty of software they already depend on that needs to work with whatever your product can do for them. Their technology is usually old, I have seen many enterprises with Frankensteins, they think they need to create a third leg to run faster and they end up building unnecessary technologies that affect the quality and the speed of their solutions. You need to focus on the cost of the enterprise (time and resources) to integrate your solution, and to do that you have to make sure that the impact is big enough to be worth it. - -To make sure the impact you are generating is relevant to the enterprises focus on a few potential customers, as Jason Lemkin mentions “Almost all big companies now have innovation departments of some sort, as do many divisions and groups. The general idea is to bring in 1–2 new vendors a year that don’t risk taking the core business down but could have a material impact on the bottom line. If you truly can change the way they do business, you can often get a meeting. I’ve done this in both my start-ups in the earliest days with 10+ F500 companies in the first 90 days.” - -This Discovery stage is also perfect to understand what your solution needs to have to be compliant; security is key for them. Startups that are not compliant with the enterprises’ requirements could delay the sales cycle, or what is worse they could lose the deal. - -## Imagine - -With all the information that you now have, it is time to visualize the future. Does your solution need some changes? Do you need new features to be compliant? Or could it be that maybe the enterprise doesn’t need all the features that you had in mind? Take some time to readjust your product as necessary, including how you are going to package it and how you are going to distribute it. Apply all the insights collected in the Discovery stage to test, measure, and iterate. - -A common error that I have seen from startups is not focusing on selecting the right partners, and just moving forward with inbound opportunities. Some of them could be good but overall is a distraction to say yes to anyone that wants to resell your solution, you need to plan ahead. - -Talking about planning, once you know who your internal sponsor is you need to facilitate the job for them. That is the person that will take your fights internally, so make sure you are giving them the right tools. If they see two concerns about integrating your solution, you should think of additional concerns and imagine how to mitigate each of them. You need to train your sponsor for unexpected scenarios that the decision committee will bring. Usually, enterprises ask for a “request for proposal” (RFP), the more you know about it, the better you will be prepared. - -As an imagination exercise, I love Amazon’s Working Backwards process and the PRFAQ - you can learn more about it [here](https://www.linkedin.com/pulse/applying-amazons-working-backwards-process-leaders-ian-mcallister/). It is helpful to visualize the impact you aim to have and work backwards from your customer needs to create a solution. It is similar to the Design Thinking process, but the PRFAQ adds the manifestation piece. - -## Act - -Now is the time to act! But be careful, another mistake that many startups make is not executing at the right time, they spend too much time thinking (doing research) or they reach out to enterprises before making sure they are ready, burning your bridges. Timing is going to be key for you. - -They need to trust you and your solution, every contact point is an opportunity for them to trust you, so make sure to go to these meetings well prepared, doing the right questions but at the same time with some insights on the market, their competitors, technologies, etc. You should be an expert in your niche but at the same time, you should be smart enough to listen. The more you know about them, the better you can adapt your solution and at the same time influence them. - -Make sure you have the right metrics for your success cases, it doesn’t matter if you were selling to SMEs before or if you already had a few Proof of Concepts (POCs) with enterprises. Large companies don’t want to feel they are a guinea pig, if you did a POC and you didn’t move forward afterward most executives will not see it as unsuccessful, period. - -Be patient, agile enterprises could spend between 6 to 12 months in conversations before signing an agreement, but many could take years (I’ve seen one company spending 3+ years). While you are waiting, make sure you are at the top of their mind, always adding value, not asking for unnecessary coffees. Key people will resign, will get fired, will change roles, so make sure you find a way to navigate these transitions, you don’t want to start from scratch. - -Each enterprise is a different world, and there are more things you will find out while spending time with them, but I hope you find this blog post insightful. If you have any comments or questions you would like to discuss, please feel free to reach out. We have free Enterprise-Ready office hours to help startups be compliant and accelerate their sales cycle with enterprises. diff --git a/blog/2022-03-14-benchmarking-fluentbit-with-clickhouse.md b/blog/2022-03-14-benchmarking-fluentbit-with-clickhouse.md deleted file mode 100644 index 561520c..0000000 --- a/blog/2022-03-14-benchmarking-fluentbit-with-clickhouse.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -slug: benchmarking-fluentbit-with-clickhouse -title: Benchmarking fluent-bit with Clickhouse -author: Utkarsh Mehta -author_title: Senior Software Engineer (Open Source Dev Tools) @BoxyHQ -author_url: https://www.linkedin.com/in/utkarsh-mehta2612/ -author_image_url: https://boxyhq.com/img/team/utkarsh.jpg -tags_disabled: - [ - enterprise-readiness, - engineering, - audit-logs, - hermes, - fluent-bit, - clickhouse, - benchmarking, - research, - load-testing, - ] -image: /img/blog/fluentbit-clickhouse.png ---- - -One of our products, [Hermes](https://github.com/boxyhq/hermes) is an audit logs service. Currently, Hermes is in the prototype phase and uses a [Go](https://go.dev/) REST API server to ingest audit logs and send them to [Loki](https://grafana.com/oss/loki/). - -We were trying out different databases, ingesters & tools to see which are best suited for Hermes and should be able to scale with high traffic without losing a single audit log & which can search through high amount data efficiently. - -![Title Image](/img/blog/fluentbit-clickhouse.png) - -We decided to benchmark different combinations of ingesters (Vector, Fluentd, Fluent-Bit, etc.) and storage & query tools (Mongodb, Clickhouse, Elasticsearch, etc.). - -The first round of benchmarks will be lightweight and extensive benchmarks will follow later once we pick the right tools for Hermes. - -## Hardware Configuration - -The following tests and benchmarks have been performed on a MacBook Pro (14-inch, 2021) with Apple M1 Pro and 16 GB RAM, the tools to be tested were dockerized with docker desktop running with 4 GB Memory, 4 CPUs & 1 GB Swap. - -> Fluent Bit is a super-fast, lightweight, highly scalable logging and metrics processor and forwarder. -> It is the preferred choice for cloud and containerized environments. -> Source: [fluent-bit website](https://fluentbit.io/) -> Clickhouse is the fastest OLAP database on earth. ClickHouse works 100–1000x faster than traditional approaches. -> Companies like Uber, Cloudflare, Spotify, and eBay use Clickhouse. -> Source: [Clickhouse website](https://clickhouse.com/) - -So few pointers before we go ahead, - -1. Fluent-bit is fast at ingesting logs/data, processing them, and sending them to a destination. - -2. Clickhouse is efficient at handling and querying data. - -3. Fluent-bit does not support Clickhouse by default. - -4. The fluent-bit ecosystem lets users write their plugins in Golang and add additional support required. - -5. For faster querying in Clickhouse, an efficient table schema with indexes, compression, etc. should be established. - -## Clickhouse plugin for fluent-bit - - - -I developed a fluent-bit output [plugin](https://github.com/boxyhq/fluent-bit-clickhouse) for Clickhouse. - -## Fluent-Bit config - -![Fluent-bit Configuration](/img/blog/fluentbit-config.png) - -This config makes fluent-bit ingest data via HTTP server listening on port 8888 and sends the data to Clickhouse with configuration stated. - -## Clickhouse config - - - -I ramped up the number of concurrent requests/queries by modifying the config.xml. After multiple tests, I finalized the following config. - -![Clickhouse Configuration](/img/blog/clickhouse-config.png) - -## Load testing tool - - - -I developed a load testing tool with Node.js that can be used to benchmark REST API-based endpoints of Fluent-bit. - -[API Benchmarking](https://github.com/boxyhq/api-benchmarking) - -Another tool to load test is the querying part of Clickhouse. - -[Clickhouse Load Testing](https://github.com/boxyhq/clickhouse-db-load-testing) - -## The results - -These results are dependent on the ram allocated to the Docker engine, in my case, it's(4 GiBs). - -### Ingester - -![Ingester results](/img/blog/results-ingester.png) - -### Query - -![Queryer result](/img/blog/results-query.png) - -## Conclusion - -### Ingester - -1. Fluent-bit can handle loads up to 2000 req/sec but in the case of bigger batches, the speed goes down drastically. (200 X 10) & (300 X 10) - -2. In the case of long-term light batches, Fluent-bit performs consistently. (10 X 1000) - -3. Fluent-bit performs at average speeds in the case of average loads (50 X 50). - -### Query - -1. Clickhouse shows the best req/sec performance with an average load (50 X 50). - -2. Also, Clickhouse's performance was pretty satisfactory for all the different variations of records in DB. (1.1 mils, 50k, 25k, 10k, 2k & 1k). - -3. Clickhouse was able to manage short-term high loads and long-term light loads efficiently. (100 X 10) and (10 X 5000). - -We will be posting more blogs regarding benchmarks, tools, etc., as we go on to build Hermes and many other dev tools. Please leave comments below. - -Thank you! diff --git a/blog/2022-03-16-add-saml-sso-to-node-express-app.md b/blog/2022-03-16-add-saml-sso-to-node-express-app.md deleted file mode 100644 index 9b7ba28..0000000 --- a/blog/2022-03-16-add-saml-sso-to-node-express-app.md +++ /dev/null @@ -1,459 +0,0 @@ ---- -slug: add-saml-sso-to-node-express-app -title: How to add SAML Single Sign On to an Express app -author: Kiran K -author_title: Senior Developer @BoxyHQ -author_url: https://twitter.com/tokirankrishnan -author_image_url: https://boxyhq.com/img/team/kiran.jpg -tags_disabled: - [enterprise-readiness, engineering, saml, saml-jackson, integrations, sso] ---- - -In this article, you'll learn how add SAML SSO login to an Express.js app. You'll use [SAML Jackson](https://boxyhq.com/docs/jackson/overview) with [Auth0](https://auth0.com/single-sign-on) to authenticate users and protect routes. - -You can also access the full code at the [GitHub repository](https://github.com/boxyhq/express-jackson-auth0-demo). - -Let’s get started! - -## Prerequisites - -To follow along with this article, you’ll need the following: - -- Node.js installed on your computer -- Basic knowledge about Node.js and Express.js - -## Setting up the database - -For our article, we’ll create a free [Postgres database on Heroku](https://devcenter.heroku.com/articles/heroku-postgresql) instead of setting up a local Postgres server. - -- Go to [Heroku signup page](https://signup.heroku.com/login), then create an account. -- Go to [Apps](https://dashboard.heroku.com/apps) and click **Create new app**. -- Give your app a name, and click the **Create app** button. -- Go to the **Resources** tab. -- Choose the **Heroku Postgres** from the Add-ons search box, and click **Submit Order Form**. -- Click the **Heroku Postgres** and select **Settings** tab. -- Click the **View Credentials** button and copy **URI**. - -Now you have created a free PostgreSQL database and copied the database connection URI. We'll need the connection URI later. - -## Configure the Identity Provider - -We'll use the Auth0 as our identity provider. An Identity Provider (IdP) is a service that manage user accounts for your app. - -- First, go to the [Auth0 signup page](https://auth0.com/signup), then create an account. -- Go to [Dashboard > Applications > Applications](https://manage.auth0.com/dashboard/). -- Click the **Create Application** button. -- Give your new application a name. -- Choose **Regular Web Applications** as an application type and the click **Create**. -- Go to the app you created, then click the **Addons** tab. -- In the **SAML2 Web App** box, click the slider to enable the Addon. -- Go to the **Usage** tab and download the **Identity Provider Metadata**. -- Go to the **Settings** tab and make below changes. -- Add `http://localhost:3000/sso/acs` as your **Application Callback URL** that receives the SAML response. -- Paste the following JSON for **Settings**, then click **Enable** button. - -```json -{ - "audience": "https://saml.boxyhq.com", - "mappings": { - "id": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", - "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", - "firstName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", - "lastName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" - } -} -``` - -`audience` is just an identifier to validate the SAML audience. [More info](https://boxyhq.com/docs/jackson/deploy/env-variables#saml_audience). - -Auth0 provides database connections to authenticate users with an email/username and password. These credentials are securely stored in the Auth0 user store. - -Let's create one so that our users can register or login. - -- Go to [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/dashboard/). -- Click **Create DB Connection** - [Auth0 Create DB Document](https://auth0.com/docs/authenticate/database-connections/custom-db/create-db-connection) -- Give your connection a name, then click **Create**. -- Go to the **Applications** tab and enable the application you just created. - -Now we've everything ready, let's move to the next step. - -## Getting started - -Launch a terminal and clone the GitHub repo: - -```bash -git clone https://github.com/devkiran/express-saml.git -``` - -```bash -cd express-saml -``` - -Now, install the dependencies: - -```bash -npm install -``` - -Add the environment variables: - -```bash -cp .env.example .env -``` - -Update the `DATABASE_URL` variable with your Heroku Postgres database connection URI. - -Append `?sslmode=no-verify` to your database connection URI otherwise Heroku won't allow you to link to the database. This is a Heroku specific configuration. - -For example `postgres://hcydrtasctfyth:fe001b264322d6cf794@ec2-1-2-3-4.compute-1.amazonaws.com:5432/demo?sslmode=no-verify` - -## About the Express app - -This is a simple express.js app created using `express-generator`. You can use any express.js app if you want. - -Our express.js app has only 2 routes. - -- `GET /` render a home page -- `GET /dashboard` render a dashboard - -So, what's the plan? We'll add SAML SSO login (via Auth0) to our express.js app so that only authenticated users can access the `/dashboard`. - -## Install SAML Jackson - -Run the following command to install the latest version of the SAML Jackson. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -Once you installed Jackson, let's initialize it. - -Add the following code to the `routes/index.js`. - -```javascript -// routes/index.js - -... - -let apiController; -let oauthController; - -const jacksonOptions = { - externalUrl: process.env.APP_URL, - samlAudience: process.env.SAML_AUDIENCE, - samlPath: '/sso/acs', - db: { - engine: 'sql', - type: 'postgres', - url: process.env.DATABASE_URL, - }, -}; - -(async function init() { - const jackson = await require('@boxyhq/saml-jackson').controllers(jacksonOptions); - - apiController = jackson.apiController; - oauthController = jackson.oauthController; -})(); -``` - -## Setting up Express.js routes - -### Add SAML Metadata - -The first route you'll create is the `GET /config` one. This route will display a form with following fields: - -- `Metadata`: Enter the XML Metadata content you've downloaded from IdP. -- `Tenant`: Jackson supports a multi-tenant architecture, this is a unique identifier you set from your side that relates back to your customer's tenant. This is normally an email, domain, an account id, or user-id. -- `Product`: Jackson support multiple products, this is a unique identifier you set from your side that relates back to the product your customer is using. - -```javascript -// routes/index.js - -router.get('/config', async (req, res) => { - res.render('config'); -}); -``` - -Add a view to display the form. - -```html - - - - - - SAML Config - - - - -

SAML Config

-

Add SAML Metadata.

-
-
- - -
-
- - -
-
- - -
- -
- - -``` - -Now let's add another route `POST /config` that will store the form data by calling the SAML Jackson config API. - -This step is the equivalent of setting an OAuth 2.0 app and generating a client ID and client secret that will be used in the login flow. - -```javascript -// routes/index.js - -router.post('/config', async (req, res, next) => { - const { rawMetadata, tenant, product } = req.body; - - const defaultRedirectUrl = 'http://localhost:3000/sso/callback'; - const redirectUrl = '["http://localhost:3000/*"]'; - - try { - await apiController.config({ - rawMetadata, - tenant, - product, - defaultRedirectUrl, - redirectUrl, - }); - - res.redirect('/config'); - } catch (err) { - next(err); - } -}); -``` - -There are a few important things to note in the code above. - -`defaultRedirectUrl` holds the redirect URL to use in the IdP login flow. Jackson will call this URL after completing an IdP login flow. - -`redirectUrl` holds an array containing a list of allowed redirect URLs. Jackson will disallow any redirects that are not on this list. - -Next, let's start the express app. The app starts a server and listens on port 3000 (by default) for connections. - -```bash -npm start -``` - -Now, let's visit [http://localhost:3000/config](http://localhost:3000/config), you should see the page with a form. - -![SAML Config](/img/blog/add-saml-sso-to-node-express-app/add-saml-config-form.png) - -Here you can add the metadata you've downloaded from Auth0. Fill out the form with a Tenant, Product, and paste the metadata XML content as it is. - -I'll use 'boxyhq.com' for tenant and 'crm' for product. - -The response returns a JSON with `client_id` and `client_secret` that can be stored against your tenant and product for a more secure OAuth 2.0 flow. - -If you do not want to store the `client_id` and `client_secret` you can alternatively use `client_id=tenant=&product=` and any arbitrary value for `client_secret` when setting up the OAuth 2.0 flow. - -### Redirect the users to IdP - -Now you have added the SAML metadata, you'll need a route to redirect the users to IdP to start the SAML authentication. - -Let's add a new route `GET /sso/authorize`. - -Don't forget to change the values of the tenant and product in the code. - -```javascript -// routes/index.js - -router.get('/sso/authorize', async (req, res, next) => { - try { - const tenant = 'boxyhq.com'; - const product = 'crm'; - - const body = { - response_type: 'code', - client_id: `tenant=${tenant}&product=${product}`, - redirect_uri: 'http://localhost:3000/sso/callback', - state: 'a-random-state-value', - }; - - const { redirect_url } = await oauthController.authorize(body); - - res.redirect(redirect_url); - } catch (err) { - next(err); - } -}); -``` - -`oauthController.authorize()` will returns a `redirect_url`. You should redirect the users to this `redirect_url` to start the IdP authentication flow. - -### Handle the SAML Response from IdP - -This route becomes the Assertion Consumer Service (ACS) URL of your app. The ACS URL tells your IdP where to POST its SAML Response after authenticating a user. - -The SAML Response contains 2 fields: `SAMLResponse` and `RelayState`. - -```javascript -// routes/index.js - -router.post('/sso/acs', async (req, res, next) => { - try { - const { SAMLResponse, RelayState } = req.body; - - const body = { - SAMLResponse, - RelayState, - }; - - const { redirect_url } = await oauthController.samlResponse(body); - - res.redirect(redirect_url); - } catch (err) { - next(err); - } -}); -``` - -Call to the method `oauthController.samlResponse()` will returns a `redirect_url`. You should redirect the users to this `redirect_url`. The query parameters will include the `code` and `state` parameters. - -### Code exchange - -Now exchange the `code` for a `token`. The `token` is required to access the user profile. - -Let's create a new route `GET /sso/callback` to handle the callback. - -```javascript -// routes/index.js - -router.get('/sso/callback', async (req, res, next) => { - const { code } = req.query; - - const tenant = 'boxyhq.com'; - const product = 'crm'; - - const body = { - code, - client_id: `tenant=${tenant}&product=${product}`, - client_secret: 'client_secret', - }; - - try { - // Get the access token - const { access_token } = await oauthController.token(body); - - // Get the user information - const profile = await oauthController.userInfo(access_token); - - // Add the profile to the express session - req.session.profile = profile; - - res.redirect('/dashboard'); - } catch (err) { - next(err); - } -}); -``` - -In the above code, replace the value for `tenant` and `product` with yours. - -### Protect the dashboard - -Now is the time to fix our `GET /dashboard` route so that only authenticated users can access it. - -Let's fix it by adding a condition to check if the `profile` exists in the session. - -If `profile` is `undefined`, redirect the users back to the `/` otherwise display the profile on the dashboard. - -Replace the `GET /dashboard` route with the below code. - -```javascript -// routes/index.js - -router.get('/dashboard', function (req, res, next) { - const { profile } = req.session; - - if (profile === undefined) { - return res.redirect('/'); - } - - // Pass the profile to the view - res.render('dashboard', { - profile, - }); -}); -``` - -Replace the `views/dashboard.ejs` view with the below code. - -```html - - - - - - Dashboard - - - -

Dashboard

-

Only authenticated users should access this page.

- -

Id - <%= profile.id %>

-

Email - <%= profile.email %>

- - -``` - -From the command line, let's restart the express app then visit the authorize the URL [http://localhost:3000/sso/authorize](http://localhost:3000/sso/authorize). - -If you've configured everything okay, it should redirect you to the Auth0 authentication page, then click on the Sign up link and register there - -If the authentication is successful, the app will redirect you to the dashboard and display the `id`, `email` of the user. - -![Dashboard](/img/blog/add-saml-sso-to-node-express-app/express-dashboard.png) - -## Conclusion - -Congratulations, you should now have a functioning SAML SSO integrated with your express.js app using the SAML Jackson and Auth0. - -## References - -To learn more about SAML Jackson, take a look at the following resources: - -- [SAML Jackson Documentation](https://boxyhq.com/docs/jackson/overview) -- [SAML Jackson GitHub](https://github.com/boxyhq/jackson) -- [Express web app that shows how to use SAML Jackson](https://github.com/boxyhq/jackson-examples/tree/main/apps/express) - -Your feedback and contributions are welcome! diff --git a/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-solution-providers-side.md b/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-solution-providers-side.md deleted file mode 100644 index 3739689..0000000 --- a/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-solution-providers-side.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -slug: understanding-saml-sso-the-basics-from-the-solution-providers-side -title: Understanding SAML SSO, the basics from the solution provider's side -author: Jay Singh -author_title: Marketing Consultant -author_url: https://www.linkedin.com/in/jaydsingh/ -author_image_url: https://boxyhq.com/img/team/jay.jpg -tags_disabled: [enterprise-readiness, saml, saml-jackson, sso, single-sign on] -image: img/blog/sso/with-boxyhq.png ---- - -This article follows my first article in which I explain the basics of SAML from the users' side. If you haven't read that one already I would recommend reading that one first [here](./2022-06-30-understanding-saml-sso-the-basics-from-the-user-side.md). In this article, we are going to take a look at what SAML authentication and setup look like from the solution providers' perspective. - -If you are a B2B solutions provider and you plan to have enterprise customers they will likely ask that your product supports SAML SSO. This is because the customer will already be using an IDP to manage user access and security to their services. Anything outside this will be a risk and not fit into their user's workflows. - -Most larger solution providers have already invested a lot of time and money into building SAML integrations with IDP providers but this leaves smaller competitors with less time and resources at a disadvantage as they often haven't been able to prioritize enterprise security features over the core product build. - -The main reason why smaller companies don’t implement SAML as part of the standard build is that it traditionally takes a long time as they have to build a custom integration with each IDP provider their customers use. Well, this is now an old issue because we have created BoxyHQ which allows you to connect to our free product with one single integration that then connects to all the IDPs for you! Let's take a look at what the integrations with and without BoxyHQ look like first. - -![Without BoxyHQ](/img/blog/sso/without-boxyhq.png) - -In the diagram above we can see what it looks like when you build a custom SAML integration with each IDP. As you can see for each IDP you have to connect all the instances of your product and build a unique integration. This can take months and take the focus away from your team building your core product. We believe that enterprise readiness should be accessible and easy for businesses of all sizes so we built BoxyHQ. Let's see what that looks like. - -![With BoxyHQ](/img/blog/sso/with-boxyhq.png) - -As you can see from the image above with BoxyHQ you only have to connect your product with a straightforward integration to BoxyHQ and then we manage and connect you to all the IDPs! It is that simple and you can deploy SAML SSO for your clients in as little as 8 days. We are also open source and free so you don't need to worry about big maintenance bills, we will even offer you custom support during the integration. - -If you are interested in becoming enterprise-ready without the hassle then let's chat! You can [book](https://meetings.hubspot.com/deepakprab/demo) a free consultation call and chat with our CEO about how we can help. Let's start the journey together. diff --git a/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-user-side.md b/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-user-side.md deleted file mode 100644 index 67273ce..0000000 --- a/blog/2022-06-30-understanding-saml-sso-the-basics-from-the-user-side.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -slug: understanding-saml-sso-the-basics-from-the-user-side -title: Understanding SAML SSO, the basics from the user side -author: Jay Singh -author_title: Marketing Consultant -author_url: https://www.linkedin.com/in/jaydsingh/ -author_image_url: https://boxyhq.com/img/team/jay.jpg -tags_disabled: [enterprise-readiness, saml, saml-jackson, sso, single-sign on] -image: img/blog/sso/with-saml.png ---- - -I have always worked in tech, so have always needed to understand the technical nature of the products we are building. This process has always been over-complicated for me so I now always try to write a guide for non-technical people like me. It turns out that once you understand it you can explain it to other non-technical people much easier! So here we go as I try to explain SAML (Security Assertion Markup Language) SSO (single sign-on) and why BoxyHQ makes it so easy to implement. Firstly you have probably heard of not only SAML but OAuth 2.0 and OIDC, these are all protocols that achieve the same result of providing SSO. There are a few nuances but those are out of scope for this article to keep things simple. - -Let's start with what SAML SSO is and what it does. An example of SAML SSO in action would be a user in your company signs into a single dashboard and inside that dashboard, they have all the icons for the external services they use such as their CRM (Hubspot) and accounting software (Xero). The user can now just log in to any of their services by clicking on them rather than logging into each one individually. - -But how does this work? Well, the idea behind SAML SSO is that by centralizing your access to an external system you can better manage access and permission as well as improve security. So in our example, the dashboard that allowed the user to just click an icon and log in was SAML in action. Because the company has connected to its external servicing using SAML it can now let its users access all the services from a single point. This single point of access is known as the IdP (Identity Provider) which authenticates the access to all the other services via SAML. - -The diagrams below show how this access flow would work with and without SAML: -![Without SAML SSO](/img/blog/sso/without-saml.png) - -In the diagram above we can see that the company is not using SAML so the user has to log into each of the services with an individual username and password. The username and password are managed by the service provider and access is also managed via an admin user on the service provider's side. The user must be given access to each of the services from each of the services and remember the login details for each one. - -![With SAML SSO](/img/blog/sso/with-saml.png) - -In the image above we can see that the company is using an IdP such as Okta so the user simply has to log in once and then can access all the external services from a single dashboard. This also means that the company admins can manage access to the different services as they control the access directly from their IdP. - -Now, remember that this is just a high-level overview of SAML and the technical aspects behind the scenes can get a lot more complicated. - -We have been looking at SAML from a company user's perspective but it's also important to remember that these service providers also have to build a SAML integration to enable them to connect to their clients’ IdPs. This can be a very long and time-consuming process for service providers and this is where BoxyHQ comes in. Instead of service providers building a custom integration for each IdP their customers use which can take months, the service providers can use BoxyHQ and have all the connections to IdPs they need with a single integration! You can be SAML-ready in as little as 8 days! To understand how this looks check out my other blog [here](./2022-06-30-understanding-saml-sso-the-basics-from-the-solution-providers-side.md). - -So what are the main benefits of SAML? Here are three of the most important ones I have identified. - -#### Increased Security - -SAML is at its heart a security standard and as it provides a single point of authentication that takes place in a secure environment it adds an extra layer of security to your service that most enterprise customers will ask for. - -#### Improved user experience - -As a user using SAML is very simple and pleasant to use as you only have to log in once and then you can access all your external services on a dashboard with a single click. This saves the user time and makes their overall experience of your product better. - -#### Reduces cost - -Without SAML you have to maintain account information across multiple services but when you use SAML this is all managed by the IdP. - -BoxyHQ is open source and our SAML SSO product, SAML Jackson is just the first product we have built to help companies become enterprise-ready. If you are interested in discussing your authentication strategy or deploying SAML SSO you can book a call with our CEO [here](https://meetings.hubspot.com/deepakprab/demo) to discuss how we can support you. - -I hope you have found this high-level explanation of SAML and its use cases helpful. If you have any questions please don't hesitate to reach out to us on our live chat on our website https://boxyhq.com/ diff --git a/blog/2022-07-19-three-reasons-not-to-build-enterprise-features.md b/blog/2022-07-19-three-reasons-not-to-build-enterprise-features.md deleted file mode 100644 index 4bcedcd..0000000 --- a/blog/2022-07-19-three-reasons-not-to-build-enterprise-features.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -slug: three-reasons-not-to-build-enterprise-features -title: 'Be enterprise-ready: Three reasons not to build enterprise features!' -author: Sama - Carlos Samame -author_title: Co-founder & COO @BoxyHQ -author_url: https://www.linkedin.com/in/samame/ -author_image_url: https://boxyhq.com/img/team/sama.jpg -tags_disabled: - [enterprise-readiness, startups, enterprises, corporates, sales, founder] -image: /img/blog/dontbuild/security-risks-meme.jpeg ---- - -If you are thinking about building features to be enterprise-ready, there are typically two paths that brought you here: - -1. Your team has initially focused on smaller customers and is now looking to expand, or -2. Your team is building a new product and targeting enterprise customers from day 1 - -Either way, you need to be aware that selling to enterprises is super exciting, especially if you like to play golf and you are ok with a long sales cycle - it could easily take you up to three years to close a deal. - -Enterprises can be scared to give startups a chance and startups often lose out to more established businesses. However, there are two great ways to make sure your business doesn't miss out: - -- List of other enterprise customers (“show me more logos, we are not a guinea pig”) -- Compliance requirements (“a checklist to show my boss you are safe”) - -![Security risks everywhere](/img/blog/dontbuild/security-risks-meme.jpeg) - -But what is enterprise readiness? From a product perspective, [EnterpriseReady.io](https://www.enterpriseready.io) identified common features that set enterprise software apart. You can do a free self-assessment [here](https://www.enterprisegrade.io/). The basics mean that your business meets the standards that enterprises look for in solution providers. - -Now, the good news is that to be enterprise-ready you don’t need to build these common undifferentiated features which can drain your resources and bank account. Here is why: - -1. Customer Obsession – You need to forget about product development and narrow your attention to customer development. You need to talk to potential enterprise customers and understand their current needs, pains, motivations, processes, etc. Remember that they’ve got plenty of software they already depend on that will need to work smoothly with yours. On top of learning how to navigate the enterprise, you need to identify Infosec barriers and consider how to mitigate them; if your solution needs to process internal data, things will be more complex. - -2. Time to market – Instead of spending months building in-house enterprise-grade features, there are off-the-shelf enterprise readiness solutions that you can integrate into your SaaS app with just a few lines of code. There is no need to wait months to build Single Sign-On (SSO), Directory Sync, Audit Logs, Privacy Vault, and other boring stuff that enterprises ask for anymore, now you could plug them within hours. And your team can spend more time building your core product instead of non-core features that won’t add value to your customers’ main needs. - -3. Cut engineering costs – Out-of-the-box solutions will help your company save developers time. If you consider the learning curve, coding, fixing bugs, and all the hassle that your tech team needs to go through, you will realize that people’s time is more expensive than developer tools. And the good news is that there are reliable open source solutions that you could use at no cost. Free and trustworthy? That’s the beauty of open source communities. Self-hosting these solutions will allow your company to maintain a level of control that will simplify things if you need to be certified (SOC2, ISO 27001, HIPAA, etc). - -Here are 3 open-source solutions that could be interesting for you - BoxyHQ (**disclaimer, I'm a Co-Founder here**), [Supertokens](https://supertokens.com), and [Oso](https://www.osohq.com). There are plenty of other solutions that are relevant, we are building a list and would love to learn about other projects you use, please share them with me. - -Let’s be sincere, will your engineers focus on building the best SAML SSO feature or will they just focus on checking the box? Compliance security could be expensive in the long term when working with large enterprises. Especially if things go wrong because being compliant doesn’t mean your SaaS app is unhackable. - -Remember that not all enterprises are the same. But working with a few design partners will help your team to define an efficient product roadmap, build a robust go-to-market strategy, and you will close more enterprise deals. - -Deals, deals, deals! - -If you know anyone that needs to build enterprise features we would love to hear from them and see how could we help, please feel free to share my email: sama@boxyhq.com - Thank you! diff --git a/blog/2022-07-26-developer-first-security-sucks-automate-product-security.md b/blog/2022-07-26-developer-first-security-sucks-automate-product-security.md deleted file mode 100644 index b855e93..0000000 --- a/blog/2022-07-26-developer-first-security-sucks-automate-product-security.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -slug: developer-first-security-sucks-automate-product-security -title: 'Developer-first Security sucks! Why is it essential to automate product security?' -author: Sama - Carlos Samame -author_title: Co-founder & COO @BoxyHQ -author_url: https://www.linkedin.com/in/samame/ -author_image_url: https://boxyhq.com/img/team/sama.jpg -tags_disabled: [developer, security, cybersecurity, devsecops, appsec] -image: /img/blog/security-sucks-meme.jpeg ---- - -Let’s start with some facts to understand why it sucks! - -On one hand: - -- Cybercrime went up 600% due to the COVID-19 Pandemic -- Data breaches and cyber attacks in 2021 were 5.1 billion breached records, this is 11% more than in 2020 -- 79% of companies have experienced at least one cloud data breach in the past 18 months -- Software supply chain attacks jumped over 300% in 2021 -- It is estimated that worldwide, cyber crimes will cost $10.5 trillion annually by 2025. - -(Data from Purplesec, IT Governance, VentureBeat) - -On the other hand: - -- 70% of development teams always or frequently skip security steps due to time pressures when completing projects -- Almost 60% of devs are releasing code 2x faster, thanks to DevOps. -- In 2021, only 20% of organizations have fully integrated security into the development -- Security has low priority. 67% of developers surveyed by Secure Code Warrior admitted that they routinely left known vulnerabilities and exploits in their code -- Github expects the number of software developers using its platform (56 million in 2020), to grow to 100 million developers in 2025 - -(Invicti Security, Gitlab, GitHub, VentureBeat) - -**Security vs Developers** - -Security teams focus on planning secure IT environments, but developers are asked to focus on productivity while they are also tasked with implementing these security plans. The main issue is that developers are often left out of security planning processes, creating a strained relationship between these two teams. - -It is important to build a healthy relationship where trust, communication, and collaboration are key to moving toward the organization’s north star. But traditional security teams sometimes see themselves as inspectors of the developer's work. And that attitude needs to change - “when you’re a hammer, everything is a nail”. - -Did you know that in “Gartner's Top Strategic Technology Trends for 2022: Cybersecurity Mesh”, the word "developer" is not included not even once? We were shocked about it; developers need to have a leading role in cybersecurity! - -**It’s “Shift Left Security” time!** - -With shift left security we mean moving security sooner in the development process. -Teams should provide developers with the right tools to do their job securely; this is why it is essential to automate product security. - -But most of the new security solutions are focused on selling to the CISOs and their security teams, maybe because they are the ones with the budget for “security”; but what about developers? Most of their new solutions are oriented toward productivity, which makes sense since we live in an agile world, but what if there were new developer-first security solutions? Well, it is about time; a recent survey from Forrester shows that last year 27% of organizations had their development teams holding the budget for application security tools and that number has increased to 37% this year. - -**Developer-first security Tools** - -While some security tools for developers have started to appear, it is still early days. The ecosystem needs solutions to automate security for developers and most importantly, that is reliable. Our hypothesis is that the most important products will come from the open-source community; they have a genuine interest in supporting and empowering developers. - -We are consolidating a list of reliable open source developer-first security tools for security, if you know of a project we should consider, or if you would like to have access to this list, please send me an email: sama@boxyhq.com or/and help us spread the word! 🙌 - -![Security risks everywhere](/img/blog/security-sucks-meme.jpeg) diff --git a/blog/2022-09-09-understanding-directory-sync.md b/blog/2022-09-09-understanding-directory-sync.md deleted file mode 100644 index 89bdbc2..0000000 --- a/blog/2022-09-09-understanding-directory-sync.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -slug: understanding-scim-and-directory-sync -title: Understanding SCIM and Directory Sync -author: Kiran K -author_title: Senior Developer @BoxyHQ -author_url: https://twitter.com/tokirankrishnan -author_image_url: https://boxyhq.com/img/team/kiran.jpg -tags_disabled: - [enterprise-readiness, engineering, saml-jackson, directory-sync, scim] -image: /img/blog/directory-sync-flow.png ---- - -This article will walk you through everything you should know about SCIM and Directory Sync. - -## What is SCIM? - -System for Cross-domain Identity Management (SCIM) is an open standard that allows for the automation of user provisioning (Directory Sync). - -SCIM facilitates user identity data communication between Identity Providers (Okta, OneLogin, etc.) and Service Providers (Enterprise SaaS apps). - -## Why should you care about SCIM? - -Many companies manually onboard and offboard users, which consumes many IT resources and time. - -User lifecycle management (ULM) begins when employees start their job and continue until they leave the company. ULM is all about provisioning and de-provisioning users when they join an organization. - -For IT departments, this means creating an account for the new employees in the cloud apps they need to use after starting their job. Also, IT departments must ensure that when those employees leave, they revoke access to those accounts. - -Smaller organizations might address these procedures manually, but the process can become error-prone and time-consuming when done at scale. This is where the SCIM and Directory Sync come to the organization's rescue. - -## What is Directory Sync? - -Directory sync helps organizations automate the provisioning and de-provisioning of their users. - -As a result, it streamlines the user lifecycle management process by saving valuable organizational hours, creating a single truth source of the user identity data, and facilitating them to keep the data secure. - -## How does the Directory Sync work? - -Directory sync allows programmatic access to the user identity data via a standard protocol (SCIM). - -Directory sync implementation typically involves a client and a server. A client is an identity provider (IDP) with a directory of user identities. A service provider (SP) is an enterprise SaaS app that needs a subset of data from those identities. - -When you make changes to the user identities, the changes are automatically synced to the SP according to the SCIM protocol. SP can now process this data according to the way they want. - -Some common user identity changes include adding new users to the organization, updating existing users, removing users from the organization, adding users to groups, etc. - -Technically, SCIM is a set of APIs that allows you to manipulate the users and group objects and expose these data as JSON through the REST endpoints. - -## How to add Directory Sync to your SaaS app? - -Building Directory sync implementation yourself can be tedious and time-consuming for any engineering team. - -Below are some questions the engineering team should answer before starting building Directory sync. - -- How do we support multiple identity providers? -- How much effort should the team put into support & maintenance? -- Do we have developers with good knowledge of SCIM and its security? -- Is it worth building the Directory sync ourselves? - -In short, building Directory sync yourself is not a good idea. It requires a lot of tedious engineering work and ongoing maintenance. - -The best alternative is an open-source dedicated Directory Sync implementation provider like SAML Jackson from BoxyHQ. - -## Directory Sync from BoxyHQ - -BoxyHQ can help enterprises to add Directory Sync to any SaaS app with just a few lines of code. - -Enterprise SaaS apps can provide a Webhook endpoint to SAML Jackson, and Jackson will notify the Webhook every time a change occurs in the user identity data within the IDP. - -![Directory Sync Flow](/img/blog/directory-sync-flow.png) - -In short, Jackson hides all the complexities involved with Directory Sync implementation and makes your integration easier. - -BoxyHQ's Directory Sync implementation supports identity providers such as Okta, OneLogin, Azure AD, and JumpCloud. We're looking forward to adding more identity providers in future releases. - -Here are a few critical aspects that make [BoxyHQ's Directory Sync implementation](/docs/directory-sync/overview) stand out. - -- An open-source solution. -- Allows you to keep control of your data. -- Support multiple identity providers. -- Allows you to listen to six critical SCIM events. - -## Final Thoughts - -Directory Sync is a valuable investment for every organization seeking efficiency and security in their user lifecycle management system. - -If you are interested in becoming enterprise-ready without the hassle, then let's chat! You can book a free consultation call and talk with our CEO about how we can help. So let's start the journey together. diff --git a/blog/2022-09-27-enterprise-ready-saas-starter-kit.md b/blog/2022-09-27-enterprise-ready-saas-starter-kit.md deleted file mode 100644 index df51769..0000000 --- a/blog/2022-09-27-enterprise-ready-saas-starter-kit.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -slug: enterprise-ready-saas-starter-kit -title: Enterprise-ready SaaS Starter Kit -author: Kiran K -author_title: Senior Developer @BoxyHQ -author_url: https://twitter.com/tokirankrishnan -author_image_url: https://boxyhq.com/img/team/kiran.jpg -tags_disabled: [enterprise-readiness, nextjs-template, saas-starter-kit] ---- - -Enterprise-ready SaaS Starter Kit is a **Next.js** based SaaS Starter Kit that can save hundreds of development hours while building [enterprise-ready SaaS apps](/blog/enterprise-readiness-made-simple). - -[Kickstart your enterprise app development with Next.js SaaS Starter Kit](https://github.com/boxyhq/saas-starter-kit) - -Check out the [video tutorial](https://youtu.be/oF8QIwQIhyo) that walks through setting up your local environment and running enterprise-ready features the SaaS kit offers. - -## SAML SSO - -SAML stands for Security Assertion Markup Language. It is an XML-based open standard for transferring identity data between an identity provider (IdP) and a service provider (SP). - -[Single Sign On (SSO)](/blog/understanding-saml-sso-the-basics-from-the-solution-providers-side) allows your customers to manage their team's users outside your built-in user table. - -SAML SSO is integrated with the help of [SAML Jackson](https://github.com/boxyhq/jackson) - -## Directory Sync (SCIM) - -[Directory sync](/blog/understanding-scim-and-directory-sync) helps organizations automate the provisioning and de-provisioning of their users. - -As a result, it streamlines the user lifecycle management process by saving valuable organizational hours, creating a single truth source of the user identity data, and facilitating them to keep the data secure. - -Directory Sync is integrated with the help of [SAML Jackson](https://github.com/boxyhq/jackson#directory-sync) - -## Audit Logs - -Provide enterprise customers with the ability to record and search events that happen within your application. With our simple integration, you can become compliant fast and save your team from building complex solutions from scratch. - -Organizations gain the ability to monitor the flow of data and be alerted to any breaches. Audit logs help to pinpoint any misuse of information and ensure that data policies are followed. - -## Webhooks & Events - -Webhooks are a way for systems to notify external applications that a specific event has occurred in your SaaS app without receiving a request. - -Webhooks are a great solution if the client does not know when an event will occur and wants to be notified in real-time. - -Webhook is integrated with the help of [Svix](https://github.com/svix/svix-webhooks) - -## Team Management - -Teams describe the functionality that enables modern software to be coordinated and managed. - -Through Teams, SaaS app users invite others to collaboratively use the application with them by creating an account. - -## Other Features - -Let's also look at other standard features the SaaS kit offers. - -- Create account -- Sign in with Email and Password -- Sign in with Magic Link -- Update account -- Manage team -- Manage team members -- Invite users to the team -- Accept invitation - -## Getting Started - -Please follow these simple steps to get a local copy up and running. - -### 1. Setup - -Clone or fork this GitHub repository - -```bash -git clone https://github.com/boxyhq/saas-starter-kit.git -``` - -### 2. Go to the project folder - -```bash -cd saas-starter-kit -``` - -### 3. Install dependencies - -```bash -npm install -``` - -### 4. Set up your .env file - -Duplicate `.env.example` to `.env`. - -```bash -cp .env.example .env -``` - -### 5. Set up database schema - -```bash -npx prisma db push -``` - -### 6. Start the server - -In a development environment: - -```bash -npm run dev -``` - -### 7. Start the Prisma Studio - -Prisma Studio is a visual editor for the data in your database. - -```bash -npx prisma studio -``` - -## Contributing guide - -Contributions make the open-source community a fantastic place to learn, inspire, and create. Any contributions are greatly appreciated by the whole community. - -We encourage and invite users and community members to contribute to the [saas-starter-kit](https://github.com/boxyhq/saas-starter-kit) repository. - -For more help or if you have a question about getting started building a SaaS app please join our [Community Discord.](https://discord.boxyhq.com) diff --git a/blog/2022-09-30-sso-building-blocks.md b/blog/2022-09-30-sso-building-blocks.md deleted file mode 100644 index f82c3e3..0000000 --- a/blog/2022-09-30-sso-building-blocks.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -slug: sso-building-blocks -title: SSO Building blocks - SAML, OAuth 2.0 and OpenID Connect -author: Aswin V -author_title: Senior Developer @BoxyHQ -author_url: https://twitter.com/av__2021 -author_image_url: https://boxyhq.com/img/team/aswin.jpg -tags_disabled: [sso, engineering, saml-jackson, oauth-2.0] -image: /img/sso-flow.png ---- - -We have already covered SAML at a high level from both [user](2022-06-30-understanding-saml-sso-the-basics-from-the-user-side.md) and [application provider](2022-06-30-understanding-saml-sso-the-basics-from-the-solution-providers-side.md) points of view. - -In this post, we'll dive into the technicalities of SAML, OAuth 2.0 and OpenID Connect and how these come together to serve as building blocks for Jackson SSO. - -## SAML - -SAML was designed for traditional web applications in the early 2000s. The goal was to provide a seamless user experience for applications by federating authentication to an IdP. As a result, applications no longer had to maintain identities for users. All they had to do was to redirect the browser to the IdP which would then authenticate the user and return an assertion about the logged-in user. This assertion in effect was a token, asserting to the app that the user authenticated at the IdP and the assertion is valid for the set period contained within it. - -While SAML gave us a solution to the problem of SSO or federated identity, it does not address the issue of authorization. - -The need for authorization arose with the dawn of Single Page Apps (SPA) and native platforms such as mobile. More and more logic started moving from backend to frontend and an ecosystem of apps that could talk to one another (via HTTP(S)) sprung up. For eg:- You could reserve movie tickets and send invitations to your Facebook friends. This meant that applications started acting on behalf of the end-user, requesting data (friend list) from other services (Facebook). One way we could solve it was by sharing our credentials (for services) with the app. Nothing could be more dangerous than this, because now the application can virtually do anything the user could do. This paved the path for standards like OAuth that provides us with a mechanism to grant controlled and limited access to resources on behalf of the user. - -## OAuth 2.0 - -The OAuth 2.0 Authorization framework enables a third-party application/client to obtain limited access to an HTTP service on behalf of the resource owner (or user). In the final step of this process, the client receives a short-lived access token that can be used to access the protected resources. - -The flow starts with the app redirecting the user agent to an intermediary Authorization server (AS). The AS authenticates the user and obtains permission from the user to access resources. Once that's done, AS redirects back to the client with an Authorization code. The Authorization code is a grant or a credential representing the user's authorization to be used by the client. In the final step, the client uses this code to obtain an access token. This flow otherwise called Authorization Code grant is one of 4 grant types that are supported. For sake of simplicity, we can omit the others for now. - -The above-mentioned flow offers a few benefits: - -- The user only authenticates with the authorization server and the credentials are never shared with the app. -- The access token is not transmitted\* via the user agent but directly to the client via an HTTP request. -- The Client can be authenticated by the authorization server by using a client secret. - -**\*** _It's worth mentioning the fact that another grant type 'implicit grant' does return an access token via the user agent in the redirect URL fragment_ - -#### Using OAuth 2.0 for authentication - -Since authentication usually occurs before issuing the access token, it is usually assumed that possession of an access token is proof that authentication happened. The access token is then used to query the Identity API to obtain user details. - -However, this does not fully serve as proof of authentication and has several pitfalls: - -- The access token is opaque to the client and its intended audience is the protected resource server. -- There is no way to know if the user is still around because information about the authentication event is not exposed. -- In situations where clients get an access token directly in the return URL (implicit grant), there is a high chance that an attacker can inject their malicious token. This can be mitigated by using the Authorization code flow as the token is retrieved from the token endpoint directly. -- OAuth does not define a standard set of fields for the Identity API. For eg:- While one IdP could use `user_id` for the user identifier, the same could be `subject` in another one. This requires different handling on the client side from one IdP to another. - -A new standard called 'OpenID Connect' which builds on top of OAuth 2.0 brings new artifacts like ID tokens that can serve as reliable proof of authentication and also standardizes things like `scope` and `claims`. - -## OpenID Connect (OIDC) - -OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It supports 3 flows of which Authorization code and implicit flow are similar to the ones defined in OAuth 2.0. The notable difference here is the return of an ID Token in JWT format (JSON Web Token). The claims in the ID Token help the client reliably confirm the identity of the user. The audience(`aud`) claim will be set to the client id which means the ID token is intended to be consumed by the client alone. Conforming to the OAuth 2.0 spec, an access token is still returned which can be used to obtain information about the user from the "userinfo" endpoint. OIDC also standardizes the claims in the ID Token as well as the "userinfo" response. - -## Assembling the SSO puzzle - -Now that we have all the pieces of the SSO puzzle, bringing it together in Jackson would look something like the one below. - -![SSO Flow](/img/sso-flow.png) - -Allow me to explain. - -We need to support two kinds of SSO Identity Providers - SAML and OIDC. For the sake of discussion, consider the scenario of two apps where one (CRM) needs to log in with Azure AD via SAML and another (HRM) needs to log in with Google Workspace via OIDC. - -#### Setup SSO Connection - -The preliminary step (marked by the green arrow above) is to add the SSO Connection to Jackson. For SAML IdP, this would mean saving the XML metadata from the IdP. The metadata would contain the SSO URL to send the SAML request to plus the public key to verify the SAML assertion signature. In the case of OIDC IdP, we need the discovery URL and client credentials (clientID and clientSecret of the registered app). The discovery URL can be used to query metadata about IdP such as authorization and token endpoints while the client credentials will be used to authenticate the Jackson client orchestrating the OIDC flow. - -#### Login flow - -Jackson supports both OAuth 2.0 and OpenID flows. The OAuth 2.0 flow is made secure by supporting Authorization Code flow with PKCE. By including the scope `openid` in the client request Jackson will switch to OpenID flow. - -The login process follows the below steps: - -1. The Client (Browser app) initiates the login by redirecting to Jackson's `authorize` endpoint. Jackson will parse the tenant/product in the request and use it to redirect the user to the configured IdP. -2. Step 2 varies based on the Identity Provider type. For SAML IdP, Jackson would construct the SAML request, sign it and send it to IdP. The IdP validates the request and authenticates the user. For OIDC IdP, Jackson constructs an OpenID Connect request and redirects the user to the OIDC Provider authorization endpoint. -3. Once the user is logged in successfully, the IdP redirects back to Jackson. For SAML, the response contains the user profile. In the case of OIDC, the response contains the authorization code that is used by Jackson to obtain the token and user profile from the OIDC IdP. Jackson generates a short-lived `authorization code` and stores the user profile against it. -4. The `authorization code` generated in the previous step is sent to the client app. -5. The client exchanges the code for the token and uses it to query the userInfo endpoint of Jackson to get the complete user profile. In the case of OpenID flow, ID Token is returned by Jackson and contains the basic user profile. - -## Final thoughts - -So in a nutshell, Jackson acts as a proxy between the client app and the IdP doing the heavy lifting of orchestrating SAML/OIDC flows with the configured IdPs. This way you can quickly scale your app auth to any number of providers allowing you to focus on your core product. diff --git a/blog/2022-10-12-what-is-dev-ops-and-how-has-it-evolved-into-dev-sec-ops.md b/blog/2022-10-12-what-is-dev-ops-and-how-has-it-evolved-into-dev-sec-ops.md deleted file mode 100644 index afcee2e..0000000 --- a/blog/2022-10-12-what-is-dev-ops-and-how-has-it-evolved-into-dev-sec-ops.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -slug: what-is-dev-ops-and-how-has-it-evolved-into-dev-sec-ops -title: What is DevOps and how has it evolved into DevSecOps -author: Jay Singh -author_title: Marketing Consultant -author_url: https://www.linkedin.com/in/jaydsingh/ -author_image_url: https://boxyhq.com/img/team/jay.jpg -tags_disabled: [devops, devsecops, developer security] -image: /img/blog/devsecops.png ---- - -## What is DevOps - -Let's first take a look at what DevOps (Developer Operations) is so we can better understand why it has now evolved into DevSecOps (Developer Security Operations). DevOps is a combination of philosophies, practices, and tools that increases a business's ability to deliver better development in less time (Higher velocity). This can be applied to building a new product or the process of continuous improvement that applies to most products we see today. - -If we look at the old way of development, typical teams worked on their own and would do their bit and then just pass it on to the next team to do theirs, a bit like an assembly line. This meant that development cycles were very long, communication between teams was limited, handover processes were not in place and if anything went wrong it would take a long time to identify and fix issues. If we compare that to today's agile development process we use DevOps to work in sprints and deliver results in a much faster and more efficient way. This has been made possible by not only the way we look at the development cycle but also by tools and automation. - -DevOps has come a long way already and we have seen it evolve with the agile methodology of working but security, in particular, was always still the last step of the development process and not thought about as a necessity. In some cases when security was only looked at by a specific team at the end of the process. - -## Why has security been integrated into DevOps - -The rise in cybercrime and the sophistication of attacks has made security a crucial part of the development process and not just an afterthought. This has led to security being integrated into the development process at each stage and becoming a shared responsibility. It has also led to security being thought about and planned right from the start of each process rather than at the end. This has resulted in more development velocity, more layers of integrated security and higher collaboration around security as a major aspect of the development cycle. - -The integration of security in the development cycle at each stage from start to finish while also automating some of the security steps is what has led to the evolution of DevOps becoming DevSecOps, a go-to practice today. One of the main reasons the term was adjusted to include security is to make each person in the process think about and take accountability for secure building practices. - -## Benefits of DevSecOps - -Lastly, let's take a quick look at the main benefits of having solid DevSecOps in place - -1. **Security** - - By thinking about and implementing security at each stage of the development process and particularly in the early stages organizations are proactively mitigating cyber threats. This combined with automated security testing means that dev teams can perform security checks and audits without slowing down development cycles. - -2. **Improved Collaboration** - - DevSecOps pushes for development and security and operations teams to collaborate more and especially in the early stages of the process. This increases innovation and leads to better cross-team buy-in. It also makes sure that everyone is responsible for security. - -3. **Streamlines process that limits vulnerabilities** - - Having security in every stage of the development process limits the chance of finding vulnerabilities much later, vulnerabilities which could delay the release. The process of streamlining the process with automated security testing as part of the development process also ensures that possible vulnerabilities are caught at each stage. - -4. **Cost** - - Cost is also always a major benefit and by having a good DevSecOps process in place you will find bugs and issues much faster which will result in less time and cost required to fix them. - -![DevSecOps](/img/blog/devsecops.png) diff --git a/blog/2022-10-25-how-low-code-solutions-are-changing-how-we-build-products-and-workflows.md b/blog/2022-10-25-how-low-code-solutions-are-changing-how-we-build-products-and-workflows.md deleted file mode 100644 index 33ba96a..0000000 --- a/blog/2022-10-25-how-low-code-solutions-are-changing-how-we-build-products-and-workflows.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -slug: how-low-code-solutions-are-changing-how-we-build-products-and-workflows -title: How low-code solutions are changing how we build products and workflows -author: Jay Singh -author_title: Marketing Consultant -author_url: https://www.linkedin.com/in/jaydsingh/ -author_image_url: https://boxyhq.com/img/team/jay.jpg -tags_disabled: [low-code, no-code, speed of development] -image: /img/blog/lowcode-graph.png ---- - -We have all heard the terms low-code or no-code being thrown around as buzzwords over the last few years but what does this mean and how is it changing the way businesses and individuals solve problems? I am going to use our product SAML Jackson to explain how low-code solutions are changing the way we build products. - -Low-code solutions are essentially products that provide you with building blocks so instead of building a solution from scratch you can simply combine the relevant building blocks to make a relevant solution for your business. Let’s take BoxyHQ and our SAML Jackson product as an example. Without the low-code product (SAML Jackson) the alternative for businesses would be to build a custom SAML integration which takes months and a ton of resources. This sounds ridiculous tho right? With the number of businesses who are deploying SAML for their customer, there must be some reusable parts that can be shared to reduce the time it takes each business. This is where low-code products like SAML Jackson come in. By building the SAML integrations as a reusable component, businesses only need to create one simple connection to the SAML Jackson to deploy SAML. - -Still with me? If not, don't worry. Essentially what low-code is taking advantage of is building in a way that can be shared so the amount of custom building is limited (or low) for common use cases. - -## So what is the difference between low-code and no-code? - -Well while a lot of people would still group them together, the obvious difference is that low-code still needs some code to integrate the building blocks, whereas no-code doesn't. If we look at a product like Zapier for example, that requires no code at all and a non-technical person can use visual blocks to connect different data sources and outputs to build workflows. An example of this is as a non-technical person I can take data from forms such as Hubspot forms that are submitted on our website and create notifications for the team on Slack. Doing all of this without code and just using Zapier is what makes this a no-code solution. - -## Why is low-code so important? - -Lastly, let's take a quick look at the main benefits of having solid DevSecOps in place - -1. **Speed speed speed** - - In today's world businesses need to be agile and fast. With competitors springing up every day and customer expectations high the last thing a business wants to do is to have to make specialist hires for each element of their build or spend precious time on auxiliary features that also have their learning curve. The birth of plug-and-play has meant that businesses can operate faster and more efficiently than ever before. Can you imagine if a business had to build all its tools from scratch? No neither can I. - -2. **Cost** - - Cost is always a major element that businesses and individuals look at when finding a solution and in the case of low-code it comes down to the question of build V buy. For larger enterprises who have not fully adopted the trust and efficiency of low-code they might still choose to build their own solution which will cost them a lot more in resources and time but that might be something, they have spare. Smaller businesses who want to focus on their core offerings will always look for reliable plug-and-play solutions such as low-code which allow them to quickly deploy solutions and stay competitive while saving on the large number of resources needed to build from scratch. - -![DevSecOps](/img/blog/lowcode-graph.png) - -## Are there any negatives to using low-code and no-code platforms? - -The only main negative of these solutions I have identified is that because of the ease and speed of the platforms it can create a lack of transparency and some shadow IT as lots of people in the organization can be building solutions and data can be moving around without accountability. However, with the right IT processes and policies in place, this can be easily fixed. - -## Why are we so excited about low-code and no-code? - -We are very excited about low-code solutions because it drives innovation! We at BoxyHQ are building low-code solutions for enterprises to implement the important but standard features they need to be competitive and compliant with ease so they can focus on what they do best which is innovate. We have some great clients already and can’t wait to see what they do next without the hassle of building standard features such as SSO and Directory Sync. diff --git a/blog/2023-01-18-why-does-your-saas-application-need-audit-logs.md b/blog/2023-01-18-why-does-your-saas-application-need-audit-logs.md deleted file mode 100644 index 11dfce2..0000000 --- a/blog/2023-01-18-why-does-your-saas-application-need-audit-logs.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -slug: why-does-your-saas-application-need-audit-logs -title: Why does your SaaS application need audit logs? -author: Deepak Prabhakara -author_title: Co-founder & CEO @BoxyHQ -author_url: https://github.com/deepakprabhakara -author_image_url: https://boxyhq.com/img/team/deepak.jpg -tags_disabled: [audit-logs, enterprise-readiness] -image: /img/blog/audit-logs-widget.png ---- - -Audit logs are an important tool for keeping track of activity within your SaaS application. These logs provide a detailed record of the actions taken by users and can be used to monitor for potential security breaches, compliance violations, and other issues. Let’s explore some of the key reasons why you need audit logs for your SaaS app. - -1. **Compliance:** Many industries are subject to strict regulations that require organizations to maintain detailed records of their activities. Audit logs can be used to demonstrate compliance with these regulations, and to provide evidence in the event of an audit or investigation. - - The retention period requirements of some well-known compliance frameworks are listed below: - - - ISO 27001: 3 years - - GDPR: Not very specific, as long as necessary - - HIPAA: 6 years - - PCI DSS: 1 year - - NIST: 3 years - - SOX: 7 years - - GLBA: 6 years - -2. **Cyber Insurance:** Obtaining cyber insurance usually comes with requirements around recording and retaining audit logs. These logs help with forensics during insurance claims, otherwise making investigation expensive and time-consuming for both insurers and the affected companies. -3. **Security:** Audit logs can be used to detect and prevent security breaches. By monitoring for suspicious activity, such as repeated failed login attempts or changes to sensitive data, you can quickly identify and respond to potential threats. Additionally, audit logs can be used to reconstruct the events leading up to a security incident, which can help you identify the cause and prevent similar incidents in the future. -4. **Accountability:** Audit logs make it possible to track the actions of individual users, which can be useful for identifying issues such as data breaches, compliance violations, and other problems. This information can be used to hold users accountable for their actions and to help you identify and address any issues that arise. -5. **Troubleshooting:** Audit logs can be used to identify and diagnose issues that occur within your SaaS application. By reviewing the logs, you can see exactly what happened when a problem occurred, which can help you quickly identify the root cause and develop a solution. -6. **Auditing:** Audit logs provide a record of the activities that occur within your SaaS application, which can be useful for internal audits. This information can be used to assess the effectiveness of your security controls and identify areas for improvement. - -![Audit Logs](//img/blog/audit-logs-widget.png) - -Audit logs are a powerful tool that can be used to improve the security, compliance, and overall performance of your SaaS application. By keeping detailed records of user activity, you can monitor for potential issues and quickly respond to problems as they arise. If your SaaS app doesn't have audit logs, you should consider implementing them as soon as possible to ensure the safety and security of your data and users. It is also becoming an important part of enterprise readiness. - -## Introducing our Audit Logs product - -We are extremely thrilled to introduce our new Audit Logs product in collaboration with our friends at [Replicated](https://replicated.com). Retraced is a fully open-source audit log service that comes with an embeddable UI that's easily deployed to an infrastructure of your choice. We have spent years building and fine-tuning audit logs systems and think we have finally discovered an optimal solution to this nagging problem. - -It’s yet another important enterprise readiness feature to tick as you scale your offerings to the enterprise segment and complements our Enterprise SSO and Directory Sync products to give you a one-stop solution. Come check out the product at our [GitHub repo](https://github.com/retracedhq/retraced), we’d love to hear your feedback. diff --git a/blog/2023-03-13-exploring-the-open-source-business-model-and-how-companies-monetize-it.md b/blog/2023-03-13-exploring-the-open-source-business-model-and-how-companies-monetize-it.md deleted file mode 100644 index 5da6ba3..0000000 --- a/blog/2023-03-13-exploring-the-open-source-business-model-and-how-companies-monetize-it.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -slug: exploring-the-open-source-business-model-and-how-companies-monetize-it -title: Exploring the open-source business model and how companies monetize it -author: Deepak Prabhakara -author_title: Co-founder & CEO @BoxyHQ -author_url: https://github.com/deepakprabhakara -author_image_url: https://boxyhq.com/img/team/deepak.jpg -tags_disabled: [open-source] -image: /img/blog/christine-roy-ir5MHI6rPg0-unsplash.jpg ---- - -With the rise of open-source solutions and solution providers, one of the biggest questions asked is, how do businesses monetize while giving away the source code for free? - -## What is an open-source company? - -An open-source company is an organization that develops software but makes the source code freely available to the public. This means that others can copy the code and engine, deploy it themselves, develop it, fix bugs and more. This allows the software not only to be widely accessible for free but also to evolve in a very collaborative way. - -## If everything is free then how can it be monetized? - -We don't have to look very far to find examples of open-source companies that have become unicorns and continue to grow. Some great examples are Elastic ($608 million in revenue, 2021), HashiCorp ($320 million in revenue, 2021), and RedHat ($3.4 billion in revenue, 2021). All these companies operate an open-source business model but have huge revenues and valuations. This is what we are going to look at. - -There are many different ways that open-source companies can monetize - ultimately this comes down to the goals of the business. We are going to explore a few of the options available but keep in mind that these are just some of the ways it can be done and open-source continues to develop and grow at a rapid pace. - -### Donations - -One of the most popular models is to offer the source code and documentation completely free and let its users donate at their discretion. This is normally done for smaller projects and donations can be solicited in various ways, such as a button on the website, a link in a newsletter, a Github donation, or one that I like - buymeacoffee.com. The latter allows you to embed an option into your website or interface and donate at the value of a coffee. Although donations are a great way to monetize some projects, this method is not feasible for bigger companies that have complex solutions and large overheads. - -### Support - -Paid Support or Premium Care, as it’s commonly termed, is a very common business model that has done very well for larger commercial companies. This model allows users to still access the code and deploy it for free but also enables an option for companies/users to pay for additional support. This monetized plan often includes perks such as help deploying the software, customization and ongoing support for general use. Just because the source code of a project is open, it doesn’t mean it's easy to deploy or manage. This is where companies such as Red Hat have been successful and use this particular model to great effect. - -The benefits of this model are, as Red Hat has demonstrated, you can build a revenue-generating company that can be scaled effectively. The drawback is, some companies only make the open-source code available with a paid plan, which goes against the open-source ethos. To truly use this model effectively, companies should offer the source code for free regardless of an option for additional support. - -![OSS Monetization](/img/blog/christine-roy-ir5MHI6rPg0-unsplash.jpg) - -
Photo by Christine Roy on Unsplash
- -### Licensing - -Open-source companies can also license their open-source software, which applies rules to how their software can be used, edited, distributed and copied. Some open-source companies will allow individuals and smaller organizations to use their software for free while charging larger companies a fee to deploy it. Normally a license fee comes with additional benefits, such as support and training, etc. There are also two main types of licensing that open-source companies can utilize. - --Copyleft license -This is a type of license in which, if code is copied and modified it still retains the original license terms - --Permissive license -This grants licenses based on different needs and is much more diverse. - -Licensing and open-source licensing is a huge topic in itself and Snyk has done a fantastic job at explaining this. You can read more about it here. - -### Cloud-hosted Services - -Finally, the last model we will look at is hosting. While open-source organizations can still offer their code for free, some may offer a hosted version which is much easier to set up and maintain. This means customers can effectively use their product like any other SaaS and they typically charge on a subscription basis. - -The hosted model is very popular as it now allows quick deployment but also reduces the level of maintenance and custom work developers need to carry out. The main limitation of offering a hosted model is, it will require the open-source company to offer web hosting and everything that goes along with it. This can require an enormous amount of maintenance and development. - -### The open-core model - -The open core model is when a company releases the core software for anyone to use but then also controls things such as the roadmap and what commits are accepted into it. By doing this, the company can also charge for extra features which customers may want. Some examples could be functionality features or even security/compliance modules. This model has been very popular with open-source companies and is widely seen as a very fair way to operate. It is also very important to make sure that the open-core has enough value that developers will rally around the product from the get-go. Companies that offer very little value from the free version and charge for additional features, do not see great traction in the open-source community. - -## Controversial opinion - -I personally believe that OSS is not a business model but a development model. We are debating this internally, so we would love to hear your feedback and opinions on this subject. - -## Summary - -Although open-source code is widely free and available to use, it has become a popular choice for companies who also want to commercialize. The benefits of open-source are vast and with the variety of business models we discussed you can understand the various options to create a successful, revenue-generating business. diff --git a/blog/2023-03-22-sbom-explained-an-enterprise-guide-to-security-risk-management.md b/blog/2023-03-22-sbom-explained-an-enterprise-guide-to-security-risk-management.md deleted file mode 100644 index 9e5d8ed..0000000 --- a/blog/2023-03-22-sbom-explained-an-enterprise-guide-to-security-risk-management.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -slug: sbom-explained-an-enterprise-guide-to-security-risk-management -title: 'SBOM Explained: An enterprise guide to security risk management' -author: Nathan Tarbert -author_title: Community Success Engineer @BoxyHQ -author_url: https://github.com/NathanTarbert -author_image_url: https://boxyhq.com/img/team/nathan.jpg -tags_disabled: [open-source] -image: /img/blog/security-lock.jpg ---- - -In this age of technology, software companies are quickly shifting towards a strict compliance posture. You may ask yourself, why is that and what has changed over the last several years? This can be due to multiple factors but can mainly be boiled down into four categories. - -- Security -- Product Development -- Compliance -- Supply Chain & Risk Management - -## What is an SBOM or Software Bill of Materials? - -You can think of your modern application as a cake you are baking. The list of ingredients you use to bake that cake would be the SBOM (Software Bill of Materials). In the case of software, it's open-source or private dependencies and third-party components. This list can be massive and can range from hundreds to thousands, especially when you factor in transitive dependencies (an indirect dependency of the component it relies on). This list gets very complex and is impossible to manage at scale at the enterprise level. Gone are the days when most enterprises or smaller-scale organizations would write applications from scratch. Rather, most applications are assembled using pre-built software packages, i.e open-source. Over the past decade, this has led to the rise and use of publicly available software components and agile development at an enormous rate. - -## Security - -More organizations now have security top-of-mind due to cyber attacks on business infrastructure becoming almost a daily occurrence. Companies are faced with major decisions that affect cost, efficiency, and productivity. There is an enormous risk and liability where a company’s code base lives in the cloud. This could be private or public but a good rule of thumb when you think about risk is not if we’re breached, but when. So precautions need to be taken to add layers of protection to software infrastructure. - -An SBOM would provide better visibility to companies in identifying and tracking security vulnerabilities that could enable timely patches. Updates in code should prompt a newly generated report (SBOM). - -We could go a lot deeper around all the various ways precautions could be taken like scanning your application for vulnerabilities or penetration testing. A [minimum viable secure product](https://mvsp.dev/) is of course recommended for all enterprise-ready organizations. It could be as simple as having [audit logs](https://boxyhq.com/audit-logs) in place to record and search events internally on your application. - -## Product Development - -SBOMs can improve and help software development processes by providing a comprehensive list of all open-source dependencies and components used in a product. From an organizational standpoint, it is crucial to ensure that all software and related components are up-to-date and licensed correctly. Having this clear understanding is key to risk mitigation when it comes to understanding what is in a product and how it is constructed. -Therefore, development teams can quickly improve transparency, communication, and collaborative decision-making with a faster time-to-market while ensuring industry compliance standards and regulations. - - -![matrix finger](/img/blog/matrix-finger.jpg) - -## Compliance - -In 2021 the US Government issued an [executive order](https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/) mandating all software companies that do business with the US government must provide a detailed inventory list (software bill of materials or SBOM) of all components related to the software they have produced and sold to any federal agency. The legislation is geared towards transparency with a view to the enhancement of security for our supply chain infrastructure. This has quickly prompted other countries to consider similar legislation. - -## Supply Chain & Risk Management - -It’s vital to take a proactive approach and have a top-down understanding of all software components that live in a software ecosystem. With that in mind, SBOMs are quickly becoming a standard for software supply chain risk management. With the expansion of sophisticated attacks, it’s more important than ever to take a systematic approach when it comes to the security of your organization. - -The ecosystem is growing with tools that help you verify, scan and monitor all your components and manifest files. - -If you have an open-source product to sell to enterprises or the public sector, you will need to anticipate compliance and build an SBOM into your product. Especially if you are targeting entities in heavily regulated industries. Taking this into consideration, that’s what we did at BoxyHQ for each of our four products with guides that will help you navigate these decisions (Enterprise Single Sign On, Directory Sync, Audit Logs, and Data Privacy Vault). We chose to build [Cosign](https://www.sigstore.dev/) right into our tool - but many more are available. Here is a [curated list of SBOM-related tools.](https://github.com/awesomeSBOM/awesome-sbom) - -Please visit BoxyHQ’s website to learn more about producing an SBOM for your products. E.g. SBOM for our enterprise SSO: [BoxyHQ](https://boxyhq.com/docs/jackson/sbom) diff --git a/blog/2023-03-30-sso-wall-of-shame-vs-wall-of-fame.md b/blog/2023-03-30-sso-wall-of-shame-vs-wall-of-fame.md deleted file mode 100644 index 8707a43..0000000 --- a/blog/2023-03-30-sso-wall-of-shame-vs-wall-of-fame.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -slug: sso-wall-of-shame-vs-wall-of-fame -title: 'SSO "Wall of Shame" vs "Wall of Fame"' -tags_disabled: - [developer, security, cybersecurity, devsecops, appsec, sso, open-source] -image: /img/blog/shame-vs-fame.png -authors: - - name: Sama - Carlos Samame - title: Co-founder & COO @BoxyHQ - url: https://www.linkedin.com/in/samame - image_url: https://boxyhq.com/img/team/sama.jpg - - name: Deepak Prabhakara - title: Co-founder & CEO @BoxyHQ - url: https://github.com/deepakprabhakara - image_url: https://boxyhq.com/img/team/deepak.jpg ---- - -Unless you have been living under a rock, you have probably heard of the SSO Wall of Shame. This is a list of vendors that treat single sign-on as a luxury feature, not a core security requirement. There have been numerous complaints regarding the companies that have made it onto this list, and rightfully so. In a downturn economy and in times when security and privacy are critical, many organizations see an opportunity to generate even more revenue. - -This is a small example, listed in alphabetical order of some of the most well-known companies that have ended up on the “Wall of Shame” (see the screenshot below). You can find more information and the full list at [sso.tax](https://sso.tax). It is clear that raising prices for enterprise SSO and other security features, such as Audit Logs (to track critical events), is just part of their revenue model. - -![sso tax list](/img/blog/sso-tax-list.png) - -But is this the right thing to do? It’s hard to judge from the outside, and clearly companies need to make a profit while showing growth, especially when you are backed by Venture Capital. Having said that, at BoxyHQ we believe that we can all do better (we are also Venture funded). Nonetheless, cybersecurity taxes should stop, and we should all focus on increasing our security posture and making a positive impact. Take for example, Hubspot charging 6300% more for SSO functionality! That is a clear example of how absurd and abusive some companies can be. - -Now, we ask ourselves, how about the “Wall of Fame”? This is a separate list of companies that lead by example and don’t take advantage of their customer base. If you do a quick search, you will find some interesting companies listed. Grafana, Cal.com, and Sumo Logic, just to name a few. - -To understand why startups normally lean this way, it’s important to consider the enterprise deal process. With RFPs, security questionnaires, and other compliance-related procedures, closing an enterprise deal becomes all-consuming for a startup. This can justify an enterprise pricing tier. Given a startups early evolution of products, , Enterprise SSO becomes an easy candidate to distinguish the pricing tier gap between charging SMBs and what they can charge enterprises. But building and maintaining SSO is expensive and time-consuming. SAML is not necessarily the easiest protocol implementation to get right. And add to this the customer support issues that come with onboarding large enterprise teams onto the product. But as a startup matures the product needs to have enough core enterprise features and not merely depend on undifferentiated features like SSO. - -To take it full circle, it would be nice to see a full list of the SSO Wall of Fame. Then we could ensure support for the companies with integrity, who have clearly not been overtaken by greed. Unfortunately because of our bandwidth, we can not commit to full ownership of this initiative, but can offer some practical advice on how companies could start offering SSO pricing tiers for free or at a nominal price increase: - -- Charge for other core enterprise features instead of SSO. If your product is not quite to that level of maturity, please read on. -- Instead of charging for SSO, charge for the security process’s that comes with enterprise deals. If a company wants you to go through its security and compliance process, rather pay a premium to enhance its security posture and reduce compliance risk from its vendors. -- If that scenario isn’t possible then consider segmenting SSO pricing based on the number of users or seats. SMBs will not have a very large number of seats so this could be a possible way to separate your pricing. -- If your Enterprise tier is not based on seats, a natural progression is to base pricing on usage. - -We are trying to do our part by providing a free open–source enterprise-grade SSO (called SAML Jackson), that any developer, team, or organization can plug into with just a few lines of code. Check out the GitHub repo [here](https://github.com/boxyhq/jackson). Feedback is much appreciated and a star will help us raise security awareness. 🙂 - -Stay safe, do good, and avoid the dark side of the SSO tax! diff --git a/blog/2023-5-11-build enterprise-software-with-no-code-thanks-to-bubble-io copy.md b/blog/2023-5-11-build enterprise-software-with-no-code-thanks-to-bubble-io copy.md deleted file mode 100644 index eb1e487..0000000 --- a/blog/2023-5-11-build enterprise-software-with-no-code-thanks-to-bubble-io copy.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -slug: build-enterprise-software-with-no-code-thanks-to-bubble-io -title: 'Build Enterprise Software with No-Code Thanks to Bubble.io' -author: Nathan Tarbert -author_title: Community Success Engineer @BoxyHQ -author_url: https://github.com/NathanTarbert -author_image_url: https://boxyhq.com/img/team/nathan.jpg -tags_disabled: [open-source, sso, enterprise-ready] -image: /img/blog/bubble-small.jpg ---- - -Building your enterprise applications on Bubble is now easier than ever with BoxyHQ, a single API to connect to enterprise Single Sign-On (SSO), and multiple security compliance features. - -## What is Bubble.io? - -Bubble is a visual drag-and-drop programming language. Instead of scripting code, users can leverage a visual interface to build applications - simple or complex. This makes building apps accessible to people (or teams) with a big idea - but no programming skills. - -## What is a Bubble.io Plugin? - -Plugins are third-party Bubble.io components that are not part of the Bubble core platform functionality. They can be freely provided by the creators or available as a paid plugin. - -## Bubble Makes It Simple - -One of the benefits of using a no-code platform like Bubble is that not only can you build an application quickly, but you also have the ability to architect complex features. If we look back just a few years, this was not possible. You would have 2 options: - -- Hire a developer or development team -- Delegate to a developer or team - -But we live in an era where technology is continually evolving and individuals' or teams' creativity has no limits. We can put ourselves in the shoes of someone who doesn’t write code but wants to build a professional application - with Bubble.io this is now a possibility. - -## Top 3 reasons small businesses or enterprises should switch to a no-code platform - -_This comes with a caveat that [Bubble does have a learning curve](https://coachingnocodeapps.com/how-long-does-it-take-to-learn-bubble-and-how-much-does-it-cost) but once you get familiar with the platform it’s much easier to build applications._ - -## 1. Using a no-code solution like Bubble saves money on IT: - -Typical app development workflow costs for SMBs (small to medium businesses) from design to implementation can range from $75,000 to $750,000. This can be crippling for startups which opens up a no-code solution as a better alternative. If we are talking about enterprise development, this number can reach up to millions. - -## 2. Time to value: - -This depends on what type of app you want to build. Some estimations are up to [80% in development time saved](https://medium.com/swlh/could-i-build-my-product-on-bubble-io-75923a41b9b6). Let’s take into consideration there is no need to set time-consuming tasks for a developer such as basic features and environment setup. This is all taken care of for you when building in Bubble’s platform. - -## 3. Built-in SEO: - -Whether you are a startup or an enterprise team, but inexperienced in the art of Search Engine Optimization (SEO), not to worry, Bubble has built-in [SEO tools](https://manual.bubble.io/help-guides/customizing-an-application/seo#bubbles-seo-tools) that allow you to the ability to modify and customize how your application is seen by search engine crawlers. This would be in the advanced settings and great care should be taken when enabling or modifying these settings because, by default, your application will not be indexed. - -This brings a lot of value when you don’t necessarily need a professional marketing division to start with. Right out of the gate, you can build an application that has professional capabilities to successfully reach your target persona. - -## Can I add enterprise features on Bubble? - -One of the foundational needs of any new business app is the ability for users to securely log in to password-protected areas - like a shopping cart or protected content. If we look at enterprise features like SAML SSO for instance, you may think this is a feature that is out of reach for a no-code platform, but you can simply search within the Bubble marketplace and a list of plugin creators has made this possible. Instantly you get a short list of plugins available for the functionality you would like to implement. - -![BoxyHQ plugin](/img/blog/bubble-plugin.png) - -BoxyHQ is one of those creators. By simply installing the plugin into your Bubble.io app, you can be up and running with little configuration effort. We have written a step-by-step [guide](https://boxyhq.com/guides/jackson/integrations/bubble) to help you properly configure setting up SAML single sign-on for your small to medium business (SMB) or enterprise application. - -Once you have BoxyHQ’s plugin properly configured, you now have an application that will handle secure login access to your users using SAML single sign-on that will connect to any IdP (Identity Provider) like Okta, OneLogin, Azure AD, etc. - -This is when you can breathe a sigh of relief because there is now no need to remember usernames and passwords. BoxyHQ’s plugin easily provides that solution for you. If you would like to test a [demo application](https://boxyhq-saml-sso.bubbleapps.io/version-test) click here to see the flow and enjoy the seamless experience you will have inside the Bubble platform. - -If you are interested in understanding what’s happening on the backend, we have a [guide](https://boxyhq.com/blog/understanding-saml-sso-the-basics-from-the-user-side) available that will walk you through the technical aspects of single sign-on. - -SSO can be complicated but BoxyHQ makes it simple to understand. diff --git a/blog/2023-6-21-ignite-your-saas-journey-with-the-best-free-and-open-source-saas-starter-kit.md b/blog/2023-6-21-ignite-your-saas-journey-with-the-best-free-and-open-source-saas-starter-kit.md deleted file mode 100644 index c02edb7..0000000 --- a/blog/2023-6-21-ignite-your-saas-journey-with-the-best-free-and-open-source-saas-starter-kit.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -slug: ignite-your-saas-journey-with-the-best-free-and-open-source-saas-starter-kit -title: 'Ignite Your SaaS Journey with the Best Free and Open-Source SaaS Starter Kit' -author: Sama - Carlos Samame -author_title: Co-founder & COO @BoxyHQ -author_url: https://www.linkedin.com/in/samame/ -author_image_url: https://boxyhq.com/img/team/sama.jpg -tags_disabled: [developer, security, saas, devsecops, appsec] -image: /img/blog/enterprise-ready-saas.jpg ---- - -![testimonial quote](/img/blog/testimonial-kubeworkz.png) - -Discover the Game-Changing Power of an Enterprise-Ready Solution that will help you save thousands of dollars in development costs. - -Are you a SaaS founder striving for accelerated success in the highly competitive landscape? Look no further! At BoxyHQ we've curated a revolutionary tool that will supercharge your SaaS journey like never before. Introducing the Best Free and Open-Source SaaS Starter Kit, designed to ignite your growth and transform your startup dreams into reality. - -## Enterprise-Ready Powerhouse - -We understand that conquering the enterprise market is a key milestone for many SaaS founders. That's why this Starter Kit is not just another ordinary tool—it's an enterprise-ready powerhouse. Equipped with robust security features and compliance readiness, it's tailored to meet the stringent requirements of corporate clients. It includes SAML/OIDC Single Sign-On (SSO), Directory Sync, Audit Logs, and Data Privacy Vault (PII, PCI, PHI compliant) that would cost tens of thousands of dollars in developer time. Empower your startup to take on the biggest players in the industry with confidence. - -## Supercharge Your Development Journey - -Leave the tedious and time-consuming development tasks behind. The SaaS Starter Kit empowers founders to supercharge their development journey. Its intuitive, no-code capabilities streamline the entire process, enabling you to focus on your unique value proposition. Join the ranks of successful SaaS startups who have harnessed the power of this kit to achieve rapid growth and customer acquisition. - -## Get Started Today - -Ready to unlock your SaaS potential? Getting started is a breeze. Simply access the Starter Kit's source code and documentation on GitHub, available at [here](https://github.com/boxyhq/saas-starter-kit) - -For additional guidance and insider tips, head over to this other [blog post](https://boxyhq.com/blog/enterprise-ready-saas-starter-kit) and watch our [full demo](https://www.youtube.com/watch?v=oF8QIwQIhyo). It's time to embark on your journey toward SaaS greatness. - -Don't let your SaaS dreams remain stagnant—ignite them with the best free and OSS enterprise-grade SaaS Starter Kit. This game-changing tool is set to revolutionize the way startups grow and succeed. Seize the opportunity, join our thriving community, and accelerate your path to SaaS stardom. The possibilities are limitless, and your success awaits! - -![landing page](/img/blog/ssk-landing-page.png) \ No newline at end of file diff --git a/careers/2021-08-18-senior-software-engineer.md b/careers/2021-08-18-senior-software-engineer.md deleted file mode 100644 index f27ab30..0000000 --- a/careers/2021-08-18-senior-software-engineer.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -slug: senior-software-engineer -title: Senior Software Engineer - Open Source, Dev Tools -author: Deepak Prabhakara -author_title: Co-founder & CEO @ BoxyHQ -author_url: https://github.com/deepakprabhakara -author_image_url: https://avatars.githubusercontent.com/u/357991?s=400&v=4 -tags_disabled: [careers, senior-software-engineer, engineering] ---- - -#### TLDR - -Join our well-funded remote-first team if you love building open source API driven developer tools. We are just getting started so it is a chance to be part of the founding team and influence adoption of our products! Join us on our mission to help startups simplify development of compliance and data security related features in their products. Reach out to us at careers@boxyhq.com. - -#### About us - -- Open source-first company - your work will be visible and you will be able to influence hundreds of developers! -- Our team will be distributed remotely worldwide. -- BoxyHQ is still small - just us 2 founders for now. You will be one of the first employees and can drive major parts of the product. -- Highly competitive salary and stock options. -- Experienced founders with strong engineering, commercial and open source experience. -- Engineering team will be involved in product discussions and planning. We do it openly via GitHub. -- We encourage and support the team in attending conferences, giving talks, writing blog-posts, and other activities. -- We believe in constantly iterating and improving; you will get to influence our internal processes as well. - -#### About you - -- Strong software engineering background. We are language agnostic but will be using Go and Javascript in our initial projects. Excellent coding practises (standards, unit tests, docs, etc) are essential. -- Remote work self-discipline. A lot of our processes are built on trust - we don't like to micro-manage. You get to take full ownership of the products. -- Excellent communication skills - clear, constructive, and respectful dialog with other team members, community. -- Ability to write technical docs, blogs. Team is responsible to keep documentation up to date. - -### The Offer - -- Competitive salary and stock options -- Flexible work schedule -- Choice of Mac, Windows or Linux laptop -- Stipend for home office set up -- Stipend for career development and learning - -_We’re committed to be the place where a culturally diverse mix of talented people get together to do their best work. We strongly encourage you to apply regardless of your location, background, race, gender, sexual orientation or any other personally defining attribute that make us different._ diff --git a/docs/Bot市场/_category_.json b/docs/Bot市场/_category_.json new file mode 100644 index 0000000..aa72f8e --- /dev/null +++ b/docs/Bot市场/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Bot市场", + "position": 8 +} diff --git a/docs/Bot市场/bot安装.md b/docs/Bot市场/bot安装.md new file mode 100644 index 0000000..887eeef --- /dev/null +++ b/docs/Bot市场/bot安装.md @@ -0,0 +1,20 @@ +--- +sidebar_label: 'bot安装' +sidebar_position: 1 +--- + +# bot安装 + +Bot安装是进行bot安装和管理控制的重要模块,主要包括bot安装、安装查询、安装管理等功能。 + +在bot详情页,用户点击“安装此Bot”按钮后,可以看到该bot工作所需的各项权限信息。若用户同意授予bot所需的相关权限即可进行安装。用户可选择将bot安装到所有仓库(用户拥有的所有仓库)中,也可以选择指定的仓库进行安装。 + +![botinstall1](../../static/img/bot/botinstall1.png) + +在个人“设置”或者“仓库设置”中,用户可以看到目前已经安装的Bot情况,点击“配置”按钮可以对bot安装情况进行配置,点击“卸载”按钮可以进行卸载。 + +![botinstall2](../../static/img/bot/botinstall2.png) + +在bot安装配置页中,用户可以掌握该bot的安装位置和工作状态。若用户需要更改bot的工作仓库时,可以进行更改安装位置。bot的工作状态包括激活和挂起,用户可根据需要对bot的状态进行调整,将其挂起或者激活,会影响到bot对仓库数据的访问权限。 + +![botinstall3](../../static/img/bot/botinstall3.png) \ No newline at end of file diff --git a/docs/Bot市场/bot市场.md b/docs/Bot市场/bot市场.md new file mode 100644 index 0000000..32cef1d --- /dev/null +++ b/docs/Bot市场/bot市场.md @@ -0,0 +1,24 @@ +--- +sidebar_label: 'bot市场' +sidebar_position: 4 +--- + +# Bot市场 + +Bot市场是进行Bot分享与复用的重要模块,主要包括bot的搜索发现,详情查看等功能。 + +Bot市场主页中展示了目前所有已经上架市场的bot简要信息,包括bot的头像,名称,开发者,简介和安装次数等信息,用户可根据这些基本信息初步判断该bot是否符合自己的项目需求。 + +在bot市场主页中,用户可以选择指定的bot种类,筛选出特定分类的bot,在这个种类范围内进行搜索与选择。 + +此外,用户通过在搜索栏中输入关键字进行搜索,可检索出内容包含指定关键字的相关bot。 + +用户可结合种类筛选和关键字搜索缩小范围,在市场中快速找到符合项目相关需求的bot。 + +![botmarket1](../../static/img/bot/botmarket1.png) + +在bot市场页中,用户点击指定的bot卡片即可进入该bot的详情页。Bot的详情页包含bot的头像,名称,开发者,种类和详细介绍等信息,用户可在此掌握该bot的各项介绍,进一步判断是否将其安装到指定仓库中。 + +![botmarket2](../../static/img/bot/botmarket2.png) + +在bot详情页中,若用户认为该bot满足自己的项目需求,可点击“安装此Bot”按钮,了解该bot的权限信息,将其安装到指定的仓库中,关于安装的更多介绍可见“Bot安装”部分。 \ No newline at end of file diff --git a/docs/Bot市场/bot开发.md b/docs/Bot市场/bot开发.md new file mode 100644 index 0000000..036b04c --- /dev/null +++ b/docs/Bot市场/bot开发.md @@ -0,0 +1,22 @@ +--- +sidebar_label: 'bot开发' +sidebar_position: 3 +--- + +# Bot开发 + +Bot开发是开发者进行bot注册的重要模块。 + +在个人“设置”中,用户可以看到目前已经注册的bot列表,点击对应bot的“编辑”按钮可以对已注册的bot进行配置;点击“Bot注册”按钮开始注册新的bot。 + +![botcreate1](../../static/img/bot/botcreate1.png) + +在注册页中,开发者需要填写bot注册的相关信息,包括bot的名称、Webhook 地址,详细介绍等,系统将对开发者输入的信息进行合法性校验,确保bot各项信息的完整性和有效性。此外,系统将自动生成bot的唯一标识,同时调用 GitLink 平台的相关接口生成bot的身份凭证信息,包括客户端密钥和私钥等。 + +开发者需通过这些身份信息结合平台接口进行bot身份认证后,调用相关接口完成bot的相关功能。 + +平台开发API链接(待完善):https://www.gitlink.org.cn/docs/api#introduction + +![botcreate2](../../static/img/bot/botcreate2.png) + +![botcreate3](../../static/img/bot/botcreate3.png) \ No newline at end of file diff --git a/docs/Bot市场/bot配置.md b/docs/Bot市场/bot配置.md new file mode 100644 index 0000000..0999a33 --- /dev/null +++ b/docs/Bot市场/bot配置.md @@ -0,0 +1,23 @@ +--- +sidebar_label: 'bot配置' +sidebar_position: 2 +--- + +# Bot配置 + +Bot配置是开发者进行bot维护和配置的重要模块,主要包括bot基本信息维护、权限&订阅事件管理、高级选项配置等功能。 + +Bot的基本信息维护中,开发者可以看到bot的各项基本信息,并可以根据需要对bot的头像,名称,Webhook地址等进行修改。 + +![botconfig1](../../static/img/bot/botconfig1.png) + +Bot的权限&订阅事件管理中,开发者可根据对仓库资源的访问需要为bot分配不同的权限和等级,比如增加代码库权限,将拉取请求的写权限变为读权限等。开发者还能更改当前bot订阅的事件列表,比如订阅代码库推送,取消拉取请求分配订阅等,以实现bot功能的更新与升级。 + +![botconfig2](../../static/img/bot/botconfig2.png) + + +Bot高级选项配置中,开发者可以改变bot的公私有状态,从而影响到bot的使用范围。需要注意的是,公开状态下的bot在已有其他仓库安装的情况下不能变成私有。开发者可选择将bot上架到市场,需要填写上架信息,包括市场简介,主要功能,次要功能等各项信息。 + +开发者还能进行bot的删除和转让操作,发起转让意味着更改bot的所有权,需要输入接受者的用户名。在接受者确定接受后,即可完成bot的所有权变更,拒绝则会取消本次的转让操作。 + +![botconfig3](../../static/img/bot/botconfig3.png) diff --git a/docs/DevOps引擎/_category_.json b/docs/DevOps引擎/_category_.json new file mode 100644 index 0000000..813fd86 --- /dev/null +++ b/docs/DevOps引擎/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "DevOps引擎(Engine)", + "position": 6 +} diff --git a/docs/DevOps引擎/代码流水线.md b/docs/DevOps引擎/代码流水线.md new file mode 100644 index 0000000..671fcd3 --- /dev/null +++ b/docs/DevOps引擎/代码流水线.md @@ -0,0 +1,12 @@ +--- +sidebar_label: '代码流水线' +sidebar_position: 5 +--- +# 代码流水线 + 可以通过代码的形式(YAML格式)来配置流水线,首先选择代码流水线和对应的分支: + + ![code_workflow1](../../static/img/engine/code_workflow1.jpg) + + 编辑流水线代码,其流水线名称描述、触发器、全局参数、执行串行/并发和流水线编排等概念同图形流水线,具体描述如下: + +![code_workflow2](../../static/img/engine/code_workflow2.png) \ No newline at end of file diff --git a/docs/DevOps引擎/参数配置.md b/docs/DevOps引擎/参数配置.md new file mode 100644 index 0000000..493ea0e --- /dev/null +++ b/docs/DevOps引擎/参数配置.md @@ -0,0 +1,15 @@ +--- +sidebar_label: '参数配置' +sidebar_position: 2 +--- + + # 参数配置 + + 可在流水线中使用,实现动态参数配置;有字符串、数字、布尔三种类型。 + + ![parameter1](../../static/img/engine/parameter1.png) + + +在流水线的配置中通过如下方式获取参数: + + ![parameter2](../../static/img/engine/parameter2.png) \ No newline at end of file diff --git a/docs/DevOps引擎/图形流水线.md b/docs/DevOps引擎/图形流水线.md new file mode 100644 index 0000000..1c6cdbe --- /dev/null +++ b/docs/DevOps引擎/图形流水线.md @@ -0,0 +1,50 @@ +--- +sidebar_label: '图形流水线' +sidebar_position: 4 +--- + + # 图形流水线 + ## 基本信息 +可以编辑流水线的名称、描述 + +同一仓库下的流水线名称不能重复 + +![vis_workflow1](../../static/img/engine/vis_workflow1.png) + +## 触发器 +注:流水线编排时,触发器要放在开始节点之前;目前一条流水线仅添加支持一个触发器 + +* 定时触发器cron:可通过填写cron表达式设置触发的具体时间 +![vis_workflow2](../../static/img/engine/vis_workflow2.png) + +* 事件触发器GitLink_Webhook:给出了常见的代码变更事件触发,包括推送代码、合并请求、创建标签 +![vis_workflow3](../../static/img/engine/vis_workflow3.png) + +## 全局参数 + +添加后可在当前流水线中使用 + +![vis_workflow4](../../static/img/engine/vis_workflow4.png) + +使用实例 + +![vis_workflow5](../../static/img/engine/vis_workflow5.png) + +## 并发执行 + +![vis_workflow6](../../static/img/engine/vis_workflow6.png) + +开启后,同一流水线可同时并发执行n个流水线实例(每触发一次我们得到一个流水线实例); + +![vis_workflow7](../../static/img/engine/vis_workflow7.png) + +若未开启,则当前流水线实例执行中,后面的实例处于排队状态(最多可排队5个实例)。当前实例执行完成,下一个实例开始执行。 + +![vis_workflow8](../../static/img/engine/vis_workflow8.png) + + +## 流水线编排 + +每条流水线必须要有一个开始节点、结束节点,至少一个任务节点。支持串行编排和并行编排。 + + diff --git a/docs/DevOps引擎/密钥设置.md b/docs/DevOps引擎/密钥设置.md new file mode 100644 index 0000000..b28b953 --- /dev/null +++ b/docs/DevOps引擎/密钥设置.md @@ -0,0 +1,16 @@ +--- +sidebar_label: '密钥设置' +sidebar_position: 3 +--- + + # 密钥设置 + +将账号密码、密钥、证书等存放到密钥管理里,配置后可直接在流水线中使用,避免因直接填写引起的泄露风险。 + +![secret1](../../static/img/engine/secret1.png) + +使用示例 + +注:节点输入参数中,下拉选项为密钥类型,需要提前配置好密钥在流水线中选择使用 + +![secret2](../../static/img/engine/secret2.png) \ No newline at end of file diff --git a/docs/DevOps引擎/引擎简介.md b/docs/DevOps引擎/引擎简介.md new file mode 100644 index 0000000..e63549a --- /dev/null +++ b/docs/DevOps引擎/引擎简介.md @@ -0,0 +1,13 @@ +--- +sidebar_label: '引擎简介' +sidebar_position: 1 +--- + + # 引擎 + +引擎(Engine)是GitLink提供的一款DevOps工具,通过简单的节点编排来构建开发、测试、部署流水线,从而创建自动化的软件交付流程。 +它可以实现持续的代码集成,让开发者能尽早发现质量问题,快速定位修复,提升软件开发效率和质量;自动化的代码扫描、编译打包、单元测试,把研发团队从重复的工作中解放出来,聚焦到更有价值的事情上。 + +![engine_intro](../../static/img/engine/engine_intro.jpg) + +在引擎页面中,用户可以创建和编辑图形流水线或代码流水线、设置外部参数、管理密钥等操作。 \ No newline at end of file diff --git a/docs/DevOps引擎/执行记录查询.md b/docs/DevOps引擎/执行记录查询.md new file mode 100644 index 0000000..30ca593 --- /dev/null +++ b/docs/DevOps引擎/执行记录查询.md @@ -0,0 +1,10 @@ +--- +sidebar_label: '执行记录查询' +sidebar_position: 6 +--- + + # 执行记录查询 + + 用户可以查看流水线的运行状态 + + ![result](../../static/img/engine/result.png) \ No newline at end of file diff --git a/docs/admin-portal/audit-logs.md b/docs/admin-portal/audit-logs.md deleted file mode 100644 index aa41971..0000000 --- a/docs/admin-portal/audit-logs.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Manage Audit logs Admin Portal -sidebar_label: Audit Logs ---- - -# Admin Portal - -Retraced can be accessed using Admin interface that allows you to manage Projects & Environments via UI. To enable the Admin Portal, make sure you deploy [Retraced with Docker Compose](../retraced/self-host/docker.md) - -You can open the Admin Portal on port `5225`. - -## Sign into Admin Portal - -We use [Magic Links](https://next-auth.js.org/providers/email) to authenticate users to the UI. - -You'll need to set the following configuration in the [environment](../jackson/deploy/env-variables.md#admin-ui-configuration): - -1. SMTP Server details, so we can send you the email with the magic link. -2. Access Control List which is an array of emails or glob patterns. Only these users will be allowed access to the Admin Portal. Example: `tonystark@gmail.com,*@marvel.com`. - -Follow the below steps to login into the Admin dashboard. - -- Visit the path `/api/auth/signin` on your app. The page will display a sign-in page with a text box to enter the email address. -- Enter the email address that matches the `NEXTAUTH_ACL` and click the button **Sign in with Email**. -- Open the inbox and you'll see an email from Jackson. -- Open that email and click the button **Sign in**. Now you've successfully logged into the BoxyHQ Admin Portal. -- Click on the Audit Logs menu from the sidebar on the left to access the Retraced service. - -## Fresh Start - -When you are setting up the Audit logs for the first time with Retraced, you won't have any **Projects** in the system or in case you run bootstrap script as a part of your deployment you will have **dev** project. - -![fresh start](/images/product_images/admin-ui-retraced/fresh-start.png) - -## Create Project - -Just click on **Create Project** or **Add Project** button to initiate new Project creation. -You just need to enter the name of the project and click on **Create Project** button. - -![create project](/images/product_images/admin-ui-retraced/create-project.png) - -## Project Information - -You will get see the **Project Information** after the Project is created. -This page shows, - -1. Project ID -2. Production Token -3. Staging Token -4. Publisher API Base URL -5. POST request URL to ingest your events -6. Example CURL command to send test events - -![project info](/images/product_images/admin-ui-retraced/project-info.png) - -## Send test event with CURL - -You can copy and paste the curl command in terminal or command prompt. -After execution of command you should see **id & hash** as output. - -![curl request](/images/product_images/admin-ui-retraced/curl-request.png) - -## Project List - -Now if you click on Audit Logs you should see newly created Project there. - -You can perform following actions: - -- You can click on first button under actions the **tools** button to open the **Project Information** page. -- You can click on second button under actions, the button with **magnifying glass** to see the **logs**. - -![project list page](/images/product_images/admin-ui-retraced/project-list-page.png) - -## Select Environment & Group - -When you create a Project by default following environments are created - -- Production -- Staging - -Every Environment can have multiple Tenants. - -![select environment](/images/product_images/admin-ui-retraced/select-environment.png) - -## View Logs - -Once you select the Environment you will see the Tenants listed in the dropdown. -For this example you will see **BoxyHQ** listed in the dropdown for **Staging Environment**. -Once you select the **Tenant** you will the logs listed down on the page. - -![select groups](/images/product_images/admin-ui-retraced/select-groups.png) diff --git a/docs/admin-portal/directory-sync.md b/docs/admin-portal/directory-sync.md deleted file mode 100644 index be5d367..0000000 --- a/docs/admin-portal/directory-sync.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Manage Directory Sync using Admin Portal -sidebar_label: Directory Sync ---- - -# Manage Directories - -On the Admin Portal **Directory Sync** menu, you can see the Directory connections. - -## Create Directory Sync connection - -1. From your Admin Portal, go to **Directory Sync**. -2. Click **Create New**. -3. Enter the following information: - - Enter **Directory name** - - Select the **Directory provider** from the list of [available providers](../directory-sync/providers/). - - Add the **Tenant** - - Add the **Product** - - Enter the **Webhook URL** - - Enter the **Webhook secret** - -![Create Directory](/img/dsync/admin/create-directory.png) - ---- - -## Update Directory Sync connection - -1. From your Admin Portal, go to **Directory Sync**. -2. From the list of directory sync connections, click edit icon. -3. You can update the following information: - - Enter **Directory name** - - Enter the **Webhook URL** - - Enter the **Webhook secret** - - Toggle **Enable Webhook events logging** - -![Update Directory](/img/dsync/admin/update-directory.png) - ---- - -## View directory users - -1. From your Admin Portal, go to **Directory Sync**. -2. From the list of directory sync connections, click database icon. -3. Click the tab **Users**. -4. Click the eye icon to view the user raw JSON data. - -![Users](/img/dsync/admin/users.png) - ---- - -## View directory groups - -1. From your Admin Portal, go to **Directory Sync**. -2. From the list of directory sync connections, click database icon. -3. Click the tab **Groups**. -4. Click the eye icon to view the group raw JSON data. - -![Groups](/img/dsync/admin/groups.png) - ---- - -## View webhook events - -1. From your Admin Portal, go to **Directory Sync**. -2. From the list of directory sync connections, click database icon. -3. Click the tab **Webhook Events**. -4. Click the eye icon to view the event raw JSON data. - -![Logs](/img/dsync/admin/logs.png) - -Click the button **Clear Events** to delete all events from the database. - ---- - -## Enable webhook events logging - -1. From your Admin Portal, go to **Directory Sync**. -2. From the list of directory sync connections, click edit icon. -3. You can enable or disable the **Enable Webhook events logging**. - -By default, the webhook events are not logged. diff --git a/docs/admin-portal/enterprise-sso.md b/docs/admin-portal/enterprise-sso.md deleted file mode 100644 index e8335b0..0000000 --- a/docs/admin-portal/enterprise-sso.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Manage Enterprise SSO using Admin Portal -sidebar_label: Enterprise SSO ---- - -# Manage SSO Connections - -On the Admin Portal **Enterprise SSO** menu, you can see the SSO Connections details. - -## Add SAML Connections - -Once you've set up the SAML app on your Identity Provider, the Identity Provider will generate a SAML Metadata file. - -The SAML metadata file contains information about the various SAML Authorities that can be used in SAML 2.0 protocol message exchanges. - -Download the SAML Metadata file from your IdP and follow the below steps for adding the SAML connection. - -- Click the button **New Connection**. -- Choose **SAML** as the type. -- Give your new connection a **name**. -- Add your **Tenant** (Eg: boxyhq.com) and **Product** (Eg: flex). -- Add **Allowed redirect URLs**. -- Add **Default redirect URL**. -- Paste the **Raw IdP XML**. -- If **ForceAuthn** is checked, it means that the user will be forced to re-authenticate at SAML IdP, even if they have an active session. -- Click the button **Save Changes**. - -Now you've successfully added your first SAML connection. - -## Add OIDC Connections - -Once you've registered the OIDC app on your Identity Provider, the Identity Provider will generate a clientId and clientSecret. - -The `clientSecret` will be used to authenticate the oidc client (in this case jackson) and obtain the `access_token`. - -Also get the OpenID provider [discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig) endpoint (usually ending in `/.well-known/openid-configuration`) and follow the below steps for adding the OIDC connection. - -- Click the button **New Connection**. -- Choose **OIDC** as the type. -- Give your new connection a **name**. -- Add your **Tenant** (Eg: boxyhq.com) and **Product** (Eg: flex). -- Add **Allowed redirect URLs**. -- Add **Default redirect URL**. -- Enter the URL for OpenID Provider discovery which exposes the Provider Metadata. -- Paste the **clientId** and **clientSecret** values into Client ID [OIDC Provider]/Client Secret [OIDC Provider] fields in the UI. -- Click the button **Save Changes**. - -Now you've successfully added your first OIDC connection. - -## SAML Federation - -SAML Federation is an enterprise feature and you need to have an enterprise license to use this feature. - -From the **Admin Portal** go to **Enterprise SSO** > **SAML Federation**. - -### Create SAML Federation App - -- Click **New App**. -- Enter the following information: - - **Name** - - **Tenant** - - **Product** - - **ACS URL** (ACS URL of the SP) - - **Entity ID** (Entity ID of the SP) - -![Create SAML Federation App](/img/saml-federation/admin/create-saml-federation-app.png) - ---- - -### Update SAML Federation App - -- From the list of SAML Federation Apps, click on the **Edit** icon of the app you want to update. -- You can update the following information: - - **Name** - - **ACS URL** (ACS URL of the SP) - - **Entity ID** (Entity ID of the SP) - -![Update SAML Federation App](/img/saml-federation/admin/update-saml-federation-app.png) - ---- - -### View IdP Configuration - -Click **View IdP Configuration** button to view the IdP configuration for the SAML Federation App. You need to provide the SP with the following information: - -- **SSO URL** -- **Entity ID / Audience URI / Audience Restriction** -- **X.509 Certificate** - -![View IdP Configuration](/img/saml-federation/admin/view-idp-configuration.png) diff --git a/docs/admin-portal/overview.md b/docs/admin-portal/overview.md deleted file mode 100644 index 5caff7a..0000000 --- a/docs/admin-portal/overview.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Get Started with Admin Portal -sidebar_label: Get Started ---- - -# Get Started with Admin Portal - -SAML Jackson comes with an Admin Portal that allows you to manage **Enterprise SSO**, **Directory Sync**, **Setup Links**, and **Audit Logs** products via an easy to use web interface. - -Our future products (where relevant) will also be available in the Admin Portal. - -To enable the Admin Portal, make sure you deploy [Jackson as a service](../jackson/deploy/service). - -## Authentication Methods - -BoxyHQ SAML Jackson supports multiple authentication methods. You can choose to use any of the following methods to authenticate users to the Admin Portal. - -We use [NextAuth](https://next-auth.js.org) to handle authentication. Set the following environment variables to configure the authentication. - -- `NEXTAUTH_URL`: The URL of your app. -- `NEXTAUTH_SECRET`: A secret used to encrypt the session cookie. You can generate one using `openssl rand -base64 32` - -### 1. Magic Links - -With Magic Links, you can sign in to the Admin Portal without having to enter a password. The app will send you an email with a link to sign in. You'll need **SMTP server credentials** to send emails. - -Configure the following environment variables to enable Magic Links. - -- `SMTP_HOST`: SMTP server host -- `SMTP_PORT`: SMTP server port -- `SMTP_USER`: SMTP server username -- `SMTP_PASSWORD`: SMTP server password -- `SMTP_FROM`: From email address to use when sending Magic Link emails -- `NEXTAUTH_ACL`: An array of emails or glob patterns. Only these users will be allowed access to the Admin Portal. For example: `NEXTAUTH_ACL=tonystark@gmail.com,*@marvel.com` - -Follow the below steps to login into the Admin Portal. - -- Visit the path `/api/auth/signin` on your app. -- Enter the email address that matches the `NEXTAUTH_ACL` and click the button **Send Magic Link**. -- Open the inbox and you'll see an email from SAML Jackson. -- Open that email and click the button **Sign in**. - -### 2. Email and Password - -With Email and Password, you can sign in to the Admin Portal using an email address and password. You can use it as an alternative to Magic Links or SAML Single Sign-On. This is the easiest way to get started with the Admin Portal. - -Configure the environment variable to enable Email and Password authentication. - -- `NEXTAUTH_ADMIN_CREDENTIALS`: A comma separated list of email and password pairs. For example: `david@acme.com:secretpassword,john@acme.com:anotherpassword` - -At the moment, set the password as plain text. We'll add support for encrypted passwords soon. - -Follow the below steps to login into the Admin Portal. - -- Visit the path `/api/auth/signin` on your app. -- Enter the email address and password that matches the `NEXTAUTH_ADMIN_CREDENTIALS` and click the button **Sign In**. - -### 3. SAML/OIDC Single Sign-On - -With SAML/OIDC Single Sign-On, you can sign in to the Admin Portal using your Identity Provider. The app will redirect you to your Identity Provider to sign in. Once you've signed in, you'll be redirected back to the Admin Portal. - -Configure the following environment variables to enable SAML/OIDC Single Sign-On. - -- `ADMIN_PORTAL_SSO_TENANT`: This will be used as the tenant for the SSO connections. Set this to a value that is less likely to conflict with the main Enterprise SSO connections. -- `ADMIN_PORTAL_SSO_PRODUCT`: This will be used as the product for the SSO connections. Set this to a value that is less likely to conflict with the main Enterprise SSO connections. - -If not set, the default values will be used which are `_jackson_boxyhq` and `_jackson_admin_portal`. - -To enable SAML/OIDC Single Sign-On, you'll need to access the Admin Portal using either [Magic Links](#1-magic-links) or [Email and Password](#2-email-and-password). Once you've logged in, you can configure SAML/OIDC Single Sign-On from the Admin Portal. - -Go to **Settings** > **SSO for Admin Portal** and add a new SSO connection. We support both SAML and OIDC protocols. - -Follow the below steps to login into the Admin Portal. - -- Visit the path `/api/auth/signin` on your app. -- Click the button **Login with SSO**. -- You'll be redirected to your SAML Identity Provider to sign in for the authentication and then redirected back to the Admin Portal. diff --git a/docs/admin-portal/setup-links/directory-sync.md b/docs/admin-portal/setup-links/directory-sync.md deleted file mode 100644 index ed03745..0000000 --- a/docs/admin-portal/setup-links/directory-sync.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Setup Link (Directory-Sync) -sidebar_label: Directory Sync -description: Setup Link to create a Directory Sync ---- - -# Setup Link (Directory Sync) - -The Setup link is used to create a shareable link that can be used to create an Directory Sync without exposing any sensitive information. -Let's go through the steps to create a new Setup link - -## Create Setup Link - -You can create a new Setup link for Directory Sync from the Connections page using `New Setup Link` button - -![dsync connections page](/images/product_images/setup-link/dsync/dsync-connections-page.png) - -Another way is to go to the `Setup Links` section under `Directory Sync` menu and Click on Create New/New Setup Link button - -![dsync setup link list empty](/images/product_images/setup-link/dsync/dsync-setup-link-list-empty.png) - -The create Setup Link for Directory Sync page looks like below - -![dsync setup link create page](/images/product_images/setup-link/dsync/dsync-setup-link-create-page.png) - -Once the link is created you can see the the link info section at the bottom - -![setup link created](/images/product_images/setup-link/dsync/setup-link-created.png) - -You can copy the link by clicking on the `Copy` button - -![setup link copied](/images/product_images/setup-link/dsync/setup-link-copied.png) - -### Regenerate Link - -You can regenerate the link by clicking on `Regenerate` button - -![setup link regenerate init](/images/product_images/setup-link/dsync/setup-link-regenerate-init.png) - -Once you confirm Regenerate action you will see the new setup link in the link info section - -![setup link regenerated](/images/product_images/setup-link/dsync/setup-link-regenerated.png) - -### Actions from Setup Link list page - -You can perform `ACTIONS` like `Copy`, `View`, `Regenerate` & `Delete` from this page - -![setup link list page](/images/product_images/setup-link/dsync/setup-link-list-page.png) - -### Setup Link Page - -When you open the setup link you will see the following - -![setup link page dsync](/images/product_images/setup-link/dsync/setup-link-page-dsync.png) - -### Create Directory Sync Connection - -You can open create Directory Sync by clicking on `New Directory` button & filling the correct details - -![dsync setup link created](/images/product_images/setup-link/dsync/dsync-setup-link-created.png) - -After creation of the directory sync you will see the info section - -![dsync created info](/images/product_images/setup-link/dsync/dsync-created-info.png) diff --git a/docs/admin-portal/setup-links/index.md b/docs/admin-portal/setup-links/index.md deleted file mode 100644 index f6b8392..0000000 --- a/docs/admin-portal/setup-links/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Setup Link - -Admin portal can be used to create setup links for - -- [Enterprise SSO](./jackson) -- [Directory-Sync](./directory-sync) - -Setup links can be shared with anyone to let them set up connections for the products. -These links come in handy for admins to facilitate setup by non-admin users without revealing any sensitive information or giving admin access unnecessarily. diff --git a/docs/admin-portal/setup-links/jackson.md b/docs/admin-portal/setup-links/jackson.md deleted file mode 100644 index 2b1af6b..0000000 --- a/docs/admin-portal/setup-links/jackson.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Setup Link (Enterprise SSO) -sidebar_label: Enterprise SSO -description: Setup Link to create a SSO Connection ---- - -# Setup Link (Enterprise SSO) - -The Setup link is used to create a shareable link that can be used to create an SSO Connection without exposing any sensitive information. -Let's go through the steps to create a new Setup link - -## Create Setup Link - -You can create a new Setup link for SSO from the Connections page using `New Setup Link` button - -![connections page](/images/product_images/setup-link/sso/connections-page.png) - -Another way is to go to the `Setup Links` section under `Enterprise SSO` menu and Click on Create New/New Setup Link button - -![setup link list empty](/images/product_images/setup-link/sso/setup-link-list-empty.png) - -The create Setup Link for SSO page looks like below - -![create setup link page](/images/product_images/setup-link/sso/create-setup-link-page.png) - -Once the link is created you can see the the link info section at the bottom - -![link created](/images/product_images/setup-link/sso/link-created.png) - -You can copy the link by clicking on the `Copy` button - -![link copied](/images/product_images/setup-link/sso/link-copied.png) - -### Regenerate Link - -You can regenerate the link by clicking on `Regenerate` button - -![link regenerate](/images/product_images/setup-link/sso/link-regenerate.png) - -Once you confirm Regenerate action you will see the new setup link in the link info section - -![link regenerated](/images/product_images/setup-link/sso/link-regenerated.png) - -### Actions from Setup Link list page - -#### You can perform `ACTIONS` like `Copy`, `View`, `Regenerate` & `Delete` from this page - -Regenerate - -![link regenerate from list](/images/product_images/setup-link/sso/link-regenerate-from-list.png) - -Delete - -![link delete](/images/product_images/setup-link/sso/link-delete.png) - -### Setup Link page - -When you open the setup link you will be landed on SSO Connection create section as there are no connections to show - -![setup link sso setup](/images/product_images/setup-link/sso/setup-link-sso-setup.png) - -### Create SSO Connection with Setup Link - -You can create SSO Connection by filling the correct details - -![setup link sso oidc](/images/product_images/setup-link/sso/setup-link-sso-oidc.png) - -As you can see that setup link makes it super easy & safe to create SSO Connections. diff --git a/docs/directory-sync/api-reference.md b/docs/directory-sync/api-reference.md deleted file mode 100644 index 29c2228..0000000 --- a/docs/directory-sync/api-reference.md +++ /dev/null @@ -1,648 +0,0 @@ ---- -title: Directory Sync API Reference -sidebar_label: API Reference ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# API Reference - -The following guides provide information about the APIs and SDKs that are available for the Directory Sync service. - -### Directory - -#### Properties - -- `name`: The name of the directory -- `tenant`: The tenant ID of the tenant you want to create the directory for. -- `product`: The product ID of the product you want to create the directory for. -- `type`: The directory provider type. See the [Directory Providers](./providers) for more information. -- `webhook_url`: The webhook URL to which the directory connection will POST the events. -- `webhook_secret`: The webhook secret used to sign the webhook payload. - -:::info -The `tenant` and `product` should not contain the `:` character since we use it as a delimiter internally. -::: - -### Initialize Directory Sync - -```javascript -const opts = { - externalUrl: 'https://my-cool-app.com', - db: { - engine: 'mongo', - url: 'mongodb://localhost:27017/my-cool-app', - }, -}; - -let directorySyncController; - -// Please note that the initialization of @boxyhq/saml-jackson is async, you cannot run it at the top level. -async function init() { - const jackson = await require('@boxyhq/saml-jackson').controllers(opts); - - directorySyncController = jackson.directorySyncController; -} -``` - -### Create a new directory - -Create a new directory connection. - -#### Request - - - - -```javascript showLineNumbers -const { data, error } = await directorySyncController.directories.create({ - name: 'App', - tenant: 'boxyhq', - product: 'jackson', - type: 'onelogin-scim-v2', - webhook_url: 'https://my-cool-app.com/webhook', - webhook_secret: 'my-secret', -}); -``` - - - - -```bash -curl --request POST \ - --url http://localhost:5225/api/v1/directory-sync \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' \ - --data '{ - "name": "App", - "tenant": "boxyhq", - "product": "jackson", - "type": "onelogin-scim-v2", - "webhook_url": "https://my-cool-app.com/webhook", - "webhook_secret": "my-secret" -}' -``` - - - - -#### Response - -```javascript -{ - "data": { - "id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "name": "App", - "tenant": "boxyhq", - "product": "jackson", - "type": "onelogin-scim-v2", - "log_webhook_events": false, - "scim": { - "path": "/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "secret": "IJzAoevjD_liiiy-VkDtXg", - "endpoint": "http://localhost:5225/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016" - }, - "webhook": { - "endpoint": "https://my-cool-app.com/webhook", - "secret": "my-secret" - } - }, - "error": null -} -``` - ---- - -### Get directories - -Get the list of directories for the given tenant and product. A tenant can have multiple directories for same or different products. - -#### Request - - - - -```javascript showLineNumbers -const tenant = 'boxyhq'; -const product = 'jackson'; - -const { data, error } = - await directorySyncController.directories.getByTenantAndProduct( - tenant, - product - ); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync?tenant=boxyhq&product=jackson' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": [ - { - "id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "name": "App", - "tenant": "boxyhq", - "product": "jackson", - "type": "onelogin-scim-v2", - "log_webhook_events": false, - "scim": { - "path": "/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "secret": "IJzAoevjD_liiiy-VkDtXg", - "endpoint": "http://localhost:5225/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016" - }, - "webhook": { - "endpoint": "https://my-cool-app.com/webhook", - "secret": "my-secret" - } - } - ], - "error": null -} -``` - ---- - -### Get a directory - -Get the details of a directory by its unique id. - -#### Request - - - - -```javascript showLineNumbers -const directoryId = '58b5cd9dfaa39d47eb8f5f88631f9a629a232016'; - -const { data, error } = await directorySyncController.directories.get( - directoryId -); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync/58b5cd9dfaa39d47eb8f5f88631f9a629a232016' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": { - "id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "name": "App", - "tenant": "boxyhq", - "product": "jackson", - "type": "onelogin-scim-v2", - "log_webhook_events": false, - "scim": { - "path": "/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "secret": "IJzAoevjD_liiiy-VkDtXg", - "endpoint": "http://localhost:5225/api/scim/v2.0/58b5cd9dfaa39d47eb8f5f88631f9a629a232016" - }, - "webhook": { - "endpoint": "https://my-cool-app.com/webhook", - "secret": "my-secret" - } - }, - "error": null -} -``` - ---- - -### List directory users - -List all the users in a directory. - -#### Request - - - - -```javascript showLineNumbers -const tenant = 'boxyhq'; -const product = 'jackson'; - -const { data, error } = await directorySyncController.users - .setTenantAndProduct(tenant, product) - .getAll(); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync/users?tenant=boxyhq&product=jackson' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": [ - { - "id": "6296f71e-15fd-4af4-86ee-d6623b3ef1a4", - "first_name": "Aswin", - "last_name": "Venugopal", - "email": "aswin@boxyhq.com", - "active": true, - "raw": { - "schemas": [ - "urn:ietf:params:scim:schemas:core:2.0:User" - ], - "userName": "aswin@boxyhq.com", - "name": { - "givenName": "Aswin", - "familyName": "Venugopal", - "honorificPrefix": "Sir" - }, - "emails": [ - { - "primary": true, - "value": "aswin@boxyhq.com", - "type": "work" - } - ], - "displayName": "Aswin Venugopal", - "addresses": [ - { - "primary": true, - "postalCode": "123" - } - ], - "locale": "en-US", - "externalId": "00u34iw1hm16RmjS95d7", - "groups": [], - "active": true, - "id": "6296f71e-15fd-4af4-86ee-d6623b3ef1a4" - } - }, - { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": true, - "raw": { - "schemas": [ - "urn:ietf:params:scim:schemas:core:2.0:User" - ], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "groups": [], - "active": true, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92" - } - } - ], - "error": null -} -``` - ---- - -### Get a directory user - -Get the details of a directory user. - -#### Request - - - - -```javascript showLineNumbers -const tenant = 'boxyhq'; -const product = 'flex'; -const userId = 'ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92'; - -const users = await directorySyncController.users - .setTenantAndProduct(tenant, product) - .get(userId); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync/users/ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92?tenant=boxyhq&product=jackson' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": true, - "raw": { - "schemas": [ - "urn:ietf:params:scim:schemas:core:2.0:User" - ], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "groups": [], - "active": true, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92" - } - }, - "error": null -} -``` - ---- - -### List directory groups - -List all the groups in a directory. - -#### Request - - - - -```javascript showLineNumbers -const tenant = 'boxyhq'; -const product = 'jackson'; - -const users = await directorySyncController.groups - .setTenantAndProduct(tenant, product) - .getAll(); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync/groups?tenant=boxyhq&product=jackson' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": [ - { - "id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5", - "name": "Developers", - "raw": { - "schemas": [ - "urn:ietf:params:scim:schemas:core:2.0:Group" - ], - "displayName": "Developers", - "members": [ - { - "value": "6296f71e-15fd-4af4-86ee-d6623b3ef1a4", - "display": "aswin@boxyhq.com" - }, - { - "value": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "display": "kiran@boxyhq.com" - } - ], - "id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5" - } - } - ], - "error": null -} -``` - ---- - -### Get a directory group - -Get the details of a directory group. - -#### Request - - - - -```javascript showLineNumbers -const tenant = 'boxyhq'; -const product = 'jackson'; -const groupId = '44d08c0e-d185-4a5e-80a6-b47a717ffaa5'; - -const users = await directorySyncController.groups - .setTenantAndProduct(tenant, product) - .get(groupId); -``` - - - - -```bash -curl --request GET \ - --url 'http://localhost:5225/api/v1/directory-sync/groups/44d08c0e-d185-4a5e-80a6-b47a717ffaa5?tenant=boxyhq&product=jackson' \ - --header 'Authorization: Api-Key secret' \ - --header 'Content-Type: application/json' -``` - - - - -#### Response - -```javascript -{ - "data": { - "id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5", - "name": "Developers", - "raw": { - "schemas": [ - "urn:ietf:params:scim:schemas:core:2.0:Group" - ], - "displayName": "Developers", - "members": [ - { - "value": "6296f71e-15fd-4af4-86ee-d6623b3ef1a4", - "display": "aswin@boxyhq.com" - }, - { - "value": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "display": "kiran@boxyhq.com" - } - ], - "id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5" - }, - "members": [ - { - "group_id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5", - "user_id": "6296f71e-15fd-4af4-86ee-d6623b3ef1a4" - }, - { - "group_id": "44d08c0e-d185-4a5e-80a6-b47a717ffaa5", - "user_id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92" - } - ] - }, - "error": null -} -``` - ---- - -### Handle the Requests from Identity Providers - -Make sure your application can handle the requests from Identity Providers. - -#### Routes - -Typically, you will want to add the following routes to your application to handle the requests. However, the `Methods` can vary for some Identity Providers. - -| Route | Methods | Event | -| ----------- | ---------- | ---------------------------------------------- | -| /Users | POST | A new user has been assigned to a SCIM app | -| /Users/:id | PUT, PATCH | A user information has been updated | -| /Users/:id | DELETE | A user has been removed from a SCIM app | -| /Groups | POST | A new group has been pushed | -| /Groups/:id | PUT | Group name has been changed | -| /Groups/:id | PATCH | User has been added to or removed from a group | -| /Groups/:id | DELETE | Group has been removed | - -#### User Requests - -```javascript showLineNumbers -const { data, status } = await directorySyncController.requests.handle(request); -``` - -The shape of the `request` should be as follows: - -```javascript -{ - method: HTTPMethod; - body?: any; - directoryId: string; - resourceId: string; - resourceType: "users", - apiSecret: string; - query: { - count?: number; - startIndex?: number; - filter?: string; - }; -}; -``` - -#### Group Requests - -Handling the group requests is similar to handling the user requests. - -```javascript showLineNumbers -const { data, status } = await directorySyncController.requests.handle(request); -``` - -The shape of the `request` should be as follows: - -```javascript -{ - method: HTTPMethod; - body?: any; - directoryId: string; - resourceId: string; - resourceType: "groups", - apiSecret: string; - query: { - count?: number; - startIndex?: number; - filter?: string; - }; -}; -``` - -#### Callback Function - -You can optionally pass a callback function as a second parameter to the handle method `requests.handle`. Jackson will invoke the callback with the event object as the first argument after handling the request. You can use the event object to determine the action to take. - -```javascript showLineNumbers -const callback = (event: DirectorySyncEvent) => { - console.log(event); -}; - -const { data, status } = await directorySyncController.requests.handle( - request, - callback -); -``` diff --git a/docs/directory-sync/events.md b/docs/directory-sync/events.md deleted file mode 100644 index 52c7f44..0000000 --- a/docs/directory-sync/events.md +++ /dev/null @@ -1,476 +0,0 @@ ---- -title: Directory Sync Webhook Events -sidebar_label: Events ---- - -# Events - -SAML Jackson uses webhooks to notify your application any time changes are made to directory, users, groups, and memberships. - -## User Events - -We'll notify you of the following 3 events related to users. Each event will be sent to the webhook URL you've configured in the Directory Sync app. - -
- user.created - New user has been assigned to the app. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "user.created", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "038e767b-9bc6-4dbd-975e-fbc38a8e7d82", - "first_name": "Deepak", - "last_name": "Prabhakara", - "email": "deepak@boxyhq.com", - "active": true, - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], - "userName": "deepak@boxyhq.com", - "name": { - "givenName": "Deepak", - "familyName": "Prabhakara" - }, - "emails": [ - { - "primary": true, - "value": "deepak@boxyhq.com", - "type": "work" - } - ], - "title": "CEO", - "displayName": "Deepak Prabhakara", - "locale": "en-US", - "externalId": "00u1ldzzogFkXFmvT5d7", - "groups": [], - "active": true, - "id": "038e767b-9bc6-4dbd-975e-fbc38a8e7d82" - } - } -} -``` - -

- -
- -
- user.updated - A user's properties has been updated. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "user.updated", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": true, - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "active": true, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "groups": [] - } - } -} -``` - -

-
- -
- user.deleted - A user has been removed from the Directory Provider. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "user.deleted", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": false, - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "active": false, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "groups": [] - } - } -} -``` - -

-
- -## Group Events - -We'll notify you of the following 5 events related to groups and memberships. Each event will be sent to the webhook URL you've configured in the Directory Sync app. - -
- group.created - New group has been added to the app. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "group.created", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6", - "name": "dev", - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], - "displayName": "dev", - "members": [], - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6" - } - } -} -``` - -

-
- -
- group.updated - A group's properties has been updated. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "group.updated", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6", - "name": "developers", - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], - "displayName": "developers", - "members": [], - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6" - } - } -} -``` - -

-
- -
- group.deleted - A group has been removed from the app. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "group.deleted", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6", - "name": "developers", - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], - "displayName": "developers", - "members": [], - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6" - } - } -} -``` - -

-
- -
- group.user_added - A user has been added to a directory group. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "group.user_added", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": true, - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "active": true, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "title": "Developer", - "groups": [] - }, - "group": { - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6", - "name": "developers", - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], - "displayName": "developers", - "members": [], - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6" - } - } - } -} -``` - -

-
- -
- group.user_removed - A user has been removed from a directory group. -

- -```json -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "group.user_removed", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "first_name": "Kiran", - "last_name": "Krishnan", - "email": "kiran@boxyhq.com", - "active": true, - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], - "userName": "kiran@boxyhq.com", - "name": { - "givenName": "Kiran", - "familyName": "Krishnan" - }, - "emails": [ - { - "primary": true, - "value": "kiran@boxyhq.com", - "type": "work" - } - ], - "displayName": "Kiran Krishnan", - "addresses": [ - { - "primary": true, - "region": "Kerala" - } - ], - "locale": "en-US", - "externalId": "00u3e3cmpdDydXdzV5d7", - "active": true, - "id": "ebc31d6e-7d62-4f81-b9e5-eb5f1a04ee92", - "title": "Developer", - "groups": [] - }, - "group": { - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6", - "name": "developers", - "raw": { - "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], - "displayName": "developers", - "members": [], - "id": "29e3adde-b4bb-45fc-bf65-2b44f29fd6f6" - } - } - } -} -``` - -

-
- -## Directory Events - -We'll notify you of the following 4 events related to the directory connections. - -To configure the webhook, you have to set the following environment variables. - -- `WEBHOOK_URL` - The URL to which the webhook events will be sent. -- `WEBHOOK_SECRET` - The secret key used to sign the webhook events. - -
- - dsync.created - New connection has been created. - -

- -```json -{ - "event": "dsync.created", - "tenant": "boxyhq", - "product": "demo", - "data": { - "id": "d8aa6c93-c960-4925-9b31-4a4d2ad3bb44", - "name": "Okta Directory", - "type": "okta-scim-v2" - } -} -``` - -

-
- -
- - dsync.deactivated - A connection has been deactivated. - -

- -```json -{ - "event": "dsync.deactivated", - "tenant": "boxyhq", - "product": "demo", - "data": { - "id": "d8aa6c93-c960-4925-9b31-4a4d2ad3bb44", - "name": "Okta Directory", - "type": "okta-scim-v2" - } -} -``` - -

-
- -
- - dsync.activated - A connection has been activated. - -

- -```json -{ - "event": "dsync.activated", - "tenant": "boxyhq", - "product": "demo", - "data": { - "id": "d8aa6c93-c960-4925-9b31-4a4d2ad3bb44", - "name": "Okta Directory", - "type": "okta-scim-v2" - } -} -``` - -

-
- -
- - dsync.deleted - A connection has been deleted. - -

- -```json -{ - "event": "dsync.deleted", - "tenant": "boxyhq", - "product": "demo", - "data": { - "id": "d8aa6c93-c960-4925-9b31-4a4d2ad3bb44", - "name": "Okta Directory", - "type": "okta-scim-v2" - } -} -``` - -

-
- -## Frequently Asked Questions - -### How to determine whether a user has been deleted if the Identity Provider does not send a webhook event for user deletion? - -To receive notifications when a user is deleted, it's important to note that not all Identity Providers send requests for this. However, you can listen for the `user.updated` event from SAML Jackson and examine the `active` property to determine whether a user has been deleted. In case the user is deleted, the `active` property will be assigned the value `false`. - -### Which Identity Providers do not send an event for user deletion? - -Following Identity Providers do not send `user.deleted` event: - -- Okta -- Azure AD - -### Which SCIM version does SAML Jackson support? - -At the moment, SAML Jackson supports SCIM version 2.0. diff --git a/docs/directory-sync/examples.md b/docs/directory-sync/examples.md deleted file mode 100644 index 584371a..0000000 --- a/docs/directory-sync/examples.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Examples & Resources (Directory Sync) -sidebar_label: Examples & Resources -description: Examples & Resources for our Directory Sync product ---- - -# Examples & Resources (Directory Sync) - -## Examples - -- [Directory Sync with Next.js](https://github.com/boxyhq/jackson-examples/tree/main/apps/directory-sync) -- [Directory Sync (embedded as a library) with Next.js](https://github.com/boxyhq/jackson-examples/tree/main/apps/directory-sync-embedded) - -## Resources - -- [SCIM 2.0 Protocol](https://datatracker.ietf.org/doc/html/rfc7644) diff --git a/docs/directory-sync/getting-started.md b/docs/directory-sync/getting-started.md deleted file mode 100644 index fdf74ee..0000000 --- a/docs/directory-sync/getting-started.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Getting Started -sidebar_label: Getting Started ---- - -There are two ways to integrate the Directory Sync within your application. - -## As a service - -The advantage of running a separate service is that you get all of our UI tooling (like the Admin Portal) with the service. The disadvantage is that you have to manage the operations of a separate service. - -**If you are not using Node.js then this is the only option available to you.** - -Read more about [how to run the Jackson service](/docs/jackson/deploy/service) - -Jackson use webhooks to notify your application any time changes are made to directory users and groups. You can use webhooks to trigger actions in your application, such as creating a new user in your application, or updating a user in your application based on the changes made in the directory. - -## As an NPM library - -This is available if you are already developing your application using Node.js. - -The advantage of embedding Jackson as an NPM library is that you do not have to manage operations of a separate service. -The disadvantage is that you do not readily get our UI tooling (like the Admin Portal) with this method. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -See the [API Reference](/docs/directory-sync/api-reference) to understand more about the available methods. diff --git a/docs/directory-sync/overview.md b/docs/directory-sync/overview.md deleted file mode 100644 index 19db417..0000000 --- a/docs/directory-sync/overview.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Directory Sync Docs ---- - -# Directory Sync - -Directory sync helps organizations automate the provisioning and de-provisioning of their users. It is based on the System for Cross-domain Identity Management (SCIM) protocol. - -As a result, it streamlines the user lifecycle management process by saving valuable organizational hours, creating a single truth source of the user identity data, and facilitating them to keep the data secure. - -Directory Sync is part of our SAML Jackson service (and npm library) from v1.2.1 onwards. Follow the instructions in [SAML Jackson](../jackson/deploy/index.md) for details on deployment. Or check out our [GitHub repo](https://github.com/boxyhq/jackson#directory-sync). - -We currently only support SCIM 2.0 protocol because SCIM 1.1 is deprecated and support will be discontinued on December 2nd, 2022. If you still need support for SCIM 1.1 and are unable to move away from it then please contact us. - -![Directory Sync Flow](/img/dsync/directory-sync-flow.png) - -## Overview - -- [API Reference](api-reference) -- [Admin Portal](../admin-portal/directory-sync) -- [Webhook](webhooks) -- [Events and Types](events) -- [Directory Sync Providers](providers) diff --git a/docs/directory-sync/providers/azure.md b/docs/directory-sync/providers/azure.md deleted file mode 100644 index ec5070e..0000000 --- a/docs/directory-sync/providers/azure.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Azure AD SCIM v2.0 -sidebar_label: Azure SCIM v2.0 ---- - -# Azure AD SCIM v2.0 - -The following guide will walk you through the process of configuring SAML Jackson to use the Azure AD SCIM v2.0 directory provider. - ---- - -### Create Azure Application - -Click **Azure Active Directory** from the Microsoft Azure Portal. - -![img alt](/img/dsync/providers/azure/1.png) - -Click **Enterprise Applications** from the left navigation menu. - -![img alt](/img/dsync/providers/azure/2.png) - -If your application is already created, choose it from the list and move to the section [Enable SCIM Provisioning](#enable-azure-scim-provisioning) - -If you haven't created your application yet, click **New application** button. - -![img alt](/img/dsync/providers/azure/9.png) - -From the next screen, click **Create your own application**, give your application a **name** and click the **Create** button. - -![img alt](/img/dsync/providers/azure/3.png) - ---- - -### Enable Azure SCIM Provisioning - -Click **Provisioning** from the left navigation menu then click **Get started**. - -![img alt](/img/dsync/providers/azure/4.png) - -Select **Automatic** from the **Provisioning Mode** dropdown and enter the following information under **Admin Credentials** section: - -- Tenant URL -- Secret Token - -Next, click the **Test Connection** button to test the connection to see if the credentials are correct, then click **Save** to save the credentials. - -![img alt](/img/dsync/providers/azure/5.png) - -Expand the **Mappings** section and ensure group and user attribute mappings are enabled for your app. The default mapping should work. - -![img alt](/img/dsync/providers/azure/7.png) - -Expand the **Settings** section and make the following changes: - -- Select **Sync only assigned users and groups** from the **Scope** dropdown. -- Confirm the **Provisioning Status** is set to **On**. - -![img alt](/img/dsync/providers/azure/8.png) - -At this stage, you've successfully configured the Azure AD SCIM API integration. - ---- - -### Assign Users - -From your application, click the **Users and groups** from the left navigation menu and click **Add user/group**. - -![img alt](/img/dsync/providers/azure/11.png) - -Select **None Selected** under the **Users**. - -From the right side of the screen, select the users you want to assign to the app and click the **Select** button, then click **Assign** to those users to the app. - -![img alt](/img/dsync/providers/azure/12.png) diff --git a/docs/directory-sync/providers/index.md b/docs/directory-sync/providers/index.md deleted file mode 100644 index 29f4cdf..0000000 --- a/docs/directory-sync/providers/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Providers - -SAML Jackson supports the following directory providers: - -- [Azure SCIM v2.0](./azure) -- [OneLogin SCIM v2.0](./onelogin) -- [Okta SCIM v2.0](./okta) -- [JumpCloud SCIM v2.0](./jumpcloud) diff --git a/docs/directory-sync/providers/jumpcloud.md b/docs/directory-sync/providers/jumpcloud.md deleted file mode 100644 index 730c05a..0000000 --- a/docs/directory-sync/providers/jumpcloud.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: JumpCloud SCIM v2.0 -sidebar_label: JumpCloud SCIM v2.0 ---- - -# JumpCloud SCIM v2.0 - -The following guide will walk you through the process of configuring SAML Jackson to use the JumpCloud SCIM v2.0 directory provider. - ---- - -### Create JumpCloud SAML Application - -JumpCloud only support configuring SCIM provisioning in an existing SAML application. - -Choose an existing SAML application or create a new one. Click **SSO** from the left navigation menu and select your custom SAML application. - -![img alt](/img/dsync/providers/jumpcloud/1.png) - -Click the tab **Identity Management** within your SAML application. - -Unde the **SCIM Version**, choose **SCIM 2.0** and enter the following information: - -- Base URL -- Token Key -- Test User Email - -Click **Test Connection** to test the connection to see if the credentials are correct then click **Activate**. - -Next click **Save** to save the settings. - -![img alt](/img/dsync/providers/jumpcloud/2.png) - -At this stage, you've successfully configured the JumpCloud SCIM app. - ---- - -### Assign Users & Push Groups - -![img alt](/img/dsync/providers/jumpcloud/3.png) - -Click the tab **User Groups** within your SAML application. - -You can see the all the groups that are available, select the groups you want to sync and click **Save**. - -If no existing groups are available, click **User Groups** from the left navigation menu and click plus icon to create a new group. - -Give the group a name. - -![img alt](/img/dsync/providers/jumpcloud/4.png) - -Select the **Users** tab and choose the users you want to assign to the group. - -![img alt](/img/dsync/providers/jumpcloud/5.png) - -Next select the **Applications** tab and choose the app you want to assign the group to. - -![img alt](/img/dsync/providers/jumpcloud/6.png) - -At this stage, you've successfully assigned users and pushed the groups. diff --git a/docs/directory-sync/providers/okta.md b/docs/directory-sync/providers/okta.md deleted file mode 100644 index 0e3e62a..0000000 --- a/docs/directory-sync/providers/okta.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Okta SCIM v2.0 -sidebar_label: Okta SCIM v2.0 ---- - -# Okta SCIM v2.0 - -The following guide will walk you through the process of configuring SAML Jackson to use the Okta as a directory sync provider. - ---- - -### Create Okta Application - -Click **Applications** from the left navigation menu and click **Browse App Catalog** button. - -![img alt](/img/dsync/providers/okta/1.png) - -Search for **SCIM 2.0 Test App (Oauth Bearer Token)** from the search box and choose the app called **SCIM 2.0 Test App (Oauth Bearer Token)**. - -![img alt](/img/dsync/providers/okta/2.png) - -From the app page, click the **Add Integration** button. - -![img alt](/img/dsync/providers/okta/3.png) - -Give the app a name and click the **Next** button. Click **Done** to finish the creation of the app. - -![img alt](/img/dsync/providers/okta/4.png) - ---- - -### Enable Okta SCIM Provisioning - -In your application, click the **Provisioning** tab and click **Configure API Integration**. - -![img alt](/img/dsync/providers/okta/5.png) - -Check the **Enable API Integration** checkbox and enter the following information: - -- SCIM 2.0 Base URL -- OAuth Bearer Token - -You'll receive these information from Jackson when you create the directory sync connection either via the API or the Admin Portal. - -Click **Test API Creditentials** to test the connection to see if the credentials are correct then click the **Save** to save the credentials. - -![img alt](/img/dsync/providers/okta/6.png) - -You'll see a new setting page, click **To App** and enable the following settings: - -![img alt](/img/dsync/providers/okta/7.png) - -At this stage, you've successfully configured the Okta SCIM API integration. - ---- - -### Assign Users - -In your application, click the **Assignments** tab and select **Assign to People** from the dropdown **Assign**. - -![img alt](/img/dsync/providers/okta/8.png) - -Select users you want to assign to the app and click the **Assign** button. - -![img alt](/img/dsync/providers/okta/9.png) - -After you click the **Assign** button, you'll see a new popup window with various fields. Confirm the field values and click the **Save and Go Back** button. - -![img alt](/img/dsync/providers/okta/10.png) - ---- - -### Push Groups - -Navigate to the tab **Push Groups** and select **Find group by name** from the dropdown **Push Groups**. - -![img alt](/img/dsync/providers/okta/11.png) - -Find the group you want to assign to the app and click the **Save** button. - -![img alt](/img/dsync/providers/okta/12.png) diff --git a/docs/directory-sync/providers/onelogin.md b/docs/directory-sync/providers/onelogin.md deleted file mode 100644 index d6250b8..0000000 --- a/docs/directory-sync/providers/onelogin.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: OneLogin SCIM v2.0 -sidebar_label: OneLogin SCIM v2.0 ---- - -# OneLogin SCIM v2.0 - -The following guide will walk you through the process of configuring SAML Jackson to use the OneLogin SCIM v2.0 directory provider. - ---- - -### Create OneLogin Application - -Click **Applications** from the top navigation menu and click **Add App** button. - -![img alt](/img/dsync/providers/onelogin/1.png) - -Search for **SCIM** from the search box and choose the app called **SCIM Provisioner with SAML (SCIM V2 Enterprise)** from the list of apps. - -![img alt](/img/dsync/providers/onelogin/2.png) - -Give the app a name and click the **Save** button. - -![img alt](/img/dsync/providers/onelogin/3.png) - -At this stage, you've successfully created the OneLogin SCIM app. - ---- - -### Enable OneLogin SCIM Provisioning - -In your application, click the **Configuration** tab on the left. - -Enter the following information: - -- SCIM Base URL -- SCIM Bearer Token - -You'll receive these information from Jackson when you create the directory sync connection either via the API or the Admin Portal. - -Click the button **Enable** to test the connection to see if the credentials are correct and click the button to **Save** to save the creditentials. - -![img alt](/img/dsync/providers/onelogin/4.png) - -Next click the **Provisioning** tab and check the **Enable provisioning** checkbox. Click the **Save** button to save the changes. - -![img alt](/img/dsync/providers/onelogin/5.png) - -Next click the **Parameters** tab and select the row **Groups** from the table. - -![img alt](/img/dsync/providers/onelogin/6.png) - -In the popup window, check the box **Include in User Provisioning** and click the **Save** button. - -![img alt](/img/dsync/providers/onelogin/7.png) - ---- - -### Assign Users - -In order to assign users to your app, select **Users** from the top navigation menu and choose the user you want to assign to the app. - -From the user page, click the **Application** tab on the left and click the plus sign. - -![img alt](/img/dsync/providers/onelogin/8.png) - -A popup window will show you the list of apps that you can assign the user to. Select the app you created earlier and click the **Continue** button. - -![img alt](/img/dsync/providers/onelogin/9.png) - -Click **Save** on the next modal window to confirm the assignment. - -![img alt](/img/dsync/providers/onelogin/10.png) - -Depending on your configuration, You may have to approve the assignment. - -If you see a text **Pending** in the table, click that text. That'll bring up a modal window, click the button **Approve** to approve the assignment. - -![img alt](/img/dsync/providers/onelogin/11.png) - -At this point, the user will be assigned to the app. - ---- - -### Push Groups - -In order to push groups to your app, you've to create a new **Role** in your app. - -In the top navigation, select **Users** and then **Roles** from the dropdown. - -Click **New Role** to create a new role. - -![img alt](/img/dsync/providers/onelogin/12.png) - -Enter a name for the role, select the app you created earlier and click the **Save** button. - -![img alt](/img/dsync/providers/onelogin/13.png) - -Click the **Users** tab for the role and search for the user you want to assign the role to. - -Click the button **Add To Role** to assign the user to the role and click the **Save** button. - -![img alt](/img/dsync/providers/onelogin/14.png) - -Click **Save** in the next modal to confirm the assignment. - -![img alt](/img/dsync/providers/onelogin/15.png) - -Go back to your app and click the **Rule** tab on the left and click the **Add Rule** button. - -Give the rule a name. Under the **Actions**, select the **Set Groups in your-app-name** from the dropdown, then select for each **role** with values that matches **your-app-name**. Click the **Save** button. - -![img alt](/img/dsync/providers/onelogin/16.png) - -Click the **Users** tab on the left, you may see **Pending** provisions in the table. Click that text to approve the assignment. - -![img alt](/img/dsync/providers/onelogin/17.png) - -Click **Approve** in the next modal to confirm the assignment. - -![img alt](/img/dsync/providers/onelogin/18.png) diff --git a/docs/directory-sync/webhooks.md b/docs/directory-sync/webhooks.md deleted file mode 100644 index 6accb32..0000000 --- a/docs/directory-sync/webhooks.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Directory Sync Webhooks -sidebar_label: Webhooks ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Webhooks - -A webhook is an HTTP request, triggered by an event in a source system and sent to a destination system (Eg: your app), often with a payload of data. - -SAML Jackson use webhooks to notify your application any time changes are made to directory users and groups. You can use webhooks to trigger actions in your application, such as creating a new user in your application, or updating a user in your application based on the changes made in the directory. - -## Configure Webhooks - -SAML Jackson allows you to configure a webhook and secret while creating a directory sync connection either in the Admin Portal or the API. You can change the webhook and secret at any time. - -- [Admin Portal](../admin-portal/directory-sync) -- [API Reference](api-reference#create-a-new-directory) - -## Receive Events - -SAML Jackson will make a POST request to your webhook endpoint when a change is made to a directory user or group. Your webhook endpoint should be able to receive the webhook request and respond with a 200 status code. - -You can start receiving events in your app using the below steps: - -- Create a webhook endpoint as an HTTP endpoint (URL) on your server. -- Create a directory sync connection and configure a webhook endpoint. -- Configure the SCIM app on your Identity Provider. -- Handle the webhook request and respond with a 200 status code. - -To see the full list of events, please see the [Events and Types](events) page. - -Here is a sample webhook request look like: - -```json -POST /your-webhook-endpoint -Content-Type: application/json -BoxyHQ-Signature: t=xxx,s=xxxx - -{ - "directory_id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "event": "user.created", - "tenant": "boxyhq", - "product": "jackson", - "data": { - "id": "038e767b-9bc6-4dbd-975e-fbc38a8e7d82", - "first_name": "Deepak", - "last_name": "Prabhakara", - "email": "deepak@boxyhq.com", - "active": true, - "raw": {...} - } -} -``` - -:::caution -If the webhook request fails, SAML Jackson will not retry the webhook request. A log will be created in the SAML Jackson Admin Portal if the you've enabled the webhook event logging. -::: - -## Secure Webhooks - -Use the webhook signature (**BoxyHQ-Signature**) to verify the webhook request is from SAML Jackson. The signature is generated using the **webhook secret** you configured in the directory sync connection. - -Signature contains comma separated values of the following: - -- **t** The timestamp of the webhook request. -- **s** The signature of the webhook request. - -An example of the webhook signature is below: - -``` -BoxyHQ-Signature: t=1545010989801,s=xxxx -``` - -## Verify Webhooks Signature - -You can verify the webhook signature by using the following steps: - -- Extract the **t** and **s** values from the webhook signature. -- Create the signed payload string by concatenating: - - The timestamp (t) - - The character `.` - - The actual JSON payload -- Compute the `HMAC-SHA256` hash of the signed payload string using your webhook secret. -- Compare the signature in the request header with the computed signature. - -Once the signature is verified, you can use the webhook payload to perform any action in your application. - -```javascript showLineNumbers -// Your webhook secret -const secret = 'your-secret-here'; - -// The signature header from the webhook request. -const signatureHeader = - 't=1657016083300,s=9ece981128a8f2a96f95e3d0be68c37b825d5c15f5b8982e0b7e198a76621866'; - -// JSON body from the webhook request. -const body = {...} - -const [t, s] = signatureHeader.split(','); - -const signature = t.split('=')[1]; -const timestamp = s.split('=')[1]; - -const signedPayload = `${timestamp}.${JSON.stringify(body)}`; - -const expectedSignature = crypto - .createHmac('sha256', secret) - .update(signedPayload) - .digest('hex'); - -// Compare the expectedSignature to the signature -if(signature === expectedSignature) { - // The webhook request is valid -} else { - // The webhook request is invalid -} -``` diff --git a/docs/index.mdx b/docs/index.mdx deleted file mode 100644 index 73d5aa1..0000000 --- a/docs/index.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Docs -description: Check out our documentation to see how you can deploy our enterprise-ready solutions into your application with ease. Check out our SAML Jackson for Single sign-on. -hide_table_of_contents: true ---- - -import Link from '@docusaurus/Link'; - -Security Building Blocks for Developers - -Reduce Time to Market without sacrificing your security posture! BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster. Integrate Single Sign-On (SSO), Audit Logs, Privacy Vault and Role Based Access in minutes. Open source and free. - -
-
-
- -
-

Enterprise SSO

-

- A SAML/OIDC SSO service designed as an OAuth 2.0 flow. Integrate SSO - with just a few lines of code. -

-
- -
-
- -
-

Directory Sync

-

- Directory sync helps organizations automate the provisioning and - de-provisioning of their users. It is based on the SCIM 2.0 - protocol. -

-
- -
-
-
-
- -
-

Audit Logs

-

- Retraced is the easiest way to integrate a compliant audit log into - your application. It provides a searchable, exportable record of - read/write events. -

-
- -
-
- -
-

Admin Portal

-

- Manage our Enterprise SSO and Directory Sync products via an easy to - use web interface -

-
- -
-
-
diff --git a/docs/intro.md b/docs/intro.md new file mode 100644 index 0000000..5089392 --- /dev/null +++ b/docs/intro.md @@ -0,0 +1,74 @@ +--- +sidebar_label: "介绍" +label: "介绍" +sidebar_position: 1 +slug: / +--- + +# 关于GitLink +GitLink(确实开源)是CCF官方指定的开源创新服务平台,旨在以“为开源创新服务”为使命,以“成为开源创新的汇聚地”为愿景,秉承“创新、开放、协作、共享”的价值观,致力于为大规模开源开放协同创新助力赋能,打造创新成果孵化和新工科人才培养的开源创新生态! + + ![](/img/ccf_gitlink.png) + +# 平台功能 + +- **分布式协作开发**:支持在线文件编辑、分支管理、贡献统计、仓库复刻、合并请求; +- **一站式过程管理**:支持疑修、里程碑、通知提醒、标签归档、Wiki文档、组织管理; +- **高效流水线运维**:提供轻量级工作流引擎,并支持自定义配置、静态扫描、制品构建; +- **多层次代码分析**:支持代码溯源分析、许可证风险分析、开源漏洞检测和加固建议; +- **多维度用户画像**:支持开发活动统计、贡献日历、能力建模、角色与专业定位分析。 + +# 帮助文档 +帮助文档有助于您全面了解GitLink平台,让我们一起为开源创新贡献力量! + + \ No newline at end of file diff --git a/docs/jackson/container-signing.md b/docs/jackson/container-signing.md deleted file mode 100644 index ff1801b..0000000 --- a/docs/jackson/container-signing.md +++ /dev/null @@ -1,21 +0,0 @@ -# Container Signing and Verification - -Jackson container images are signed and can be verified using [cosign](https://github.com/sigstore/cosign). - -## Fetching our public key - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to fetch our public key or download it from our website [here](https://boxyhq.com/.well-known/cosign.pub). - -```bash -oras pull ghcr.io/boxyhq/cosign.pub:latest -``` - -## Container verification - -**Note:** This is supported for all versions >=1.6.0 - -Our container images are hosted on [Docker Hub](https://hub.docker.com/r/boxyhq/jackson/tags). You can verify it by using the following command. - -```bash -cosign verify --key cosign.pub boxyhq/jackson: -``` diff --git a/docs/jackson/deploy/env-variables.md b/docs/jackson/deploy/env-variables.md deleted file mode 100644 index 62b90d8..0000000 --- a/docs/jackson/deploy/env-variables.md +++ /dev/null @@ -1,374 +0,0 @@ ---- -title: Environment Variables (Enterprise SSO) -sidebar_label: Environment Variables -description: Environment Variables for Enterprise SSO ---- - -# Environment Variables - -The env vars are only applicable to the Jackson service. If you are using the npm library then look for the options below when initializing the library. - -## General configuration - -### **HOST_URL** - -The URL to bind to. -Default: `localhost` - -### **PORT** - -The port to bind to. -Default: `5225` - -### **EXTERNAL_URL** - -The public URL to reach this service. This is used internally to construct the callback url at which the SAML/OIDC IdP sends back the authorization response. - -Default: `http://{HOST_URL}:{PORT}` - -NPM library option: `externalUrl` - -### **JACKSON_API_KEYS** - -A comma separated list of API keys that will be validated when serving the API requests for SSO connection (`/api/v1/connections`) and Directory Sync (`/api/v1/directory-sync`). - -For example `JACKSON_API_KEYS=key1,key2,key3` - -The API requests will then need to specify an `Authorization` header which contains one of the API keys above in this format: `Api-Key key1` - -### **SAML_AUDIENCE** - -The value of this setting (same as SP EntityID of Jackson) allows the Jackson instance to verify that it is the intended recipient of a SAML response. The same value is also set in the SAML App created on the IdP end by your customers. Once set do not change this value unless you get your customers to reconfigure their SAML App again. It is case-sensitive. This does not have to be a real URL. - -Default: `https://saml.boxyhq.com` - -NPM library option: `samlAudience` - -### **samlPath** - -> **_NOTE:_** This is only applicable to our npm library. - -The ACS path at which the [saml response](./npm-library#handle-saml-response) is sent back from the SAML IdP. Set this when using the npm package. - -NPM library option: `samlPath` - -For example: `/api/oauth/saml` - -### **oidcPath** - -> **_NOTE:_** This is only applicable to our npm library. - -The `redirect_uri` at which the Authorization response is sent back from the OpenID Connect IdP. Set this when using the npm package. - -NPM library option: `oidcPath` - -For example: `/api/oauth/oidc` - -### **IDP_DISCOVERY_PATH** - -This is the path for showing the IdP Selection screen in case there are multiple SSO Connections for the same `tenant` and `product`. -This path is also used to show the App Selection screen in the case of IdP-initiated SAML login (Different apps using the same SAML IdP). -Set this when using the npm package. - -NPM library option: `idpDiscoveryPath` - -For example: `/idp/select` - You can find an implementation of IdP/App Selection at https://github.com/boxyhq/jackson/blob/main/pages/idp/select.tsx. - -### **CLIENT_SECRET_VERIFIER** - -When `tenant` and `product` are used for the SAML flow (and PKCE is not being used) then we use `dummy` as placeholders for `client_id` and `client_secret`. This is not a security issue because SAML is tenanted and hence your Identity Provider will block access to anyone trying to log into your SAML tenant. However for additional security you should set `CLIENT_SECRET_VERIFIER` to a random secret and use that value as the `client_secret` during the OAuth 2.0 flow. - -Default: `dummy` - -NPM library option: `clientSecretVerifier` - -### **IDP_ENABLED** - -Set to true to enable IdP initiated login for SAML. SP initiated login is the only recommended flow but you might have to support IdP login at times. - -Default: `false` - -NPM library option: `idpEnabled` - -### **PUBLIC_KEY** - -This is the public key of the private key used to sign the SAML requests. Jackson expects the public key to be base64 encoded. - -NPM library option: `certs.publicKey` - -### **PRIVATE_KEY** - -This is the private key used to sign the SAML requests. Jackson expects the private key to be base64 encoded. - -NPM library option: `certs.privateKey` - -To generate a private key and public key pair you can use the following command: - -```bash -openssl req -x509 -newkey rsa:2048 -keyout key.pem -out public.crt -sha256 -days 365 -nodes - -# Convert the public key to base64 -cat public.crt | base64 - -# Convert the private key to base64 -cat key.pem | base64 -``` - -## OpenID configuration - -For supporting OpenID flow, we need to set the algorithm and keys used to sign the ID token JWT. - -### **OPENID_JWS_ALG** - -The algorithm used to sign the id_token. Jackson uses [jose](https://github.com/panva/jose) to create the ID token. Supported algorithms can be found at https://github.com/panva/jose/issues/114#digital-signatures. - -Default: `RS256` - -NPM library option: `openid.jwsAlg` - -### **OPENID_RSA_PRIVATE_KEY** - -Base64 value of private key. -To generate one: - -```bash -openssl genrsa -out private-key.pem 3072 -openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private_key.pem -cat private_key.pem | base64 -``` - -NPM library option: `openid.jwtSigningKeys.private` - -### **OPENID_RSA_PUBLIC_KEY** - -Base64 value of public key. -You can generate the public key from the private key as shown below: - -```bash -openssl rsa -in private_key.pem -pubout -out public_key.pem -cat public_key.pem | base64 -``` - -NPM library option: `openid.jwtSigningKeys.public` - -## Database configuration - -### **DB_ENGINE** - -Supported values are `redis`, `sql`, `mongo`, `mem`, `planetscale`, `dynamodb` - -Default: `sql` - -NPM library option: `db.engine` - -> **_NOTE:_** If you are using DynamoDB then you also need to set `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`. For additional options like region and capacity units check [this section](#db_dynamodb_region) - -> **_NOTE:_** `mem` DB (In memory database) is useful to test the Jackson setup locally and is not intended for production. In a serverless deployment like Vercel, the mem DB won't persist across API calls since each call is a fresh lambda invocation with an entirely new context. - -### **DB_TYPE** - -Only needed when DB_ENGINE is sql. Supported values are `postgres`, `mysql`, `mariadb`, `mssql` - -Default: `postgres` - -NPM library option: `db.type` - -### **DB_URL** - -The database URL to connect to. If you are using self-signed certificates then pass `sslmode=noverify` instead of `sslmode=require` in the `DB_URL`. This is because self-signed certs will be rejected as unauthorized in strict mode. Also, set `DB_SSL=true` and `DB_SSL_REJECT_UNAUTHORIZED=false` (see env vars below for more details). - -Example: `postgres://postgres:postgres@localhost:5432/postgres` or `postgres://postgres:postgres@localhost:5432/postgres?sslmode=no-verify` - -For `mssql` the URL takes the form of `sqlserver://localhost:1433;database=;username=;password=;encrypt=true` - -> **_NOTE:_** If you are using DynamoDB then you also need to set `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`. For additional options like region and capacity units check [this section](#db_dynamodb_region) - -NPM library option: `db.url` - -### **DB_SSL** - -This needs to be set to `true` if you are using SSL with your database (You should definitely be using SSL if the database needs to be access via a public url). - -Default: `false` - -### **DB_SSL_REJECT_UNAUTHORIZED** - -If you are using a self-signed certificate then set this to `false`, otherwise it will be rejected due to Certificate Authority checks. - -Default: `true` - -### **DB_TTL** - -TTL for the code, session and token stores (in seconds) - -Default: `300` - -NPM library option: `db.ttl` - -### **DB_CLEANUP_LIMIT** - -Limit cleanup of TTL entries to this number - -Default: `1000` - -NPM library option: `db.cleanupLimit` - -### **DB_ENCRYPTION_KEY** - -To encrypt data at rest specify a 32 character key - -You can use openssl to generate a random 32 character key: - -```bash -openssl rand -base64 24 -``` - -NPM library option: `db.encryptionKey` - -### **PGSSLMODE** - -If you use Heroku to deploy Postgres (or use self-signed certs for Postgres) then set this to `no-verify`. See [Heroku docs](https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-node-js) for more details - -### **DB_DYNAMODB_REGION** - -If you are using DynamoDB then you can specify the region. - -Default: `us-east-1` - -NPM library option: `db.dynamodb.region` - -### **DB_DYNAMODB_RCUS** - -If you are using DynamoDB then you can specify the read capacity units. Check [AWS docs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html) for more details - -Default: 5 - -NPM library option: `db.dynamodb.readCapacityUnits` - -### **DB_DYNAMODB_WCUS** - -If you are using DynamoDB then you can specify the write capacity units. - -Default: 5 - -NPM library option: `db.dynamodb.writeCapacityUnits` - -## Webhook configuration - -### **WEBHOOK_URL** - -Specify a webhook URL to receive events about sso and directory connections. - -NPM library option: `webhook.endpoint` - -### **WEBHOOK_SECRET** - -Specify a secret to be used to sign the webhook payload. This is used to verify the authenticity of the webhook payload. - -NPM library option: `webhook.secret` - -Both the `WEBHOOK_URL` and `WEBHOOK_SECRET` are required to enable webhook events. - -## Pre-loaded Connections - -### **PRE_LOADED_CONNECTION** - -If you only need a single tenant or a handful of pre-configured tenants then this config will help you read and load IdP (both OpenID and SAML)connections. It works well with the mem DB engine so you don't have to configure any external databases for this to work (though it works with those as well). This is a path (absolute or relative) to a directory that contains files organized in the format described in the next section. Check [this section](./pre-loaded-connections.md) for more details - -NPM library option: `preLoadedConnection` - -## Opentelemetry configuration - -Jackson supports observability via OpenTelemetry. The following env vars are available for configuration (along with the rest of the [supported ones](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md)) - -### **OTEL_EXPORTER_OTLP_ENDPOINT** or **OTEL_EXPORTER_OTLP_METRICS_ENDPOINT** - -Target URL to which the exporter is going to send metrics. - -Example: `https://ingest.lightstep.com:443/metrics/otlp/v0.6` - -### **OTEL_EXPORTER_OTLP_HEADERS** or **OTEL_EXPORTER_OTLP_METRICS_HEADERS** - -Headers relevant for the endpoint, useful for specifying authentication details for providers. - -Example: `lightstep-access-token=,...` - -### **OTEL_EXPORTER_OTLP_PROTOCOL** or **OTEL_EXPORTER_OTLP_METRICS_PROTOCOL** - -The transport protocol. Options MUST be one of: `grpc`, `http/protobuf` or `http/json`. - -### **OTEL_EXPORTER_DEBUG** - -Set this to `true` to enable debug logs for Opentelemetry. This is only meant for purposes of debugging otel locally. - -## Admin Portal configuration - -Below variables are used to enable [Magic link](https://next-auth.js.org/providers/email) based authentication for Admin Portal. The **SMTP\_** variables are used for sending email which contain the magic link (one-time use) for sign in. - -### **SMTP_HOST** - -The SMTP host like `smtp.example.com`. - -### **SMTP_PORT** - -The SMTP server port like `587`. - -### **SMTP_USER** - -Username for the SMTP server. - -### **SMTP_PASSWORD** - -Password for the SMTP server. - -### **SMTP_FROM** - -_From_ address used to send mail like: `noreply@example.com`. - -### **NEXTAUTH_URL** - -When running locally this will point to the local server: `http://localhost:5225`. When deploying to production, set this to the canonical URL of the site. More details [here](https://next-auth.js.org/configuration/options#nextauth_url). - -### **NEXTAUTH_SECRET** - -Set this to a random string. You can use `openssl rand -base64 32` to get one. This secret is used to encrypt JWT and hash the email verification token. More details [here](https://next-auth.js.org/configuration/options#nextauth_secret). - -### **NEXTAUTH_ACL** - -Set this to a comma separated string of email addresses or glob patterns like: `tonystark@gmail.com,*@marvel.com`. Access will be denied to email addresses which don't match. If you don't specify any value access is denied to all. - -### **NEXTAUTH_ADMIN_CREDENTIALS** - -Set this to a comma separated string of the pattern `email:password` to enable login to the Admin Portal, for example `NEXTAUTH_ADMIN_CREDENTIALS=deepak@boxyhq.com:Password123`. If you don't specify any value access is denied to all. - -### **ADMIN_PORTAL_SSO_TENANT** - -This will be used as the tenant for the SSO connections (added from Settings tab) used to login into the Admin portal itself. Set this to a value that is less likely to conflict with the main Enterprise SSO connections. - -Default: `_jackson_boxyhq` - -### **ADMIN_PORTAL_SSO_PRODUCT** - -This will be used as the product for the SSO connections (added from Settings tab) used to login into the Admin portal itself. Set this to a value that is less likely to conflict with the main Enterprise SSO connections. - -Default: `_jackson_admin_portal` - -### **RETRACED_HOST_URL** - -If you'd like to use the Admin Portal to manage our Audit Logs service ([Retraced](https://github.com/retracedhq/retraced)) then set this env var to the URL of the service. - -### **RETRACED_EXTERNAL_URL** - -If you'd like to use the Admin Portal to manage our Audit Logs service ([Retraced](https://github.com/retracedhq/retraced)) then set this env var to the Public URL of the service. If this is the same as `RETRACED_HOST_URL` above then you can skip this and it will default to the value of `RETRACED_HOST_URL`. - -Default: It is set to `RETRACED_HOST_URL` if `RETRACED_EXTERNAL_URL` is not defined. - -### **RETRACED_ADMIN_ROOT_TOKEN** - -you need to set the admin root token for Retraced so that we can connect to Retraced and fetch projects and audit logs. - -## Anonymous Analytics - -### **BOXYHQ_NO_TELEMETRY** or **DO_NOT_TRACK** - -Set one of these to `1` or `true` to turn off our anonymous analytics. We only track usage events once per day and it does not contain any information that can identify you in any form. diff --git a/docs/jackson/deploy/index.md b/docs/jackson/deploy/index.md deleted file mode 100644 index 0e7ee5f..0000000 --- a/docs/jackson/deploy/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Getting Started with SAML Jackson -description: Getting Started with SAML Single Sign-On authentication -sidebar_label: Overview ---- - -SAML Jackson can be used with any web application to integrate the **Single Sign-On (SSO) authentication**. - -There are two ways to integrate SAML Jackson with an application. Depending on your use case, you can choose either one of them. - -## As a [separate service](./service.md) - -The advantage of running a separate service is that you get all of our UI tooling (like the Admin Portal) with the service. The disadvantage is that you have to manage the operations of a separate service. If you are not using Node.js then this is the only option available to you. - -## As an [NPM library](./npm-library.md) - -This is available if you are already developing your application using Node.js. - -The advantage of embedding Jackson as an npm library is that you do not have to manage operations of a separate service. The disadvantage is that you do not readily get our UI tooling (like the Admin Portal) with this method. diff --git a/docs/jackson/deploy/npm-library.md b/docs/jackson/deploy/npm-library.md deleted file mode 100644 index a1a71d8..0000000 --- a/docs/jackson/deploy/npm-library.md +++ /dev/null @@ -1,442 +0,0 @@ -# NPM Library - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -SAML Jackson is available as an [npm package](https://www.npmjs.com/package/@boxyhq/saml-jackson) that can be integrated into any **Node.js** based web application framework. - -Install the SDK using the command below. - -```bash -npm install @boxyhq/saml-jackson -``` - ---- - -## Configuration Options - -Please note that the initialization of `@boxyhq/saml-jackson` is async, you cannot run it at the top level. - -```js -import jackson, { - type IConnectionAPIController, - type IOAuthController, -} from '@boxyhq/saml-jackson'; - -let oauth: IOAuthController; -let connection: IConnectionAPIController; - -(async function init() { - const jackson = await require('@boxyhq/saml-jackson').controllers({ - externalUrl: 'https://your-app.com', - samlAudience: 'https://saml.boxyhq.com', - oidcPath: '/api/oauth/oidc', - samlPath: '/api/oauth/saml', - db: { - engine: 'sql', - type: 'postgres', - url: 'postgres://postgres:postgres@localhost:5432/postgres', - }, - }); - - oauth = jackson.oauthController; - connection = jackson.connectionAPIController; -})(); -``` - ---- - -## Single Sign-On Connections - -### Create SAML Connection - -Create a new SAML Single Sign-On connection. - - - - -```js -await connection.createSAMLConnection({ - tenant: 'boxyhq', - product: 'your-app', - rawMetadata: '', // Visit https://mocksaml.com to download Metadata - redirectUrl: ['https://your-app.com/*'], - defaultRedirectUrl: 'https://your-app.com/sso/callback', -}); -``` - - - - - -```json -{ - "defaultRedirectUrl": "https://your-app.com/sso/callback", - "redirectUrl": ["https://your-app.com/*"], - "tenant": "boxyhq", - "product": "your-app", - "clientID": "f7c909a5c72a5535847acf32558b2429a5172dd6", - "clientSecret": "cc6ba07bc42c2f449c9b0a3cc41c256dea08f705e1b44fdc", - "forceAuthn": false, - "idpMetadata": { - "sso": { - "postUrl": "https://mocksaml.com/api/saml/sso", - "redirectUrl": "https://mocksaml.com/api/saml/sso" - }, - "slo": {}, - "entityID": "https://saml.example.com/entityid", - "thumbprint": "d797f3829882233d3f01e49643f6a1195f242c94", - "validTo": "Jul 1 21:46:38 3021 GMT", - "loginType": "idp", - "provider": "saml.example.com" - }, - "certs": { - "publicKey": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----\r\n", - "privateKey": "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----\r\n" - } -} -``` - - - - -### Update SAML Connection - -Update a SAML Single Sign-On connection. - -```js -await connection.updateSAMLConnection({ - tenant: 'boxyhq', - product: 'your-app', - rawMetadata: '', - redirectUrl: ['https://your-app.com/*'], - defaultRedirectUrl: 'https://your-app.com/sso/callback-updated', - clientID: '', - clientSecret: '', -}); -``` - -### Create OIDC Connection - -Create a new OIDC Single Sign-On connection. - - - - -```js -await connection.createOIDCConnection({ - tenant: 'boxyhq', - product: 'your-app', - redirectUrl: ['https://your-app.com/*'], - defaultRedirectUrl: 'https://your-app.com/sso/callback', - oidcDiscoveryUrl: - 'https://accounts.google.com/.well-known/openid-configuration', - oidcClientId: '', - oidcClientSecret: '', -}); -``` - - - - - -```json -{ - "defaultRedirectUrl": "https://your-app.com/sso/callback", - "redirectUrl": ["https://your-app.com/*"], - "tenant": "boxyhq", - "product": "your-app", - "clientID": "749f95c4bd02b4adb6c0633249e70d5ad45b75e2", - "clientSecret": "2d730ac71c74e7d49dccf362c9a61005b6246cc65d6d0fa4", - "oidcProvider": { - "discoveryUrl": "https://accounts.google.com/.well-known/openid-configuration", - "clientId": "", - "clientSecret": "", - "provider": "accounts.google.com" - } -} -``` - - - - -### Update OIDC Connection - -Update an OIDC Single Sign-On connection. - -```js -await connection.updateOIDCConnection({ - tenant: 'boxyhq', - product: 'your-app', - redirectUrl: ['https://your-app.com/*'], - defaultRedirectUrl: 'https://your-app.com/sso/callback', - oidcDiscoveryUrl: - 'https://accounts.google.com/.well-known/openid-configuration', - oidcClientId: '', - oidcClientSecret: '', - clientID: '', - clientSecret: '', -}); -``` - -### Get SAML/OIDC Connections - -Get the details of an existing SAML or OIDC Single Sign-On connection. - - - - -```js -// Using tenant and product -await connection.getConnections({ - tenant: 'boxyhq', - product: 'your-app', -}); - -// Using the client ID -await connection.getConnections({ - clientID: '.', -}); -``` - - - - -```json -[ - { - "defaultRedirectUrl": "https://your-app.com/sso/callback", - "redirectUrl": ["https://your-app.com/*"], - "tenant": "boxyhq", - "product": "your-app", - "clientID": "...", - "clientSecret": "...", - "forceAuthn": false, - "idpMetadata": { - "sso": { - "postUrl": "https://mocksaml.com/api/saml/sso", - "redirectUrl": "https://mocksaml.com/api/saml/sso" - }, - "slo": {}, - "entityID": "https://saml.example.com/entityid", - "thumbprint": "d797f3829882233d3f01e49643f6a1195f242c94", - "validTo": "Jul 1 21:46:38 3021 GMT", - "loginType": "idp", - "provider": "saml.example.com" - }, - "certs": { - "publicKey": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----\r\n", - "privateKey": "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----\r\n" - } - } -] -``` - - - - -### Delete SAML/OIDC Connection - -Update a SAML or OIDC Single Sign-On connection. - -```js -// Using tenant and product -await connection.deleteConnections({ - tenant: 'boxyhq', - product: 'your-app', -}); - -// Using client ID and client secret -await connection.deleteConnections({ - clientID: '', - clientSecret: '', -}); -``` - ---- - -## Single Sign-On Authentication - -### Handle OAuth 2.0 (or OIDC) Authorization request - -To initiate the flow, the application must trigger an OAuth 2.0 (or OIDC) redirect to the authorization endpoint of your app. You'll use the `authorize` method within the authorization handler. - -`authorize` will resolve the SSO URL (`redirect_url`) based on the connection configured for the tenant/product. The app needs to redirect the user to this URL. Keep in mind that the SSO URL structure is different based on the type of SSO Connection. For a SAML Connection, this will contain the `SAMLRequest` whereas for an OIDC Connection the SSO URL will be the Authorization endpoint with the OIDC request params (scope, response_type, etc.) attached. - - - - -```ts -await oauth.authorize({ - tenant: 'boxyhq', - product: 'your-app', - redirect_uri: - '', - state: - '', - response_type: 'code', - code_challenge: - '', - code_challenge_method: - '', - scope: - '', - nonce: - '', - idp_hint: - '', - prompt: '', -}); -``` - - - - - -```json -{ - "redirect_url": "https://mocksaml.com/api/saml/sso?RelayState=boxyhq_jackson_...&SAMLRequest=nVbZkqs4En33V1T4...", - "authorize_form": "" -} -``` - - - - -### Handle IdP Response - -The response is sent back to your app after authentication at IdP. After the handling of this response, the profile of the authenticated user is extracted and stored against a short-lived code that is then sent back to the app. To handle the response use the appropriate method as detailed below: - -#### SAML Response - -Handle the response from the SAML Identity Provider. After successful authentication, IdP sends back (via browser POST) the `SAMLResponse` and `RelayState` to the Assertion Consumer Service (ACS) URL (`samlPath`) of the app. You'll use the `samlResponse` method within your ACS endpoint. This will parse and validate the SAML Response after which the user profile is extracted. - - - - -```js -await oauth.samlResponse({ - SAMLResponse: '', - RelayState: '', -}); -``` - - - - - -```json -{ - "redirect_url": "https://your-app.com/sso/callback?code=5db7257fde94e062f6243572e31818d6e64c3097&state=c38ee339-6b82-43d3-838f-4036820acce9" -} -``` - - - - -#### OIDC Response - -Handle the response from the OIDC Identity Provider. After successful authentication, IdP sends back (via browser redirect) the `code` and `state` to the redirect URL (`oidcPath`) that handles the OIDC response. You'll use the `oidcAuthzResponse` method within your `oidcPath` handler. This will exchange the `code` for tokenSet (id_token and access_token) from the OIDC Provider. The "userinfo" endpoint of the OIDC Provider also gets invoked. Both the `id_token` claims and `userinfo` response are used to form the user profile. - - - - -```js -await oauth.oidcAuthzResponse({ - code: '', - state: '', -}); -``` - - - - - -```json -{ - "redirect_url": "https://your-app.com/sso/callback?code=5db7257fde94e062f6243572e31818d6e64c3097&state=c38ee339-6b82-43d3-838f-4036820acce9" -} -``` - - - - -### Request Access Token - -Requests an `access_token` by passing the authorization `code` from the previous step along with other authentication details. - - - - -```js -const tenant = 'boxyhq'; -const product = 'your-app'; - -await oauth.token({ - code: '', - redirect_uri: - '', - client_id: `tenant=${tenant}&product=${product}`, - client_secret: 'dummy', - grant_type: 'authorization_code', -}); -``` - - - - - -```json -{ - "access_token": "6b81f03b60c34e46e740d96c7e6242923736a2d1", - "token_type": "bearer", - "expires_in": 300 -} -``` - - - - -### Fetch User Profile - -Once the `access_token` has been fetched, you can use it to retrieve the user profile from the Identity Provider. - - - - -```js -const accessToken = ''; - -await oauth.userInfo(accessToken); -``` - - - - - -```json -{ - "raw": { - "id": "1dda9fb491dc01bd24d2423ba2f22ae561f56ddf2376b29a11c80281d21201f9", - "email": "samuel@example.com", - "firstName": "Samuel", - "lastName": "Jackson", - "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "samuel@example.com" - }, - "id": "1dda9fb491dc01bd24d2423ba2f22ae561f56ddf2376b29a11c80281d21201f9", - "email": "samuel@example.com", - "firstName": "Samuel", - "lastName": "Jackson", - "requested": { - "client_id": "f7c909a5c72a5535847acf32558b2429a5172dd6", - "state": "c38ee339-6b82-43d3-838f-4036820acce9", - "redirect_uri": "https://your-app.com/sso/callback", - "tenant": "boxyhq", - "product": "your-app", - "scope": [] - } -} -``` - - - diff --git a/docs/jackson/deploy/pre-loaded-connections.md b/docs/jackson/deploy/pre-loaded-connections.md deleted file mode 100644 index c55e711..0000000 --- a/docs/jackson/deploy/pre-loaded-connections.md +++ /dev/null @@ -1,50 +0,0 @@ -# Pre-loaded SSO Connections - -#### SAML - -If PRE_LOADED_CONNECTION is set then it should point to a directory with the following structure (example below):- - -```bash -boxyhq.js -boxyhq.xml -anothertenant.js -anothertenant.xml -``` - -The JS file has the following structure:- - -```javascript -module.exports = { - defaultRedirectUrl: 'http://localhost:3366/login/saml', - redirectUrl: '["http://localhost:3366/*"]', - tenant: 'boxyhq.com', - product: 'demo', - name: 'testConnection', - description: 'Just a test connection', -}; -``` - -The XML file (which should have the same name as the .js file) is the raw XML metadata file you receive from your Identity Provider. Please ensure it is saved in the `utf-8` encoding. - -The config and XML above correspond to the [Add connection API - SAML tab](../sso-flow/index.md#21-add-connection). - -#### OIDC - -For a connection backed by OpenID IdP create the \*.js file at PRE_LOADED_CONNECTION as shown below:- - -See [Add connection API - OIDC tab](../sso-flow/index.md#21-add-connection) - -```javascript -module.exports = { - defaultRedirectUrl: 'http://localhost:3366/sso/oauth/oidc', - redirectUrl: '["http://localhost:3366"]', - tenant: 'oidc.example.com', - product: 'crm', - name: 'OIDC connection for oidc.example.com', - description: 'OIDC connection for oidc.example.com', - oidcDiscoveryUrl: - 'https://accounts.google.com/.well-known/openid-configuration', - oidcClientId: '', - oidcClientSecret: '', -}; -``` diff --git a/docs/jackson/deploy/service.md b/docs/jackson/deploy/service.md deleted file mode 100644 index bfd0ad5..0000000 --- a/docs/jackson/deploy/service.md +++ /dev/null @@ -1,144 +0,0 @@ -# Service - -## Health Check - -The service offers a readiness and health check endpoint that can be configured in orchestration tools like Docker Compose and Kubernetes. - -The `/api/health` GET endpoint returns a 200 when the service ready and healthy or a 5xx (typically 503) error if unhealthy. The response contains the current version of Jackson. For example: `{"version":"1.0.0"}`. - -## With Docker - -The docker container can be found at [boxyhq/jackson](https://hub.docker.com/r/boxyhq/jackson/tags). It is preferable to use a specific version instead of the `latest` tag. - -Replace the values for `DB_URL`, `JACKSON_API_KEYS`, `NEXTAUTH_SECRET` and `NEXTAUTH_ADMIN_CREDENTIALS` with your own values before running docker run command. - -```bash -docker run \ - -p 5225:5225 \ - -e DB_ENGINE="sql" \ - -e DB_TYPE="postgres" \ - -e DB_URL="postgres://postgres:postgres@postgres:5432/postgres" \ - -e JACKSON_API_KEYS="secret" \ - -e NEXTAUTH_URL="http://localhost:5225" \ - -e EXTERNAL_URL="http://localhost:5225" \ - -e NEXTAUTH_SECRET="super-secret" \ - -e NEXTAUTH_ADMIN_CREDENTIALS="admin@company.com:secretpassword" \ - -d boxyhq/jackson -``` - -OR - -```bash -docker run \ - -p 5225:5225 \ - -e DB_ENGINE="mongo" \ - -e DB_URL="mongodb://localhost:27017/jackson" \ - -e JACKSON_API_KEYS="secret" \ - -e NEXTAUTH_URL="http://localhost:5225" \ - -e EXTERNAL_URL="http://localhost:5225" \ - -e NEXTAUTH_SECRET="super-secret" \ - -e NEXTAUTH_ADMIN_CREDENTIALS="admin@company.com:secretpassword" \ - -d boxyhq/jackson -``` - -See the complete list of [Environment Variables](./env-variables.md) - -Kubernetes and docker-compose deployment files will be coming soon. - -## Without Docker - -Please follow the below instructions. - -### Clone the repository - -You can clone the source from the [Jackson GitHub repo](https://github.com/boxyhq/jackson/tree/release) - -```bash -git clone https://github.com/boxyhq/jackson -``` - -```bash -cd jackson -``` - -### Install dependencies - -```bash -npm install -``` - -### Add environment variables - -```bash -cp .env.example .env -``` - -Update `.env` with your values. See the complete list of [Environment Variables](./env-variables.md) - -### Build and run - -```bash -npm run build -``` - -```bash -npm run start -``` - -## Test the service is running - -Open a browser and visit [http://localhost:5225](http://localhost:5225). - -If you see a page asking you to sign in, congrats 🎉 you are seeing the [Admin Portal](../../admin-portal/overview). - -## Database - -Jackson currently supports the following databases. - -- Postgres -- MySQL -- Microsoft SQL Server -- MariaDB -- MongoDB -- Redis -- [PlanetScale](https://planetscale.com/) (MySQL compatible) -- [Neon](https://neon.tech) (Serverless Postgres) -- Amazon DynamoDB - -### PlanetScale - -To connect PlanetScale database with Jackson, follow the below steps: - -1. Create a new database on PlanetScale -2. Get your database [connection URL from the PlanetScale](https://planetscale.com/docs/tutorials/deploy-to-netlify#get-your-connection-string-from-planetscale) -3. Set the following environment variables - - - `DB_ENGINE=planetscale` - - `DB_TYPE=mysql` - - `DB_SSL=true` - - `DATABASE_URL=` - -4. Run the database migration to create the tables required by SAML Jackson - -```bash -cd npm && PLANETSCALE_URL= npm run db:migration:run:planetscale -``` - -Make sure you have `?ssl={"rejectUnauthorized":true}` at the end of the PlanetScale connection URL. - -Now you are ready to start the service. - -## SAML Tracer - -Each error event in the SAML request/ response phase is captured to aid in troubleshooting the SAML setup. The record or trace contains context related to the flow, like tenant, product, etc. The Admin Portal will have a tab under Enterprise SSO -> SAML Tracer showing a paginated list of traces over time. Developers can inspect a trace and will be able to ascertain the real reason for the failure. - -## Deployment Guides (Coming soon) - -- Heroku -- DigitalOcean -- Vercel -- Docker -- Kubernetes -- AWS -- GCP -- Azure diff --git a/docs/jackson/events.md b/docs/jackson/events.md deleted file mode 100644 index 68695f4..0000000 --- a/docs/jackson/events.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Enterprise SSO Webhook Events -sidebar_label: Events ---- - -# Webhook Events - -SAML Jackson uses webhooks to notify your application any time changes are made to the connections. We'll notify you of the following 4 events for each connection. - -## Events - -
- - sso.created - New connection has been created. - -

- -```json -{ - "event": "sso.created", - "tenant": "boxyhq", - "product": "demo", - "data": { - "name": "SSO Connection", - "description": "SSO Connection for BoxyHQ", - "clientID": "326991705d478f0178fc2b49e35cd166dc771061", - "clientSecret": "15b2db91b2ba4c848b68148f108035e7138d69104d99de89", - "provider": "saml.example.com", - "friendlyProviderName": null - } -} -``` - -

-
- -
- - sso.deactivated - A connection has been deactivated. - -

- -```json -{ - "event": "sso.deactivated", - "tenant": "boxyhq", - "product": "demo", - "data": { - "name": "SSO Connection", - "description": "SSO Connection for BoxyHQ", - "clientID": "326991705d478f0178fc2b49e35cd166dc771061", - "clientSecret": "15b2db91b2ba4c848b68148f108035e7138d69104d99de89", - "provider": "saml.example.com", - "friendlyProviderName": null - } -} -``` - -

-
- -
- - sso.activated - A connection has been activated. - -

- -```json -{ - "event": "sso.activated", - "tenant": "boxyhq", - "product": "demo", - "data": { - "name": "SSO Connection", - "description": "SSO Connection for BoxyHQ", - "clientID": "326991705d478f0178fc2b49e35cd166dc771061", - "clientSecret": "15b2db91b2ba4c848b68148f108035e7138d69104d99de89", - "provider": "saml.example.com", - "friendlyProviderName": null - } -} -``` - -

-
- -
- - sso.deleted - A connection has been deleted. - -

- -```json -{ - "event": "sso.deleted", - "tenant": "boxyhq", - "product": "demo", - "data": { - "name": "SSO Connection", - "description": "SSO Connection for BoxyHQ", - "clientID": "326991705d478f0178fc2b49e35cd166dc771061", - "clientSecret": "15b2db91b2ba4c848b68148f108035e7138d69104d99de89", - "provider": "saml.example.com", - "friendlyProviderName": null - } -} -``` - -

-
- -## Configure Webhook - -To configure the webhook, you have to set the following environment variables. - -- `WEBHOOK_URL` - The URL to which the webhook events will be sent. -- `WEBHOOK_SECRET` - The secret key used to sign the webhook events. diff --git a/docs/jackson/examples.md b/docs/jackson/examples.md deleted file mode 100644 index 81dbeea..0000000 --- a/docs/jackson/examples.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Examples & Resources (Enterprise SSO) -sidebar_label: Examples & Resources -description: Examples & Resources for our Enterprise SSO product ---- - -# Examples & Resources (Enterprise SSO) - -## Examples - -- [Jackson with Next.js and NextAuth.js](https://github.com/boxyhq/jackson-examples/tree/main/apps/next-auth) -- [Jackson with Remix and remix-auth](https://github.com/boxyhq/jackson-remix-auth) -- [Jackson with React and client-side OAuth](https://github.com/boxyhq/jackson-examples/tree/main/apps/react) -- [Jackson with Express.js](https://github.com/boxyhq/jackson-examples/tree/main/apps/express) -- [Jackson with Supertokens and Express.js](https://github.com/boxyhq/jackson-supertokens-express) -- [Jackson with Express.js and Auth0](https://github.com/boxyhq/express-jackson-auth0-demo) - -## Resources - -- [Mock SAML hosted service](https://mocksaml.com) -- [Mock SAML](https://github.com/boxyhq/mock-saml) -- [NextAuth.js Provider](https://next-auth.js.org/providers/boxyhq-saml) -- [Remix Auth Strategy](https://github.com/boxyhq/remix-auth-saml) - -## Third-party examples - -- [Jackson with Next.js and Supertokens](https://github.com/nadilas/jackson-next-supertokens) diff --git a/docs/jackson/local-development.md b/docs/jackson/local-development.md deleted file mode 100644 index 7352a40..0000000 --- a/docs/jackson/local-development.md +++ /dev/null @@ -1,57 +0,0 @@ -# Local Development - -This guide will help you to setup and run SAML Jackson in development mode. - -## Clone the repo - -```bash -git clone https://github.com/boxyhq/jackson.git - -cd jackson -``` - -## Install dependencies - -Run the following command to install the Node dependencies. - -```bash -npm install -``` - -## Setup environment variables - -```bash -cp .env.example .env -``` - -Please refer to [environment variables](./deploy/env-variables.md) to read on setting environment variables. - -## Setup the database - -Run the following command to create database instances for the local development. Make sure you have Docker installed on your machine. - -```bash -npm run dev-dbs -``` - -## Start the development server - -Start the development server by running the following command. - -```bash -npm run dev -``` - -## Testing Jackson in your local environment - -The Jackson service can be accessed locally using the following URL - -```bash -http://localhost:5225 -``` - -You can visit the following URL to see if the Jackson was started successfully! - -```bash -http://localhost:5225/api/hello -``` diff --git a/docs/jackson/observability.md b/docs/jackson/observability.md deleted file mode 100644 index d2f31d9..0000000 --- a/docs/jackson/observability.md +++ /dev/null @@ -1,16 +0,0 @@ -# Observability - -Jackson provides first-class observability on the back of OpenTelemetry. Currently we support the following metrics. Traces and logs are coming soon. - -Please check the [Environment Variables](./deploy/env-variables.md#opentelemetry-configuration) to configure to enable this feature. - -## Metrics - -| Name | Description | Type | -| --------------------------- | ---------------------------------------- | ----- | -| `jackson.connection.create` | Number of SSO Connection create requests | Count | -| `jackson.connection.get` | Number of SSO Connection get requests | Count | -| `jackson.connection.delete` | Number of SSO Connection delete requests | Count | -| `jackson.oauth.authorize` | Number of oauth authorize requests | Count | -| `jackson.oauth.token` | Number of oauth token requests | Count | -| `jackson.oauth.userinfo` | Number of oauth user info requests | Count | diff --git a/docs/jackson/overview.md b/docs/jackson/overview.md deleted file mode 100644 index 46b850d..0000000 --- a/docs/jackson/overview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Enterprise SSO Docs ---- - -# Enterprise SSO - -Jackson is our Single Sign-On (SSO) service for SAML/OIDC Identity Providers [SSO in a box from BoxyHQ]. - -Jackson implements SSO as an OAuth 2.0 flow, abstracting away all the complexities of the underlying SAML/OIDC protocol. Check out our [GitHub repo](https://github.com/boxyhq/jackson). - -## Architecture - -![img alt](/img/enterprise-sso-arch.png) - -We have developed Jackson from scratch adopting a modular architecture as shown below. The business logic is separated into controllers which helps us in incremental adoption of features. - -![img alt](/img/jackson-architecture.png) - -## Key Features - -### Own your own data​ - -- An open-source solution that allows you to keep control of your data -- Supports Bring Your Own Database (BYOD) and can be used with any database -- Built-in support for MySQL, MariaDB, Postgres, MongoDB, Redis, PlanetScale -- Works great with databases from popular hosting providers - -### Flexible and easy to use​ - -- Designed to work with OAuth 2.0 / OpenID Connect 1.0 flow -- Integrate with your existing OAuth 2.0 / OpenID Connect 1.0 library - -### Support - -Reach out to the maintainer at one of the following places: - -- [GitHub Discussions](https://github.com/boxyhq/jackson/discussions) -- [GitHub Issues](https://github.com/boxyhq/jackson/issues) -- The email which is located [in GitHub profile](https://github.com/deepakprabhakara) - -### Community - -- [Discord](https://discord.gg/uyb7pYt4Pa) -- [Twitter](https://twitter.com/boxyhq) - -### License - -[Apache 2.0 License](https://github.com/boxyhq/jackson/blob/main/LICENSE) diff --git a/docs/jackson/saml-federation/index.md b/docs/jackson/saml-federation/index.md deleted file mode 100644 index eb80632..0000000 --- a/docs/jackson/saml-federation/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: SAML Federation -sidebar_label: SAML Federation ---- - -# SAML Federation - -SAML Federation is an enterprise feature and you need to have an enterprise license to use this feature. - -This feature allows you to federate multiple Identity Providers (IdPs) without needing any additional plugins or code changes. Extremely useful in cases where the SAML support is restricted to a single provider and you need to support multiple IdPs. Contact us to find out more. - -## SAML Federation Flow - -Here is how the SAML Federation flow works if you are using Jackson as a SAML IdP and want to federate with another identity provider (IdP) (Eg: Okta): - -- The user accesses the Service Provider's (SP) login page -- The user clicks on the "Login with SAML" button -- The SP sends SAML Request to Jackson's SSO endpoint -- Jackson displays the list of IdP available for the user to choose from (if there is more than one IdP) based on the requested tenant and product combination -- Jackson redirects the user to the chosen IdP for authentication -- After successful authentication, IdP sends (POST) SAML Response to Jackson's ACS endpoint -- Jackson process SAML Response from the IdP and create a new SAML Response to send (POST) back to the SP's ACS endpoint -- SP process SAML Response from Jackson and create a new session for the user (Depending on the SP's implementation) - -Visit [Create SAML Federation App](/docs/admin-portal/enterprise-sso#saml-federation) to learn how to create and configure a SAML Federation App. diff --git a/docs/jackson/sbom.md b/docs/jackson/sbom.md deleted file mode 100644 index 462868b..0000000 --- a/docs/jackson/sbom.md +++ /dev/null @@ -1,25 +0,0 @@ -# Software Bill Of Materials (SBOM) Reports - -[SBOM](https://en.wikipedia.org/wiki/Software_bill_of_materials) is a list of components in a piece of software. It is like a list of ingredients of a product and is quickly becoming a standard for software supply chain risk management. The ecosystem is growing with tools that help you verify, scan and monitor all your dependencies. - -## Report Standards - -SBOM reports primarily use [SPDX](https://en.wikipedia.org/wiki/Software_Package_Data_Exchange) & [CycloneDX](https://cyclonedx.org/) standards. - -## Reports - -**Note:** This is supported for all versions >=0.3.8 - -You can find the SBOM reports as artifacts in our container registry at the locations below. They are updated every time there is change in the codebase and tagged by the exact version we release. - -| Location | Files | Context | -| ----------------------------------------------- | ----------------------------- | ------------------------------------- | -| `ghcr.io/boxyhq/jackson/sbom:service-` | `sbom.spdx`, `sbom.cyclonedx` | SAML Jackson service | -| `ghcr.io/boxyhq/jackson/sbom:npm-` | `sbom.spdx`, `sbom.cyclonedx` | NPM package | -| `ghcr.io/boxyhq/jackson/sbom:docker-` | `sbom.spdx`, `sbom.cyclonedx` | Docker Image for SAML Jackson service | - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to retrieve these files. - -```bash -oras pull ghcr.io/boxyhq/jackson/sbom:service- -``` diff --git a/docs/jackson/security.md b/docs/jackson/security.md deleted file mode 100644 index 026cac8..0000000 --- a/docs/jackson/security.md +++ /dev/null @@ -1,17 +0,0 @@ -# Security - -In general most OAuth 2.0 security guidelines apply to Jackson as well but there are a few minor differences. - -## Tenancy - -OAuth 2.0 is typically a single instance and all users can login using the same instance. However SAML is based on an specific instance that your customers have to configure with their Identity Provider. This means that access to the SAML instance is limited to only those that have been provisioned for it, adding another layer of security to the login flow. - -## Client Secret - -The Config API returns a `client_id` and `client_secret` that you can save for each customer and use when initiating the OAuth 2.0 flow. However for convenience we also let you use a `tenant` and `product` instead since this doesn't require you to store any additional data. When using this we recommend you use the [CLIENT_SECRET_VERIFIER](./deploy/env-variables.md#client_secret_verifier) configuration and not use the default `dummy` value. The `client_secret` cannot really be misused because as you will see in the next section the tokens are short lived but it is a good idea to set the `client_secret` to something that is really a secret. - -For client-side logins we highly recommend you use the PKCE flow which is supported by Jackson. This ensures a secure login without revealing the `client_secret` on the client-side. - -## Tokens - -The tokens generated by Jackson are short lived (default is 5 minutes) and hence there is no risk of it being misused even if the `client_secret` is known. Your SAML provider ensures that there can be no unauthorized. diff --git a/docs/jackson/sso-flow/example-flow.md b/docs/jackson/sso-flow/example-flow.md deleted file mode 100644 index 52219a9..0000000 --- a/docs/jackson/sso-flow/example-flow.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Example flow -sidebar_label: Example flow ---- - -## Scenario - -Let's say you have a customer `acme.com` who is using two of your SaaS offerings. For now let's call them: - -- `CRM (Customer Relationship Management)` - Should integrate with the customer (of acme.com) facing SAML Identity Provider (Azure AD) -- `HRM (Human Resource Management)` - Should integrate with the Google workspace account of `acme.com` employees. - -Let's see how SSO works in this case. - -## Configure the SSO Connection - -First as the application developer, you'll need to [add](./index.md#21-add-connection) the SSO connections for CRM and HRM. This will be saved (marked as SAML Metadata and OIDC Metadata in the below diagram) within Jackson and later used to orchestrate the IdP login. - -## Login flow - -Jackson uses the Authorization Code flow as outlined by the numbered steps below. - -1. The Client (Browser app) initiates the login by redirecting to Jackson [`authorize`](./index.md#31-authorize) endpoint. Jackson will parse the tenant/product in the request and use it to redirect the user to the configured IdP. -2. Step 2 varies based on the Identity Provider type. For SAML IdP, Jackson would construct the SAML request, sign it and send it to IdP. The IdP validates the request and redirects the user to the login screen. For OIDC IdP, Jackson constructs an OpenID Connect request and redirects the user to the OIDC Provider authorization endpoint. -3. Once the user is logged in successfully, the IdP redirects back to Jackson. For SAML, the response contains the user profile. In the case of OIDC, the response contains the authorization code that is used by Jackson to obtain token and userprofile from the OIDC IdP. Jackson generates a short lived code and stores the user profile against it. -4. The authorization code generated in the previous step is sent to the client app. -5. The client [`exchanges`](./index.md#32-code-exchange) the code for token and uses it to query the [`userInfo`](./index.md#33-profile-request) endpoint of Jackson to get the complete user profile. - -![img alt](/img/sso-flow.png) diff --git a/docs/jackson/sso-flow/index.md b/docs/jackson/sso-flow/index.md deleted file mode 100644 index dcdef60..0000000 --- a/docs/jackson/sso-flow/index.md +++ /dev/null @@ -1,333 +0,0 @@ -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Single Sign-On (SSO) - -Jackson takes a multi-tenanted approach to implementing SSO, abstracting away all the complexities of the underlying SAML/OIDC protocol. What this means is you can enable SSO for all (your) customers across products from a single instance of jackson, and works with both SAML and OIDC Identity Provider(IdP)s. - -**Note:** All the APIs below support both `application/x-www-form-urlencoded` and `application/json` content types. Examples below use `application/x-www-form-urlencoded`. - -**Note:** OAuth 2.0 protocol uses underscore casing for the parameters, we use camel casing for all our APIs. For example it's `client_id` in the OAuth 2.0 flow and `clientID` in our APIs. - -## 1. Setting up SSO Provider - -Please follow the instructions [here](../sso-providers) to guide your customers in setting up SAML/OIDC correctly for your product(s). You should create a copy of the doc and modify it with your custom settings, we have used the values that work for our demo apps. - -## 2. SSO Connection API - -You will need to provide a place in the UI for your customers (The account settings page is usually a good place for this) to configure this and then call the APIs below. - -### 2.1 Add connection - - - - -Once your customer has set up the SAML app on their Identity Provider, the Identity Provider will generate an IdP or SP metadata file. Some Identity Providers only generate an IdP metadata file but it usually works for the SP login flow as well. It is an XML file that contains various attributes Jackson needs to validate incoming SAML login requests. This step is the equivalent of setting an OAuth 2.0 app and generating a client ID and client secret that will be used in the login flow. - -The following API call sets up the connection in Jackson: - -```bash -curl --location --request POST 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'encodedRawMetadata=Base64()' \ ---data-urlencode 'defaultRedirectUrl=http://localhost:3366/login/saml' \ ---data-urlencode 'redirectUrl=http://localhost:3366/*' \ ---data-urlencode 'redirectUrl=http://localhost:3000/*' \ ---data-urlencode 'tenant=boxyhq.com' \ ---data-urlencode 'product=demo' \ ---data-urlencode 'name=demo-connection' \ ---data-urlencode 'description=Demo SAML connection' -``` - -- `metadataUrl`: URL containing the SAML metadata contents. Either this or `encodedRawMetadata` needs to be specified -- `encodedRawMetadata`: Base64 encoding of the XML metadata your customer gets from their Identity Provider. Either this or `metadataUrl` needs to be specified -- `defaultRedirectUrl`: The redirect URL to use in the IdP login flow. Jackson will call this URL after completing an IdP login flow -- `redirectUrl`: Allowed redirect URL. Repeat this field multiple times to allow multiple redirect URLs. Jackson will disallow any redirects not on this list (or not the default URL above). -- `tenant`: Jackson supports a multi-tenant architecture, this is a unique identifier you set from your side that relates back to your customer's tenant. This is normally an email, domain, an account id, or user-id. **Should not contain the : character since we use it as a delimiter internally** -- `product`: Jackson support multiple products, this is a unique identifier you set from your side that relates back to the product your customer is using. **Should not contain the : character since we use it as a delimiter internally** -- `name`: A friendly name to identify the SAML connection -- `description`: A short description with some information of the connection - -The response returns a JSON with `clientID` and `clientSecret` that can be stored against your tenant and product for a more secure OAuth 2.0 flow. If you do not want to store the `clientID` and `clientSecret` you can alternatively use `client_id=tenant=&product=` and use `dummy` (or the value you set for the [secret verifier](../deploy/env-variables.md#client_secret_verifier) env) as the value for `client_secret` when setting up the OAuth 2.0 flow. Additionally a `idpMetadata.provider` attribute is also returned which indicates the domain of your Identity Provider. - - - -Once your customer has set up the [OIDC app](../sso-providers/generic-oidc.md) on their Identity Provider, the Identity Provider will generate a clientId and clientSecret. - -The following API call sets up the connection in Jackson: - -```bash -curl --location --request POST 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'defaultRedirectUrl=http://localhost:3366/login/oidc' \ ---data-urlencode 'oidcDiscoveryUrl=' \ ---data-urlencode 'oidcClientId=' \ ---data-urlencode 'oidcClientSecret=' \ ---data-urlencode 'redirectUrl=http://localhost:3366/*' \ ---data-urlencode 'redirectUrl=http://localhost:3000/*' \ ---data-urlencode 'tenant=boxyhq.com' \ ---data-urlencode 'product=demo' \ ---data-urlencode 'name=demo-connection' \ ---data-urlencode 'description=Demo OIDC connection' -``` - -- `oidcDiscoveryUrl`: OpenID Providers supporting discovery make the metadata available at the endpoint obtained by concatenating issuer and `/.well-known/openid-configuration` -- `oidcClientId`: The client identifier issued to the client during the IdP registration process. -- `oidcClientSecret`: The client secret issued to the client during the IdP registration process. -- `defaultRedirectUrl`: The redirect URL to use in the IdP login flow. Jackson will call this URL after completing an IdP login flow -- `redirectUrl`: Allowed redirect URL. Repeat this field multiple times to allow multiple redirect URLs. Jackson will disallow any redirects not on this list (or not the default URL above). -- `tenant`: Jackson supports a multi-tenant architecture, this is a unique identifier you set from your side that relates back to your customer's tenant. This is normally an email, domain, an account id, or user-id. **Should not contain the : character since we use it as a delimiter internally** -- `product`: Jackson support multiple products, this is a unique identifier you set from your side that relates back to the product your customer is using. **Should not contain the : character since we use it as a delimiter internally** -- `name`: A friendly name to identify the OIDC connection -- `description`: A short description with some information of the connection - -The response returns a JSON with `clientID` and `clientSecret` that can be stored against your tenant and product for a more secure OAuth 2.0 flow. If you do not want to store the `clientID` and `clientSecret` you can alternatively use `client_id=tenant=&product=` and use `dummy` (or the value you set for the [secret verifier](../deploy/env-variables.md#client_secret_verifier) env) as the value for `client_secret` when setting up the OAuth 2.0 flow. Additionally a `idpMetadata.provider` attribute is also returned which indicates the domain of your Identity Provider. - - - -### 2.2 Get connections - -This endpoint can be used to retrieve SAML/OIDC connections configured for a tenant/product. This can be used to check and display the details to your customers. You can use either `clientID` or `tenant` and `product` combination. - - - - -```bash -curl -G --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'tenant=boxyhq.com' \ ---data-urlencode 'product=demo' -``` - -```bash -curl -G --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'clientID=' -``` - -The response returns a JSON with `idpMetadata.provider`indicating the domain of your Identity Provider. If an empty JSON payload is returned then we do not have any connection stored for the attributes you requested. - - - -```bash -curl -G --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'tenant=boxyhq.com' \ ---data-urlencode 'product=demo' -``` - -```bash -curl -G --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'clientID=' -``` - -The response returns a JSON with `oidcProvider.provider` indicating the domain of your Identity Provider. If an empty JSON payload is returned then we do not have any connection stored for the attributes you requested. - - - -### 2.3 Update connection - -This endpoint can be used to update an existing SSO Connection. - - - -```bash -curl --location --request PATCH 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'clientID=' \ /* Required */ ---data-urlencode 'clientSecret=' \ /* Required */ ---data-urlencode 'encodedRawMetadata=Base64()' \ ---data-urlencode 'defaultRedirectUrl=http://localhost:3366/login/saml' \ ---data-urlencode 'redirectUrl=http://localhost:3366/*' \ ---data-urlencode 'redirectUrl=http://localhost:3000/*' \ ---data-urlencode 'tenant=boxyhq.com' \ /* Required */ ---data-urlencode 'product=demo' \ /* Required */ ---data-urlencode 'name=demo-connection' \ ---data-urlencode 'description=Demo SAML connection' -``` - - - - -```bash -curl --location --request PATCH 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'clientID=' \ /* Required */ ---data-urlencode 'clientSecret=' \ /* Required */ ---data-urlencode 'oidcDiscoveryUrl=' \ ---data-urlencode 'oidcClientId=' \ ---data-urlencode 'oidcClientSecret=' \ ---data-urlencode 'defaultRedirectUrl=http://localhost:3366/login/oidc' \ ---data-urlencode 'redirectUrl=http://localhost:3366/*' \ ---data-urlencode 'redirectUrl=http://localhost:3000/*' \ ---data-urlencode 'tenant=boxyhq.com' \ /* Required */ ---data-urlencode 'product=demo' \ /* Required */ ---data-urlencode 'name=demo-connection' \ ---data-urlencode 'description=Demo OIDC connection' -``` - - - - -### 2.4 Delete connections - -This endpoint can be used to delete existing connections either by tenant/product or clientID. - -```bash -curl -X "DELETE" --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---url-query 'tenant=boxyhq.com' \ ---url-query 'product=demo' -``` - -```bash -curl -X "DELETE" --location 'http://localhost:5225/api/v1/connections' \ ---header 'Authorization: Api-Key ' \ ---url-query 'clientID=' ---url-query 'clientSecret=' -``` - -## 3. OAuth 2.0 Flow - -:::info - -#### OpenID Connect flow - -Jackson also supports the [OIDC flow](https://openid.net/specs/openid-connect-core-1_0.html). By including `openid` in the `scope` param, an additional `id_token` is returned from the token endpoint which contains the user claims: `id, email, firstName, and lastName`. To enable the flow on Jackson, be sure to configure the keys and algorithm in [OpenID configuration](../deploy/env-variables.md#openid-configuration). If the authentication request contained `nonce` then it is passed unmodified to the ID Token, which the client can use to validate and mitigate replay attacks. -::: - -Jackson has been designed to abstract the underlying SAML/OIDC login flow as a pure OAuth 2.0 flow. This means it's compatible with any standard OAuth 2.0 library out there, both client-side and server-side. It is important to remember that SSO Connection is configured per customer unlike OAuth 2.0 where you can have a single OAuth app supporting logins for all customers. - -Jackson also supports the PKCE authorization flow (), so you can protect your SPAs. - -If for any reason you need to implement the flow on your own, the steps are outlined below: - -### 3.1 Authorize - -The OAuth flow begins with redirecting your user to the `authorize` URL: - -```bash -https://localhost:5225/api/oauth/authorize - ?response_type=code&provider=saml - &client_id= - &redirect_uri= - &state= -``` - -- `response_type`: `code` is the only supported type for now but maybe extended in the future -- `client_id`: Use the client_id returned by the SSO connection API or use `tenant=&product=` to use the tenant and product IDs instead. **Note:** Please don't forget to URL encode the query parameters including `client_id`. -- `tenant`: Optionally you can provide use `dummy` as the value for `client_id` and specify the `tenant` and `product` custom attributes (if your OAuth 2.0 library allows it). -- `product`: Should be specified if specifying `tenant` above -- `idp_hint`: Can be used to select the Identity Provider if multiple connections match for the same `tenant/product`. Should point to the absolute "clientID" of the SSO Connection in Jackson. -- `redirect_uri`: This is where the user will be taken back once the authorization flow is complete -- `state`: Use a randomly generated string as the state, this will be echoed back as a query parameter when taking the user back to the `redirect_uri` above. You should validate the state to prevent XSRF attacks. -- `nonce` (for OIDC flow): String value used to associate a Client session with an ID Token, and to mitigate replay attacks. The value is passed through unmodified from the Authentication Request to the ID Token. Sufficient entropy MUST be present in the nonce values used to prevent attackers from guessing values. -- `forceAuthn` (for SAML SSO Connections): If passed in with the value `true`, the outgoing SAML request to IdP will have the param `ForceAuthn` set as true forcing the user to re-authenticate even if they have an active session. -- `login_hint` (Relevant for OIDC IdPs like Google): If passed in, the parameter will be forwarded in the OIDC IdP authorize request. The IdP can use this value (normally an account identifier such as an email address) as a hint to skip the account selection page. - -**NOTE**: You can also pass the encoded tenant/product in either `scope` or `access_type` or `resource` (Set `client_id` as `dummy`). This will come in handy for some setups where the client_id can't be set dynamically. - -The user will be taken to the IdP based on the configured SAML/OIDC metadata. -In case of any errors, we return the `error`, `error_description` and `state` (from original request) (see [Error Response](https://www.oauth.com/oauth2-servers/authorization/the-authorization-response/)) back to the `redirect_uri` (`redirect_uri` is validated against the saml connection to prevent open redirects). - -### 3.2 Code Exchange - -Once the user logs in successfully at the IdP, IdP sends back the SAML/OIDC response to Jackson. For SAML, the response contains the user profile. In the case of OIDC, the response contains the authorization code that is used by Jackson to obtain token and userprofile from the OIDC IdP. Jackson generates a short lived `code` and stores the user profile against it. After successful authorization, the user is redirected back to the `redirect_uri`. The query parameters will include the `code` and `state` parameters. You should validate that the state matches the one you sent in the `authorize` request. - -The code can then be exchanged for a token by making the following request: - -```bash -curl --request POST \ - --url 'http://localhost:5225/api/oauth/token' \ - --header 'content-type: application/x-www-form-urlencoded' \ - --data 'grant_type=authorization_code' \ - --data 'client_id=' \ - --data 'client_secret=' \ - --data 'redirect_uri=' \ - --data 'code=' -``` - -- `grant_type`: `authorization_code` is the only supported flow, for now. We might extend this in the future -- `client_id`: Use the client_id returned by the SSO connection API or use `tenant=&product=` to use the tenant and product IDs instead. **Note:** Please don't forget to URL encode the query parameters including `client_id`. -- `client_secret`: Use the client_secret returned by the SAML connection API or any arbitrary value if using the tenant and product in the clientID -- `redirect_uri`: This is where the user will be taken back once the authorization flow is complete. Use the same redirect_uri as the previous request - -If everything goes well you should receive a JSON response that includes the access token. This token is needed for the next step where we fetch the user profile. - -```json -{ - "access_token": , - "token_type": "bearer", - "expires_in": 300 -} -``` - -### 3.3 Profile Request - -The short-lived access token can now be used to request the user's profile. You'll need to make the following request: - -```bash -curl --request GET \ - --url 'https://localhost:5225/api/oauth/userinfo' \ - --header 'authorization: Bearer ' -``` - -If everything goes well you should receive a JSON response with the user's profile: - -```json -{ - "id": , - "email": "sjackson@coolstartup.com", - "firstName": "SAML", - "lastName": "Jackson" - "raw": { - ... - }, - "requested": { - ... - } -} -``` - -- `id`: The id of the user as provided by the Identity Provider. (SAML SLO request requires you to pass `id` as `nameId`. Save `id` if you have a plan to implement SLO in the future.) -- `email`: The email address of the user as provided by the Identity Provider -- `firstName`: The first name of the user as provided by the Identity Provider -- `lastName`: The last name of the user as provided by the Identity Provider -- `raw`: This contains all claims attributes returned by the SAML provider -- `requested`: This contains the `tenant`, `product`, `client_id` and `state` from the authorize request. It can be used to reconcile context on the client side if needed - -## 4. SAML SLO - -SLO is a SAML flow that allows an end-user to logout of a single session and be automatically logged out of all linked sessions created during the SSO process. - -The SLO flow begins with redirecting your user to the `/api/logout` endpoint. - -```bash -https://localhost:5225/api/logout - ?nameId=google-auth0-f92cc1834efc0f73e9c09 - &tenant=boxyhq.com - &product=demo - &redirectUrl=http://www.example.com/logout -``` - -- `nameId`: Identifies the subject of a SAML assertion (Typically the user who is authenticated) -- `tenant`: The tentant -- `product`: The product -- `redirectUrl`: Post logout redirect URL - -IdP will send a response (as a POST operation) to a specific URL (Single Logout URL) for the logout request. You need to register this URL on the IdP `/api/logout/callback` to handle the response. - -Jackson will redirect users to `redirectUrl` after the successful logout. - -:::info -You should save the `id` returned by the `userinfo` for an user so that you can use the `id` as `nameId` with SLO request. -::: diff --git a/docs/jackson/sso-providers/auth0.md b/docs/jackson/sso-providers/auth0.md deleted file mode 100644 index 2d093ce..0000000 --- a/docs/jackson/sso-providers/auth0.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Set up your own custom SAML application for Auth0 SAML -sidebar_label: Auth0 SAML ---- - -# Auth0 SAML SSO - -In this section, we will show you how to set up your own custom SAML application for Auth0 SAML. - -## Create Application - -From your Auth0 dashboard, click **Applications** from the left navigation menu. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -![img alt](/img/sso-providers/auth0/1.png) - -If you haven't created a SAML application, click the **Create Application** button to create a new application. - -Give your application a **Name** and click **Create**. - -![img alt](/img/sso-providers/auth0/5.png) - -## Configure Application - -Click the tab **Addons** and enable **SAML2 WEB APP** addon. - -![img alt](/img/sso-providers/auth0/2.png) - -Enter your **Application Callback URL** on the next screen and click **Enable**. - -Replace the values with the ones you have received from SAML Jackson. - -![img alt](/img/sso-providers/auth0/3.png) - -Click the tab **Usage** and download the **Identity Provider Metadata**. - -![img alt](/img/sso-providers/auth0/4.png) - -## Attribute Mapping - -No additional attribute mapping is required for Auth0 SAML to work with SAML Jackson. - -## Next steps - -You've successfully configured your custom SAML application for Auth0 SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Auth0 Doc](https://auth0.com/docs) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/azure.md b/docs/jackson/sso-providers/azure.md deleted file mode 100644 index 74a08c3..0000000 --- a/docs/jackson/sso-providers/azure.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Set up your own custom SAML application for Azure AD SAML -sidebar_label: Azure AD SAML ---- - -# Azure AD SAML SSO - -In this section, we will show you how to set up your own custom SAML application for Azure AD SAML. - -## Create Application - -From your Azure Admin console, click **Enterprise applications** from the left navigation menu. - -![img alt](/img/sso-providers/azure/1.png) - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click **New application** from the top to create a new application. - -![img alt](/img/sso-providers/azure/2.png) - -From the next screen, click **Create your own application**. Give your application a **Name** and click **Create**. - -![img alt](/img/sso-providers/azure/3.png) - -## Configure Application - -Select **Single Sign On** from the **Manage** section of your app and then **SAML**. - -![img alt](/img/sso-providers/azure/4.png) - -Click **Edit** on the **Basic SAML Configuration** section. - -![img alt](/img/sso-providers/azure/5.png) - -Enter the following values in the **Basic SAML Configuration** section on the next screen: - -- **Identifier (Entity ID)** -- **Reply URL (Assertion Consumer Service URL)** - -Replace the values with the ones you have received from SAML Jackson. - -Click **Save** to save your changes. - -![img alt](/img/sso-providers/azure/6.png) - -## Attribute Mapping - -Click **Edit** on the **Attributes & Claims** section. - -![img alt](/img/sso-providers/azure/7.png) - -You have to configure the following attributes under the **Attributes & Claims** section: - -| Name | Value | -| -------------------------------------------------------------------- | ---------------------- | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` | user.mail | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | user.givenname | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` | user.userprincipalname | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | user.surname | - -See the screenshot below. - -![img alt](/img/sso-providers/azure/8.png) - -Go to the section **SAML Signing Certificate** section and download the **Federation Metadata XML**. - -![img alt](/img/sso-providers/azure/9.png) - -## Next steps - -You've successfully configured your custom SAML application for Azure AD SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Azure Admin Console](https://portal.azure.com/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/generic-oidc.md b/docs/jackson/sso-providers/generic-oidc.md deleted file mode 100644 index 6ab50a0..0000000 --- a/docs/jackson/sso-providers/generic-oidc.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Set up app in your OpenID Connect Identity Provider -sidebar_label: OpenID Connect Provider ---- - -# OIDC Provider setup - -To allow apps or clients to login using an OIDC Identity Provider, we must register an application with the IdP. The process might slightly vary from one IdP to another (refer your IdP documentation), but there are a few things in common. - -- **Callback URL**: This will be the URL where Jackson receives the OIDC Authorization response. Make sure to set the full HTTPS URL obtained by concatenating Jackson endpoint with [oidcPath](../deploy/env-variables.md#oidc_path) env. The default value set for `oidcPath` in Jackson service is `/api/oauth/oidc`. -- **Client/Application ID**: The OIDC Identity Provider normally will generate a unique identifier for the registered App. Make a note of this to be used later when creating the SSO connection with Jackson. -- **Client Secret**: Along with the Client ID, the IdP also generates a client secret which is used to authenticate the client while issuing tokens. Make a note of this to be used later when creating the SSO connection with Jackson. - -:::info -Since Jackson acts as a proxy between the app and the OIDC Identity Provider, here the application/client is Jackson. -::: diff --git a/docs/jackson/sso-providers/generic-saml.md b/docs/jackson/sso-providers/generic-saml.md deleted file mode 100644 index f5b9d28..0000000 --- a/docs/jackson/sso-providers/generic-saml.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Set up your own custom SAML application for a Generic IdP -sidebar_label: Generic SAML 2.0 Provider ---- - -# Generic SAML - -This guide explains the settings you’d need to use to configure SAML with your Identity Provider. Once this is set up you should get an XML metadata file that should then be configured using our [API (or calling the API controller connection method if using our NPM)](../sso-flow/index.md#21-add-connection). - -> Please do not add a trailing slash at the end of the URLs. - -Create them exactly as shown below: - -- Assertion consumer service URL / Single Sign-On URL / Destination URL: `http://localhost:5225/api/oauth/saml` - -- Entity ID / Identifier / Audience URI / Audience Restriction: `https://saml.boxyhq.com` - -- Response: `Signed` - -- Assertion Signature: `Signed` - -- Signature Algorithm: `RSA-SHA256` - -- Assertion Encryption: `Unencrypted` - -:::info -The deployed Jackson service has a Service Provider (SP) endpoint that exposes the above metadata and the same can be accessed at `/.well-known/saml-configuration`. -::: - -## SAML profile/claims/attributes mapping - -As outlined in the guide above we try and support 4 attributes in the SAML claims - `id`, `email`, `firstName`, `lastName`. This is how the common SAML attributes map over for most providers, but some providers have custom mappings. Please refer to the documentation on Identity Provider to understand the exact mapping. - -| SAML Attribute | Jackson mapping | -| ---------------------------------------------------------------------- | --------------- | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier` | id | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` | email | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | firstName | -| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | lastName | diff --git a/docs/jackson/sso-providers/google.md b/docs/jackson/sso-providers/google.md deleted file mode 100644 index 0c5b307..0000000 --- a/docs/jackson/sso-providers/google.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Set up your own custom SAML application for Google SAML -sidebar_label: Google SAML ---- - -# Google SAML SSO - -In this section, we will show you how to set up your own custom SAML application for Google SAML. - -## Create Application - -From your Google Admin console, click **Apps** from the sidebar then click **Web and mobile apps** from the list. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click **Add custom SAML app** from the menu. - -![img alt](/img/sso-providers/google/1.png) - -Give your application an **App name** and click **Continue**. - -![img alt](/img/sso-providers/google/2.png) - -## Configure Application - -From the next screen, click **DOWNLOAD METADATA** to download the metadata XML file, then click **Continue**. - -![img alt](/img/sso-providers/google/3.png) - -Enter the following values in the **Service provider details** section: - -- **ACS URL** -- **Entity ID** - -Replace the values with the ones you have received from SAML Jackson and click **Continue** to save the configuration. - -![img alt](/img/sso-providers/google/4.png) - -## Attribute Mapping - -Under the **Attributes** section, you have to configure the following attributes: - -| App attributes | Google directory attributes | -| -------------- | --------------------------- | -| email | Primary email | -| firstName | First name | -| lastName | Last name | - -See the screenshot below. - -After you have configured the attributes, click **Finish** to save the configuration. - -![img alt](/img/sso-providers/google/5.png) - -From the next screen, click **User access** to configure the application to allow users to log in. - -![img alt](/img/sso-providers/google/6.png) - -Check the **ON for everyone** checkbox and click **Save**. - -![img alt](/img/sso-providers/google/7.png) - -## Next steps - -You've successfully configured your custom SAML application for Google SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Google Admin Console](https://admin.google.com/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/index.md b/docs/jackson/sso-providers/index.md deleted file mode 100644 index 17d7adb..0000000 --- a/docs/jackson/sso-providers/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: SAML SSO Providers -sidebar_label: SSO Providers ---- - -# SAML SSO Providers - -SAML Jackson supports the following SSO providers: - -- [Generic SAML 2.0 Provider](./generic-saml.md) -- [Azure](./azure.md) -- [Microsoft AD FS](./microsoft-adfs.md) -- [Okta](./okta.md) -- [Auth0](./auth0.md) -- [Google](./google.md) -- [OneLogin](./onelogin.md) -- [PingOne](./pingone.md) -- [JumpCloud](./jumpcloud.md) -- [Rippling](./rippling.md) -- [OpenID Connect Provider](./generic-oidc.md) diff --git a/docs/jackson/sso-providers/jumpcloud.md b/docs/jackson/sso-providers/jumpcloud.md deleted file mode 100644 index e3e1848..0000000 --- a/docs/jackson/sso-providers/jumpcloud.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Set up your own custom SAML application for JumpCloud SAML -sidebar_label: JumpCloud SAML ---- - -# JumpCloud SAML SSO - -In this section, we will show you how to set up your own custom SAML application for JumpCloud SAML. - -## Create Application - -From your JumpCloud Admin console, click **SSO** from the left navigation menu. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click plus icon and then **Custom SAML App** to create a new application - -![img alt](/img/sso-providers/jumpcloud/1.png) - -Give your application a **Display Label**. - -![img alt](/img/sso-providers/jumpcloud/2.png) - -## Configure Application - -Next click on the **SSO** tab and enter the following values: - -- **IdP Entity ID** -- **SP Entity ID** -- **ACS URL** - -Replace the values with the ones you have received from SAML Jackson. - -![img alt](/img/sso-providers/jumpcloud/3.png) - -## Attribute Mapping - -Under the **Attributes** section, you have to configure the following attributes: - -See the screenshot below. - -| Service Provider Attribute Name | JumpCloud Attribute Name | -| ------------------------------- | ------------------------ | -| email | email | -| firstName | firstname | -| lastName | lastname | - -Make sure you have checked the **Declare Redirect Endpoint** checkbox. - -Finally, click **Activate** to save the application configuration. - -![img alt](/img/sso-providers/jumpcloud/4.png) - -Now go back to the SAML app you just created, click the tab **SSO**, and click the button **Export Metadata** to download the metadata XML file. - -![img alt](/img/sso-providers/jumpcloud/5.png) - -## Next steps - -You've successfully configured your custom SAML application for JumpCloud. At this stage, you can assign users to your application and start using it. - -## Resources - -- [JumpCloud](https://jumpcloud.com/) official website - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/microsoft-adfs.md b/docs/jackson/sso-providers/microsoft-adfs.md deleted file mode 100644 index c9296b6..0000000 --- a/docs/jackson/sso-providers/microsoft-adfs.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Set up your own custom SAML application for Microsoft AD FS -sidebar_label: Microsoft AD FS ---- - -# Microsoft AD FS SAML SSO - -In this section, we will show you how to set up your own custom SAML application for Microsoft AD FS. - -In AD FS, a relying party (RP) trust needs to be set up. You can supply our SP metadata file, usually located at `https:///.well-known/sp-metadata` and let AD FS automatically pick up the configuration. - -If you are manually entering the details then you'll find the details you need in [this section](./generic-saml.md). The public certificate is needed for Signature verification and is usually located at `https:///.well-known/saml.cer` for Signature verification. - -You will also need to map some attributes of the claims so we can fetch the profile information for your user. - -## Create a claims aware Relying Party Trust using federation metadata - -1. In Server Manager, click Tools, and then select AD FS Management. -2. Under Actions, click Add Relying Party Trust. - ![img alt](/img/sso-providers/adfs/addtrust1.png) -3. On the Welcome page, choose Claims aware and click Start. - ![img alt](/img/sso-providers/adfs/addtrust2.png) -4. On the Select Data Source page, click Import data about the relying party published online or on a local network. In Federation metadata address (host name or URL), type the federation metadata URL or host name for the partner, and then click Next. - ![img alt](/img/sso-providers/adfs/addtrust12.png) -5. On the Specify Display Name page type a name in Display name, under Notes type a description for this relying party trust, and then click Next. -6. On the Choose Issuance Authorization Rules page, select either Permit all users to access this relying party or Deny all users access to this relying party, and then click Next. -7. On the Ready to Add Trust page, review the settings, and then click Next to save your relying party trust information. -8. On the Finish page, click Close. This action automatically displays the Edit Claim Rules dialog box. -9. **Mapping attributes**: - On the Configure Claim Rule screen, enter a Claim Rule Name of your choice, select Active Directory as the Attribute Store, then add the following mapping: - -- From the LDAP Attribute column, select `E-Mail-Addresses`. From the Outgoing Claim Type, type `E-Mail Address`. -- From the LDAP Attribute column, select `Given-Name`. From the Outgoing Claim Type, type `Given Name`. -- From the LDAP Attribute column, select `Surname`. From the Outgoing Claim Type, type `Surname`. -- From the LDAP Attribute column, select `User-Principal-Name`. From the Outgoing Claim Type, type `Name ID`. - -10. **Transform Rule**: Create a transform rule mapping the incoming `Email-Address` to outgoing `NameID` (of type `Email`), ADFS by default sends `NameID` as `Unspecified` which results in an `InvalidNameIDPolicy` error if this step is missed. - -![Transform rule](/img/sso-providers/adfs/nameid-email.png) - -If you'd rather use Claim rule language then the following rule can be applied: - -```sh -c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"); -``` - -11. Finally open Windows PowerShell as an administrator, then run the following command: - -```sh - Set-ADFSRelyingPartyTrust -TargetName -SamlResponseSignature "MessageAndAssertion" -``` diff --git a/docs/jackson/sso-providers/okta.md b/docs/jackson/sso-providers/okta.md deleted file mode 100644 index b637831..0000000 --- a/docs/jackson/sso-providers/okta.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Set up your own custom SAML application for Okta SAML -sidebar_label: Okta SAML ---- - -# Okta SAML SSO - -In this section, we will show you how to set up your own custom SAML application for Okta SAML. - -## Create Application - -From your Okta account, click **Applications** from the left navigation menu. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click the **Create App Integration** button to create a new application. - -![img alt](/img/sso-providers/okta/1.png) - -Choose **SAML 2.0** from the next screen and click **Next**. - -![img alt](/img/sso-providers/okta/2.png) - -Give your application an **App Name** and click **Next**. - -![img alt](/img/sso-providers/okta/3.png) - -## Configure Application - -Enter the following values in the **SAML Settings** section on the next screen: - -- **Single sign on URL** -- **Audience URI (SP Entity ID)** -- Select **EmailAddress** from the **Name ID format** dropdown. - -Replace the values with the ones you have received from SAML Jackson. - -![img alt](/img/sso-providers/okta/4.png) - -## Attribute Mapping - -Under the **Attribute Statements** section, you have to configure the following attributes: - -| Name | Value | -| --------- | -------------- | -| id | user.id | -| email | user.email | -| firstName | user.firstName | -| lastName | user.lastName | - -See the screenshot below. - -![img alt](/img/sso-providers/okta/5.png) - -On the next screen select **I'm an Okta customer adding an internal app** and click **Finish**. - -![img alt](/img/sso-providers/okta/6.png) - -From your application, click **Sign On** tab and go to the section **SAML Signing Certificates** - -Click the **Actions** dropdown for the correct certificate and click **View IdP metadata**. A separate window will open with the metadata XML file, you can copy it to your clipboard. - -![img alt](/img/sso-providers/okta/7.png) - -## Next steps - -You've successfully configured your custom SAML application for Okta SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Okta](https://www.okta.com/) official website -- Visit [Okta documentation](https://developer.okta.com/docs/concepts/saml/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/onelogin.md b/docs/jackson/sso-providers/onelogin.md deleted file mode 100644 index 6764cdd..0000000 --- a/docs/jackson/sso-providers/onelogin.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Set up your own custom SAML application for OneLogin SAML -sidebar_label: OneLogin SAML ---- - -# OneLogin SAML SSO - -In this section, we will show you how to set up your own custom SAML application for OneLogin SAML. - -## Create Application - -From your OneLogin account, click **Applications** from the top navigation menu. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click the **Add App** button to create a new application. - -![img alt](/img/sso-providers/onelogin/1.png) - -Search for **SAML Test Connector** in the **Find Applications** section. Select **SAML Custom Connector (Advanced)** from the search results. - -![img alt](/img/sso-providers/onelogin/2.png) - -Give your application a **Display Name** and click **Save**. - -![img alt](/img/sso-providers/onelogin/3.png) - -## Configure Application - -From your application, click the **Configuration** tab on the left to configure the application. - -You have to enter the following values in the **Application details** section: - -- **Audience (Entity ID)** -- **ACS (Consumer) URL Validator** -- **ACS (Consumer) URL** -- Select the **Service Provider** from the **SAML initiator** dropdown. - -Replace the values with the ones you have received from SAML Jackson. - -Click **Save** to save the configuration. - -![img alt](/img/sso-providers/onelogin/4.png) - -![img alt](/img/sso-providers/onelogin/7.png) - -Click the dropdown menu **More Actions** from the top right corner and click **SAML Metadata** to download the metadata XML file. - -![img alt](/img/sso-providers/onelogin/5.png) - -## Attribute Mapping - -From your application, click the **Parameters** tab on the left. - -You have to configure the following attributes: - -| SAML Custom Connector Field | Value | -| --------------------------- | ---------- | -| id | UUID | -| email | Email | -| firstName | First Name | -| lastName | Last Name | - -See the screenshot below. - -![img alt](/img/sso-providers/onelogin/6.png) - -See the below screenshot to see how to map the **id** attribute to **UUID**. - -Enter **id** in the **Field name** input and check the **Include in SAML assertion** checkbox. Click **Save** to continue. - -![img alt](/img/sso-providers/onelogin/8.png) - -On the next screen, select **UUID** from the **Value** dropdown and click **Save**. - -![img alt](/img/sso-providers/onelogin/9.png) - -Do the same for the other attributes (email, firstName, lastName). - -## Next steps - -You've successfully configured your custom SAML application for OneLogin SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [OneLogin](https://www.onelogin.com/) official website -- Visit [OneLogin documentation](https://developers.onelogin.com/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/pingone.md b/docs/jackson/sso-providers/pingone.md deleted file mode 100644 index 47b76fa..0000000 --- a/docs/jackson/sso-providers/pingone.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Set up your own custom SAML application for PingOne SAML -sidebar_label: PingOne SAML ---- - -# PingOne SAML SSO - -In this section, we will show you how to set up your own custom SAML application for PingOne SAML. - -## Create Application - -From your PingOne account, click **Connections** > **Applications** from left navigation menu. - -If your application is already created, choose it from the list and move to the section [Configure Application](#configure-application) - -If you haven't created a SAML application, click plus button to create a new application. - -![img alt](/img/sso-providers/pingone/1.png) - -Give your application a **Application Name**, choose **SAML Application** from the **Application Type** and click **Configure**. - -## Configure Application - -![img alt](/img/sso-providers/pingone/2.png) - -From the next screen, you have to enter the following values in the **SAML Configuration** section: - -- **ACS URLs** -- **Entity ID** - -Replace the values with the ones you have received from SAML Jackson. - -Click **Save** to save the configuration. - -![img alt](/img/sso-providers/pingone/3.png) - -Click the **Configuration** tab from the top and click **Download Metadata** to download the metadata XML file. - -![img alt](/img/sso-providers/pingone/4.png) - -## Attribute Mapping - -Click the **Attribute Mappings** tab from the top and you have to configure the following attributes: - -| SAML App | PingOne | -| --------- | ------------- | -| id | User ID | -| email | Email Address | -| firstName | Given Name | -| lastName | Family Name | - -See the screenshot below. - -![img alt](/img/sso-providers/pingone/5.png) - -Make sure you have enabled your app so that it can be used by the users. You can do this by clicking the **Toggle** button next to your app. - -![img alt](/img/sso-providers/pingone/6.png) - -## Next steps - -You've successfully configured your custom SAML application for PingOne SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Ping Identity Website](https://www.pingidentity.com/en.html) -- [Ping Identity Documentation](https://docs.pingidentity.com/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/sso-providers/rippling.md b/docs/jackson/sso-providers/rippling.md deleted file mode 100644 index a85fd39..0000000 --- a/docs/jackson/sso-providers/rippling.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Set up your own custom SAML application for Rippling SAML -sidebar_label: Rippling SAML ---- - -# Rippling SAML SSO - -This section will show you how to set up your own custom SAML application for Rippling SAML. - -## Create Application - -You'll need to create a new **Custom App** from your Rippling account if the app is not already in the Rippling app directory. - -Go to **IT Management** > **Custom App** from the left navigation menu. - -![img alt](/img/sso-providers/rippling/1.png) - -Click **Create New App** button to create a new application. - -From the next screen, fill in the following fields: - -- **App Name** -- **Select Categories** -- **Upload Logo** -- **What type of app would you like to create?** - Make sure you select **Single Sign-On (SAML)** from the list. - -![img alt](/img/sso-providers/rippling/2.png) - -## Configure Application - -Copy the **Idp Metadata URL** or **Idp Metadata XML** from the next screen. You'll need this value to configure your SAML connection in SAML Jackson. - -![img alt](/img/sso-providers/rippling/3.png) - -You'll need to enter the **ACS URL** and **Entity ID**. You'll get these values from SAML Jackson. - -![img alt](/img/sso-providers/rippling/4.png) - -Make sure that **Service Provider Entity ID** matches the **SAML Audience (SP Entity ID)** value from SAML Jackson. - -From the **Settings** tab of custom app you just created. Go to **Advanced SAML Settings** section and check the box for **Disable InResponseTo field in assertions for IdP initiated SSO**. - -This is because Rippling sends dummy values for the **InResponseTo** field and SAML Jackson will try to validate the **InResponseTo** field if it is present. - -![img alt](/img/sso-providers/rippling/5.png) - -## Next steps - -You've successfully configured your custom SAML application for Rippling SAML. At this stage, you can assign users to your application and start using it. - -## Resources - -- [Rippling](https://www.rippling.com/) official website -- Visit [Rippling documentation](https://developer.rippling.com/) - -:::tip -Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -::: diff --git a/docs/jackson/upgrade.md b/docs/jackson/upgrade.md deleted file mode 100644 index 7afebfc..0000000 --- a/docs/jackson/upgrade.md +++ /dev/null @@ -1,35 +0,0 @@ -# Upgrade Guide - -## Upgrading to v1.11.0 - -We have patched the SSO connection (`/api/v1/connections`) DELETE handler to accept payload (client/Secret or tenant/product/strategy) as part of query parameters. Earlier, the payload was expected to be part of the body which is non-standard and is no longer supported in Next.js. - -## Upgrading to v1.9.7 - -We discovered and fixed a database connection leak introduced in v1.9.1, if you are using versions 1.9.1 to 1.9.6 then please upgrade to v1.9.7 - -## Upgrading to v1.8.0 - -1. We support bringing your own database (BYOD), this is a very tricky feature to support and we are still iterating on the schema which works as seamlessly as possible across the range of databases we support. Unfortunately, not everything goes smoothly here and we have encountered some length issues on newer versions of MySQL and MariaDB. The best way forward was to change the schema of the keys we use from length 1500 to 250 which is compatible with the newer versions. As a result, this will break your updates if you are using MySQL, MariaDB, or MS SQL Server. If you encounter this please reach out and we'll guide you through the update process. If you haven't gone into production yet then please update to v1.8.0 before you deploy it to production. - -## Upgrading to v1.3.10 - -1. For users of our npm library, `directorySync` has been renamed to `directorySyncController`. - -## Upgrading to v1.3.6 - -1. `samlSPConfig.get()` is now async since we introduced a global certificate instead of per tenant certificate to ease the SAML setup process. - -## Upgrading to v1.3.0 - -1. Landed support for OpenID Identity Providers. -2. Landed new API (`/api/v1/connections`) to support setting up both SAML/OIDC SSO Connections. - - **Note:** The previous API for SAML configuration `/api/v1/saml/config` has been deprecated, and would be completely removed in a future release. - -3. Renamed env variable `PRE_LOADED_CONFIG` to [`PRE_LOADED_CONNECTION`](deploy/env-variables.md#pre_loaded_connection) for Jackson service. In the case of npm `preLoadedConfig` becomes`preLoadedConnection`. -4. Make sure to set the value for [`oidcPath`](deploy/env-variables.md#oidc_path) in case you are using the npm. - -## Backups - -Please remember to take backups before upgrading Jackson. We cannot stress how important this step is, although we take precautions to avoid bugs they sometimes do slip by us. Having backups will not only help you recover from these rare events but should be part of your disaster recovery process. If you need any help with this please do not hesitate to reach out to us. diff --git a/docs/retraced/advanced/automated-audit-events.md b/docs/retraced/advanced/automated-audit-events.md deleted file mode 100644 index d3ba545..0000000 --- a/docs/retraced/advanced/automated-audit-events.md +++ /dev/null @@ -1,64 +0,0 @@ -# Automated Audit Events - -When an end customer uses a Viewer or Enterprise token to view logs directly from the Retraced API, Retraced will record the read event in your audit log. - -You can configure these events with the optional `view_log_action` parameter when you create a new Viewer or Enterprise token through the Publisher API. The default action is "audit.log.view". Viewer tokens also require an `actor_id` parameter at creation time, while Enterprise token audit events generate an `actor.id` from the token. - -## Viewer Example - -Suppose a viewer token was created with `group_id=example.com`, `actor_id=user@example.com` and `action=viwer.view_logs`. When the token is used, an event like this will be inserted into your audit log: - -```json -{ - "action": "viewer.view_logs", - "crud": "r", - "actor": { - "id": "user@example.com" - }, - "group": { - "id": "example.com" - }, - "description": "GET http://localhost:3000/auditlog/viewer/v1/graphql", - "source_ip": "1.1.0.180" -} -``` - -## Enterprise Example - -An Enterprise token created with `group_id` "example.com" and no `view_log_action` would generate an event similar to this when used: - -```json -{ - "action": "audit.log.view", - "crud": "r", - "actor": { - "id": "enterprise:1234567" - }, - "group": { - "id": "example.com" - }, - "description": "GET http://localhost:3000/auditlog/enterprise/v1/graphql", - "source_ip": "1.1.0.180" -} -``` - -## Viewer Enterprise Token Self-Management - -Another instance where Viewers can perform actions bypassing your API is when creating, retrieiving, updating, or deleting their own Enterprise tokens. Retraced will add these events to your audit log on your behalf. Note that Retraced does not insert audit events when Enterprise tokens are managed through the Publisher API, since you have the option of sending your own audit events for these actions. - -An example of an event logged when a Viewer creates their own Enterpise token is: - -```json -{ - "action": "eitapi_token.create", - "crud": "c", - "actor": { - "id": "user@example.com" - }, - "group": { - "id": "example.com" - }, - "description": "POST http://localhost:3000/auditlog/viewer/v1/project/02211171900c4172b4a80d23855961c5/eitapi_token", - "source_ip": "1.1.0.180" -} -``` diff --git a/docs/retraced/advanced/display-templates.md b/docs/retraced/advanced/display-templates.md deleted file mode 100644 index 1ac1fab..0000000 --- a/docs/retraced/advanced/display-templates.md +++ /dev/null @@ -1,86 +0,0 @@ -# Display Templates - -Display templates is an important part of controlling how the events are rendered in the browser, exports or over any other stream. - -A display template has the following components: - -## Definitions - -### Name - -The name is internal only to the admin site. This is a place for you to record what the template is attempting to do. - -### Rules - -The rules field is a collection of rules that will be evaluated by the Retraced rules engine to determine if this template shoud be applied to the event. We'll cover that in detail shortly. But the idea is that you can have multiple rules, and the first one that matches will control how the event is rendered. - -### Template - -A handlebars-enabled, markdown rendered display template to use when the rules evaluate to true for a particular event. This ultimately is the text that you want to show for the matching events. - -## Rules - -Rules are processed against the event object. The best example is with actual data: you can click the Raw object in the admin site and see any actual event object. This is the exact context that is sent into the rule engine. - -Rules are expressed as an array of comparators. When the _value_ of the _path_ matches the _comparator_, the rule evaluates to true and the template is applied. Retraced supports a large number of comparators, a [full list of comparators is available](/docs/retraced/advanced/template-comparators). - -### Examples - -This rule matches when the `action` is set to the string "document.edit": - -```json -[ - { - "comparator": "is", - "path": "action", - "value": "document.edit" - } -] -``` - -This rule matches when the `action` is set to the string "document.edit" AND the type of the document is set to "spreadsheet": - -```json -[ - { - "comparator": "is", - "path": "action", - "value": "document.edit" - }, - { - "comparator": "is", - "path": "target.type", - "value": "spreadsheet" - } -] -``` - -## Templates - -Templates are a handlebars string that will be used to display the event. The context of the handlebars engine is the event object, and the output is a markdown string. - -### Examples - -Partial Event: - -```json -{ - "action": "document.create", - "actor": { - "name": "Dr. Evil" - }, - "target": { - "type": "spreadsheet", - "name": "Master Plan For World Domination.xlsx" - } -} -``` - -Template: - -``` -**{{ actor.name }}** created the document **{{ target.name }}** -``` - -Result: -**Dr. Evil** created the document **Master Plan For World Domination** diff --git a/docs/retraced/advanced/index.md b/docs/retraced/advanced/index.md deleted file mode 100644 index 929fbc0..0000000 --- a/docs/retraced/advanced/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Retraced Advanced Concepts -sidebar_label: Overview ---- - -# Advanced Concepts - -Once you've started sending events into Retraced, it's time to explore some of the advanced functionality. - -- [Display templates](/docs/retraced/advanced/display-templates) -- [Template Comparators](/docs/retraced/advanced/template-comparators) - -- [Tracking Application Versions](/docs/retraced/advanced/tracking-application-versions) -- [Automated Audit Events](/docs/retraced/advanced/automated-audit-events) diff --git a/docs/retraced/advanced/ssh-streaming.md b/docs/retraced/advanced/ssh-streaming.md deleted file mode 100644 index a725447..0000000 --- a/docs/retraced/advanced/ssh-streaming.md +++ /dev/null @@ -1,31 +0,0 @@ -# SSH Event Streaming - -SSH Event Streaming allows Enterprise API users to stream events as they occur over ssh using an Enterprise API Token. - -## Usage - -To use the SSH event streaming feature, you'll need to start by getting an -[Enterprise API token](/docs/retraced/apis/enterprise-api#getting-an-enterprise-api-token). - -To open a stream, connect to `tail.retraced.io` using your Enterprise API token as -the username: - -``` -ssh aeb1c315b9a8ed11a3f998d8e8ff@tail.retraced.io -``` - -Once the connection is open, CSV events will begin to stream through stdout, -and can be piped to a file or other event ingest system. - -The same token can be used for multiple concurrent streaming sessions, all sessions -will receive every event that occurs while they are active. - -## Parameters - -The streaming APIs support a few parameters that can control the format of events. -The default output format is CSV, but JSON is also supported via the -`format` parameter - -```sh -ssh aeb1c315b9a8ed11a3f998d8e8ff?format=json@tail.retraced.io -``` diff --git a/docs/retraced/advanced/template-comparators.md b/docs/retraced/advanced/template-comparators.md deleted file mode 100644 index 956bd2f..0000000 --- a/docs/retraced/advanced/template-comparators.md +++ /dev/null @@ -1,19 +0,0 @@ -# Template Comparators - -The following values are acceptable for "comparator" field in rules in the Retraced rules engine: - -| Comparator | Desscription | -| --- | --- | -| `eq` | Matches when the `value` is equal to the event object data at `path`. This compares values only and doesn't compare types. | -| `is` | The same as `eq` but it also compares types of objects. | -| `neq` | Matches when the `value` is not equal to the event object data at `path`. This compares values only and doesn't compare types. This is the inverse of `eq`. | -| `not` | The same as `neq` but it also compares types of objects. This is the inverse of `is`. | -| `lt` | Matches when the `value` is less than the event object data at `path`. | -| `lte` | Matches when the `value` is less than or equal to the event object data at `path`. | -| `gt` | Matches when the `value` is greater than the event object data at `path`. | -| `gte` | Matches when the `value` is greater than or equal to the event object data at `path`. | -| `exists` | Matches when the `value` key exists and is not null on the event object data. | -| `nexists` | Matches when the `value` key does not exists or is null on the event object data. | -| `contains` | Matches when the event object data at `path` contains `value`. | -| `ncontains` | Matches when the event object data at `path` does not contain `value`. | -| `matches` | This rule is a raw regex rule. When the `value` is interpreted as a regular expression and applied to the event object data at `path`, returns the regex match value. | diff --git a/docs/retraced/advanced/tracking-application-versions.md b/docs/retraced/advanced/tracking-application-versions.md deleted file mode 100644 index f9e12fd..0000000 --- a/docs/retraced/advanced/tracking-application-versions.md +++ /dev/null @@ -1,89 +0,0 @@ -# Tracking Event Publisher Versions - -When sending events to Retraced, consumers of the [Publisher API](/docs/retraced/apis/publisher-api) -may send event metadata like the name and version of the vendor component that is -sending the events. A minimal event payload that includes this metadata might look like - -```json -{ - "action": "user.login", - "crud": "c", - "group": { - "id": "7890123", - "name": "some.customer" - }, - "actor": { - "id": "123456", - "name": "user@example.com" - }, - "component": "authentication-api", - "version": "ae242df" -} -``` - -Where `component` describes a single versioned piece of a architecture like `authentication-api` -or `spreadsheet-processor` and `version` is usually one of - -- A git SHA of the component's source code as in `ae242df` -- A semantic version for the component as in `1.0.3` -- A build number of the component as in `129` - -Sending this information to Retraced will allow Retraced to give better -guarantees about time windows during which an event **did not** occur. - -## Example - -To better understand how this works, consider the following stream of events, -in which the `password.change` action at 12:35 is the very first `password.change` -event seen in Retraced, because a recent new release of the vendor app is the first -to start tracking `password.change` events. - -| action | received | -| ----------------- | ------------------- | -| `email.change` | 2017-01-01 11:14:00 | -| `user.login` | 2017-01-01 11:30:00 | -| `email.change` | 2017-01-01 12:01:00 | -| `user.login` | 2017-01-01 12:12:00 | -| `password.change` | 2017-01-01 12:35:00 | -| `user.login` | 2017-01-01 12:49:00 | -| `password.change` | 2017-01-01 12:52:00 | - -Without any info about app versions, we can still say for certain that - -- no `password.change` events occured between 12:35 and 12:52. - -We cannot say anything about whether or not any `password.change` events -occurred before 12:35, because we have to assume that the vendor application -was not publishing these events until we see the first one at 12:35. - -| action | received | component | version | -| ----------------- | ------------------- | -------------------- | --------- | -| `email.change` | 2017-01-01 11:14:00 | `authentication-api` | `aeb22f1` | -| `user.login` | 2017-01-01 11:30:00 | `authentication-api` | `aeb22f1` | -| `email.change` | 2017-01-01 12:01:00 | `authentication-api` | `fd02eed` | -| `user.login` | 2017-01-01 12:12:00 | `authentication-api` | `fd02eed` | -| `password.change` | 2017-01-01 12:35:00 | `authentication-api` | `fd02eed` | -| `user.login` | 2017-01-01 12:49:00 | `authentication-api` | `fd02eed` | -| `password.change` | 2017-01-01 12:52:00 | `authentication-api` | `493ef1d` | - -Since we know the version of the component sending each event, we can know for sure -that the app version that sends `password.change` events was sending `email.change` events as -early as 12:01. In addition to what we knew before, that - -- no `password.change` events occured between 12:35 and 12:52 - -we now can also guarantee that - -- no `password.change` events occurred between 12:01 and 12:35. - -Note: Being able to make these guarantees relies on an assumption that application -versions change at the same time, and that there are never multiple versions of -a single component running in parallel for significant periods of time. If -Publisher API consumers rely on canary deploys or staged rollouts over several days, -then component names will need to be rotated during the rollout. - -## Using SDKs - -If you are using one of the official [Retraced SDKs](/docs/retraced/sdks/available-sdks), -you can provide the `version` and `component` fields when the client is initialized, -and they will be sent for every event. diff --git a/docs/retraced/apis/admin-api.md b/docs/retraced/apis/admin-api.md deleted file mode 100644 index 8273772..0000000 --- a/docs/retraced/apis/admin-api.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Admin API -sidebar_label: Admin API -description: Admin API ---- - -# Admin API - -### [Swagger JSON](http://localhost:3000/auditlog/admin/v1/swagger.json) | [API Console](https://retraced.readme.io/v1.0/reference) - -## Authentication - -The Admin API expects a base64-encoded hmac-signed [JSON Web Token](https://tools.ietf.org/html/rfc7519) in an `Authorization` header: - -``` -Authorization: WU9VUl9TSUdORURfSldUX1RPS0VOX18K... -``` diff --git a/docs/retraced/apis/enterprise-api.md b/docs/retraced/apis/enterprise-api.md deleted file mode 100644 index d6d465b..0000000 --- a/docs/retraced/apis/enterprise-api.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Enterprise API -sidebar_label: Enterprise API -description: Enterprise API ---- - -# Enterprise API - -### [Swagger JSON](http://localhost:3000/auditlog/enterprise/v1/swagger.json) | [API Console](https://retraced.readme.io/v1.0/reference) - -## Overview - -The Enterprise API is the API that the end customer (the enterprise IT administrator) will consume to pull their organization events and ingest it into their own internal systems. - -## Authentication - -The Enterprise API endpoints expect the token to be provided in a header of the form - -``` -Authorization: token=YOUR_ENTERPRISE_TOKEN -``` - -## Getting an Enterprise API Token - -There are currently two ways to manage Enterprise API tokens. - -- Most often, end customers create and manage Enterprise IT tokens using the UI in the [Embedded Viewer](/docs/retraced/getting-started/embedded-viewer) -- There are also endpoints in the [Publisher API](/docs/retraced/apis/publisher-api) that - allow a vendor to create, edit, and delete Enterprise API tokens - -Note that to allow end customers to manage Enterprise API tokens in the embedded viewer, -the `is_admin` query parameter must be set to `true` when [requesting a token to initialize the embedded viewer](https://retraced.readme.io/reference#publisherv1projectprojectidviewertoken) diff --git a/docs/retraced/apis/graphql.md b/docs/retraced/apis/graphql.md deleted file mode 100644 index 205ad78..0000000 --- a/docs/retraced/apis/graphql.md +++ /dev/null @@ -1,803 +0,0 @@ -# GraphQL Endpoint - -The recommended way to search events using an API is to POST your query and variables to the appropriate Retraced GraphQL endpoint. - -| API | Endpoint | -| ---------- | ----------------------------------------------------------------------------------------------- | -| Publisher | http://localhost:3000/auditlog/publisher/v1/project/{projectId}/graphql | -| Admin | http://localhost:3000/auditlog/admin/v1/project/{projectId}/environment/{environmentId}/graphql | -| Enterprise | http://localhost:3000/auditlog/enterprise/v1/graphql | -| Viewer | http://localhost:3000/auditlog/viewer/v1/graphql | - -## Search - -The query root provides a search method. A fully-formed query for a subset of event fields would look like this: - -``` -{ - search(query:"action:user.login location:Germany", last:50, before:"opaquecursor") { - totalCount - pageInfo { - hasNextPage - } - edges { - cursor - node { - action - actor { - name - } - created - country - } - } - } -} -``` - -### Variables - -Use `query`, `last`, and `before` variables to enable reuse of your query templates. If you define a parameterized query like this... - -``` -const searchQuery = `query Search($query: String!, $last: Int, $before: String) { - search(query:"action:user.login location:Germany", last:50, before:"opaquecursor") { - totalCount - pageInfo { - hasNextPage - } - edges { - cursor - node { - action - actor { - name - } - created - country - } - } - } -}`; -``` - -... then you can execute searches like this: - -``` -const vars = { - query: "action:user.login location:German", - last: 50, - before: "opaquecursor", -}; -const res = fetch("http://localhost:3000/auditlog/publisher/v1/project/3hf140713bn302/graphql", { - method: "POST", - headers: { - "Accept": "application/json", - "Content-Type": "application/json", - "Authorization": "Token token=2ba3059ad7f14071b9befb2a7a2e195e", - }, - body: JSON.stringify({ - query: searchQuery, - variables: vars, - }), -}); -``` - -# Schema Types - -
- Table of Contents - -- [GraphQL Endpoint](#graphql-endpoint) - - [Search](#search) - - [Variables](#variables) -- [Schema Types](#schema-types) - - [Query](#query) - - [Objects](#objects) - - [Action](#action) - - [Actor](#actor) - - [Display](#display) - - [Event](#event) - - [EventEdge](#eventedge) - - [EventsConnection](#eventsconnection) - - [Field](#field) - - [Group](#group) - - [PageInfo](#pageinfo) - - [Target](#target) - - [Enums](#enums) - - [CRUD](#crud) - - [Scalars](#scalars) - - [Boolean](#boolean) - - [ID](#id) - - [Int](#int) - - [String](#string) - - [Interfaces](#interfaces) - -
- -## Query - -The root query object of the Retraced GraphQL interface. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
searchEventsConnection - -Run an advanced search for events. - -
queryString - -The structured search operators used to filter events. - -
firstInt - -The limit of events to return, sorted from oldest to newest. It can optionally be used with the after argument. - -
afterString - -A cursor returned from a previous query. - -
lastInt - -The limit of events to return, sorted from newest to oldest. It can optionally be used with the before argument. - -
beforeString - -A cursor returned from a previous query. - -
- -## Objects - -### Action - -An action. - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
actionString - -The action field of an event such as "user.login". - -
- -### Actor - -The agent who performed an event. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
idID - -A unique id representing this actor. - -
nameString - -The name of this actor. - -
hrefString - -The URL associated with this actor. - -
fields[Field] - -The set of fields associated with this actor. - -
- -### Display - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
markdownString
- -### Event - -A single record in an audit log. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
idID - -A unique id representing this event. - -
actionString - -The type of action that was taken to generate this event. - -
descriptionString - -The description of the event that was taken. - -
groupGroup - -The group associated with this event. - -
actorActor - -The actor associated with this event. - -
targetTarget - -The target associated with this event. - -
crudCRUD - -The classification of this event as create, read, update, or delete. - -
displayDisplay - -The display text for this event. - -
receivedString - -The time that the Retraced API received this event. - -
createdString - -The time that this event was reported as performed. - -
canonical_timeString - -The created time if specified; else the received time. - -
is_failureBoolean - -Set to true if the event represents a failed use of permissions. - -
is_anonymousBoolean - -Set to true if the user was not logged in when performing this action. - -
source_ipString - -The IP address of the actor when the action was performed. - -
countryString - -The country that the actor was in when the action was performed. - -
loc_subdiv1String - -The large area of the country the actor was in when the action was performed (State). - -
loc_subdiv2String - -The granular area of the country the actor was in when the action was performed (City). - -
componentString - -An identifier for the vendor app component that sent the event. - -
versionString - -An identifier for the version of the vendor app that sent the event, usually a git SHA - -
fields[Field] - -The set of fields associated with this event. - -
rawString - -The raw event sent to the Retraced API. - -
- -### EventEdge - -The event and cursor for a single result. - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
nodeEvent - -The event object. - -
cursorString - -An opaque cursor for paginating from this point in the search results. Use it as the after argument to paginate forward or the before argument to paginate backward. - -
- -### EventsConnection - -The results of a search query. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
edges[EventEdge] - -The events and cursors matching the query. - -
pageInfoPageInfo - -Indications that more search results are available. - -
totalCountInt - -The total number of search results matched by the query. - -
- -### Field - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
keyString - -The key for this field. - -
valueString - -The value for this field. - -
- -### Group - -The group this event is associated with. - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
idID - -A unique id representing this group. - -
nameString - -The name of this group. - -
- -### PageInfo - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
hasNextPageBoolean - -When paging forward with first, indicates more results are available. - -
hasPreviousPageBoolean - -When paging backward with last, indicates more results are available. - -
- -### Target - -The object an event is performed on. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldArgumentTypeDescription
idID - -A unique id representing this target. - -
nameString - -The name of this target. - -
hrefString - -The URL associated with this target. - -
typeString - -The type of this target entity. - -
fields[Field] - -The set of fields associated with this target. - -
- -## Enums - -### CRUD - -Create | Read | Update | Delete - - - - - - - - - - - - - - - - - - - - - - - - -
ValueDescription
c - -create - -
r - -read - -
u - -update - -
d - -delete - -
- -## Scalars - -### Boolean - -The `Boolean` scalar type represents `true` or `false`. - -### ID - -The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. - -### Int - -The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. - -### String - -The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. - -## Interfaces diff --git a/docs/retraced/apis/index.md b/docs/retraced/apis/index.md deleted file mode 100644 index 870ec0f..0000000 --- a/docs/retraced/apis/index.md +++ /dev/null @@ -1,289 +0,0 @@ -# API Documentation -Retraced API - -## Version: 1.4.6 - - -**License:** UNLICENSED - -### /enterprise/v1/graphql - -#### POST -##### Description: - -Query events with [GraphQL](/docs/retraced/apis/admin-api) - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form Token token= ... | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 200 | OK | - -null - -### /enterprise/v1/search/active - -#### POST -##### Description: - -Initiate an active search. An active search will maintain -a persistent cursor that can be used at a later date to -retrieve additional events from the search. - - -Authenticate with an Enterprise API token. - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | header of the form token= ... | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -### /enterprise/v1/search/saved - -#### POST -##### Description: - -Create a saved search. -Saved searches have an ID that can be used to initiate an active search. - -Authenticate with an Enterprise API token. - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | header of the form token= ... | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -### /publisher/v1/project/{projectId}/event - -#### POST -##### Description: - -Create an event. Returns the id of the created event, and -a cryptographic hash of the received event, as described [here](/docs/retraced/architecture/hashing-formula/). - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -### /publisher/v1/project/{projectId}/event/bulk - -#### POST -##### Description: - -Create one or more events. Returns a list of the ids of the created event and -a cryptographic hash of each received events, as described [here](/docs/retraced/architecture/hashing-formula/). - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -### /publisher/v1/project/{projectId}/viewertoken - -#### GET -##### Description: - -Create a token for use with the Retraced embedded viewer as described [here](/docs/retraced/getting-started/embedded-viewer/). - -**Note**: At least one of `group_id` or `team_id` is required. - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | -| actor_id | query | | Yes | string | -| group_id | query | The group identifier. Same as `team_id`. If both are passed, `group_id` will be used. | No | string | -| is_admin | query | Whether to display the Enterprise Settings and API Token Management. Set to `true` to show the settings. | No | string | -| target_id | query | If passed, only events relating to this target will be returned in a viewer that uses the token created | No | string | -| team_id | query | Same as `group_id`. If both are passed, `group_id` will be used. This field is deprecated. | No | string | -| view_log_action | query | The action that will be logged when the token is used | No | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -### /publisher/v1/project/{projectId}/group/{groupId}/enterprisetoken - -#### POST -##### Description: - -Create a token for use with [Enterprise IT API](/docs/retraced/apis/enterprise-api/ - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | -| groupId | path | The group identifier. The generated token will be scoped to the specified group. | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 201 | Created | - -null - -#### GET -##### Description: - -List all [Enterprise IT API](/docs/retraced/apis/enterprise-api/) tokens. - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | -| groupId | path | The group identifier. | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 200 | OK | - -null - -### /publisher/v1/project/{projectId}/group/{groupId}/enterprisetoken/{tokenId} - -#### GET -##### Description: - -Retrieve an [Enterprise IT API](/docs/retraced/apis/enterprise-api/) token. - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | The project id. | Yes | string | -| groupId | path | The group identifier. | Yes | string | -| tokenId | path | The token id. | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 200 | OK | - -null - -#### PUT -##### Description: - -Update an [Enterprise IT API](/docs/retraced/apis/enterprise-api/) token - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | -| groupId | path | The group identifier. | Yes | string | -| tokenId | path | The token to update. | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 200 | OK | - -null - -#### DELETE -##### Description: - -Delete an [Enterprise IT API](/docs/retraced/apis/enterprise-api/) token - - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form token= ... | Yes | string | -| projectId | path | the project id | Yes | string | -| groupId | path | The group identifier. | Yes | string | -| tokenId | path | The token to delete. | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 204 | Deleted | - -null - -### /publisher/v1/project/{projectId}/graphql - -#### POST -##### Description: - -Query events with [GraphQL](/docs/retraced/apis/graphql/) - -##### Parameters - -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| Authorization | header | auth header of the form Token token= ... | Yes | string | -| projectId | path | the project id | Yes | string | - -##### Responses - -| Code | Description | -| ---- | ----------- | -| 200 | OK | - -null diff --git a/docs/retraced/apis/overview.md b/docs/retraced/apis/overview.md deleted file mode 100644 index fd65ab4..0000000 --- a/docs/retraced/apis/overview.md +++ /dev/null @@ -1,19 +0,0 @@ -# Retraced APIs Overview - -Retraced provides several APIs: - -## Publisher API - -the [Publisher API](/docs/retraced/apis/publisher-api) is the primary API that an application vendor will use to send events into Retraced. This is the API that the [Retraced SDKs](/docs/retraced/sdks/available-sdks) consume. When getting started, this is the first place to start. Use the Publisher API to start sending events into Retraced. - -## Enterprise API - -The [Enterprise API](/docs/retraced/apis/enterprise-api) is the API that the end customer (the enterprise IT administrator) will consume to pull their organization events and ingest it into their own internal systems. - -## Admin API - -The [Admin API](/docs/retraced/apis/admin-api) is an optional API that can be used in place of the Retraced Admin site. The Retraced Admin site uses this API. It's useful to managing your account and API tokens and pulling reports. - -## Swagger Documentation - -### [Retraced API Console](https://retraced.readme.io) | [Publisher API Swagger JSON](http://localhost:3000/auditlog/publisher/v1/swagger.json) | [Enterprise API Swagger JSON](http://localhost:3000/auditlog/enterprise/v1/swagger.json) | [Admin API Swagger JSON](http://localhost:3000/auditlog/admin/v1/swagger.json) diff --git a/docs/retraced/apis/publisher-api.md b/docs/retraced/apis/publisher-api.md deleted file mode 100644 index 263de37..0000000 --- a/docs/retraced/apis/publisher-api.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Publisher API -sidebar_label: Publisher API -description: Publisher API ---- - -# Publisher API - -### [Swagger JSON](http://localhost:3000/auditlog/publisher/v1/swagger.json) | [API Console](https://retraced.readme.io/v1.0/reference) - -The Publisher API is the API that most applications will embed into a production system. This API contains the methods necessary to send new events into Retraced, create [viewer tokens](/docs/retraced/getting-started/embedded-viewer) and to programmatically search events when the embedded viewer is not being used. - -When possible, it's recommended to use one of the supported [SDKs](/docs/retraced/sdks/available-sdks) as these provide an easier way to get started. - -To consume the Publisher API directly, we publish a Swagger spec that is both [documented](https://retraced.readme.io/reference) and available in a [raw json object](http://localhost:3000/auditlog/publisher/v1/swagger.json). -The endpoints for reporting events are `/project/{project_id}/event` and `/project/{project_id}/event/bulk`. The bulk endpoint is for reporting multiple events in a single call. Clients using the bulk endpoint should expect longer response times when submitting large numbers of events. - -## Body - -We send an event json to `/project/{project_id}/event` API. - -Following are the `mandatory` fields. - -```json -{ - "action": "action-name", - "crud": "c" | "r" | "u" | "d", - "actor": { - "id": "actor-id", - "name": "actor-name" -} -``` - -In case of `/project/{project_id}/event/bulk` API we will send an array of events like below, - -```json -{ - "events": [ - { - "action": "action-name", - "crud": "c" | "r" | "u" | "d", - "actor": { - "id": "actor-id", - "name": "actor-name" - }, - }, - { - "action": "action-name", - "crud": "c" | "r" | "u" | "d", - "actor": { - "id": "actor-id", - "name": "actor-name" - } - } - ] -} -``` - -## Authentication - -The Publisher API endpoints expect the token to be provided in a header of the form - -``` -Authorization: token=YOUR_PUBLISHER_TOKEN -``` diff --git a/docs/retraced/architecture/hashing-formula.md b/docs/retraced/architecture/hashing-formula.md deleted file mode 100644 index 56badab..0000000 --- a/docs/retraced/architecture/hashing-formula.md +++ /dev/null @@ -1,117 +0,0 @@ -# Hashing Formula - -When both the sender and the receiver of a message independently calculate a digest of the message, it's a proven way to ensure that both sides have the same content. But both sides needs to have a reference that describes how to calculate the digest. This document describes the specification that the Retraced API uses to calculate a message digest. - -To calculate the digest, Retraced will build a colon (:) delimited string of all the fields, and then calculate a SHA256 digest. Empty or missing fields are not ignored, but are included in the digest as empty strings. Individual fields are percent-escaped before being added to the string. - -The order of the fields is important, and is defined as: - -1. `event_id`: The string ID that is returned from the Retraced API when calling create event. -1. `action`: The [action](/docs/retraced/how-to-audit-log/actions/) parameter provided when creating an event. -1. `target_id`: The ID of the [target](/docs/retraced/how-to-audit-log/targets/) parameter provided when creating an event. If no target was provided, this is an empty string. -1. `actor_id`: The ID of the [actor](/docs/retraced/how-to-audit-log/actors/) parameter provided when creating an event. If no actor was provided, this is an empty string. -1. `group_id`: The ID of the [group]/(/docs/retraced/architecture/groups/) parameter provided when creating an event. If no group was provided, this is an empty string. -1. `source_ip`: The IP address sent with the event. If no IP address was known, this is an empty string. -1. `is_failure`: An integer ("1" or "0") representation of the is_failure parameter provided when creating an event. This is required, and will default to "0". -1. `is_anonymous`: An integer ("1" or "0") representation of the is_anonymous parameter provided when creating an event. This is required, and will default to "0". -1. `fields`: A semicolon (`;`) separated list of the field=value parameters provided in the event. The fields are sorted alphabetically by the key name before encoding. A trailing `;` is included, if there are fields. If there are no fields, a single colon (`:`) should be appended in place of the fields list. - -## Examples - -### Simple Event - -Given the following login audit event: - -```json -{ - "action": "user.login", - "group": { - "id": "group-id", - "name": "group-name" - }, - "created": "2017-01-01T00:00:00.000000000Z", - "crud": "c", - "description": "User \"someone@someplace.com\" logged in", - "source_ip": "8.8.8.8", - "actor": { - "id": "actor-id", - "name": "actor-name", - "type": "user", - "url": "https://my.site.com/account/actor-id" - }, - "is_failure": false, - "is_anonymous": false -} -``` - -A string is built with the fields, as described above: - -``` -event-id:user.login::actor-id:group-id:8.8.8.8:0:0: -``` - -Finally, a SHA256 digest of the above string returns: - -``` -1ee7c214a6bc2ab3e4f921b7c98a148357eebb56081fd68d88bd25acdec45332 -``` - -### With Fields - -Given the following audit event: - -```json -{ - "action": "document.share", - "group": { - "id": "group-id", - "name": "group-name" - }, - "created": "2017-01-01T00:00:00.000000000Z", - "crud": "u", - "target": { - "id": "target-id", - "name": "document-name", - "type": "document", - "url": "" - }, - "description": "Shared document with \"another@user.com\"", - "source_ip": "8.8.8.8", - "actor": { - "id": "actor-id", - "name": "a@user.com", - "type": "user", - "url": "https://my.site.com/account/actor-id" - }, - "fields": { - "resulting_permission": "view,edit", - "permission_granted": "view" - }, - "is_failure": false, - "is_anonymous": false -} -``` - -A string is built with the fields, as described above: - -``` -event-id:document.share:target-id:actor-id:group-id:8.8.8.8:0:0:permission_granted=view;resulting_permission=view,edit; -``` - -Finally, a SHA256 digest of the above string returns: - -``` -e3412f11c1ed3b592d5333441880373ede3b774bc62914ed9317d3affaec9048 -``` - -### Escaping Hash Parameters - -Any values used for hashing should have the following replacements applied: - -1. `%` -- any percent symbols (`%`) should be converted to `%25` -1. `:` -- any colons (`:`) should be converted to `%3A` - -Further, any values in the `fields` section should also have the following escapes applied in a second pass: - -1. `=` -- any equals signs (`=`) should be converted to `%3D` -1. `;` -- any semicolons (`;`) should be converted to `%3B` diff --git a/docs/retraced/architecture/immutability-guarantee.md b/docs/retraced/architecture/immutability-guarantee.md deleted file mode 100644 index e366ea1..0000000 --- a/docs/retraced/architecture/immutability-guarantee.md +++ /dev/null @@ -1,15 +0,0 @@ -# Immutability Guarantee - -When you send audit events into Retraced, we offer functionality that guarantees the data you sent is the data that was received. We use the same functionality to allow you to, at any time, cryptographically verify that the events have not changed since they were written and no events have been removed. - -## Digest of Events - -When an event is received by the Retraced API, the methods that receives the event will always synchronously compute a digest hash of the data received, using our publicly documented [hashing formula](/docs/retraced/architecture/hashing-formula). The computed digest is returned, along with the rest of the standard response. It's up to the sender to independently calculate the digest of the event and compare it to the response from the Retraced API. If these digests do not match, the event was not properly decoded or received by the Retraced API. - -When using any of the [official Retraced SDKs](/docs/retraced/sdks/available-sdks), this computation and comparison happens automatically. All of our SDKs are open source, and this can be independently verified by examining the relevant source code of the SDK. - -## Future Verification of Immutability - -When validating immutability for audit events, it's important to both verify that the events have not changed, and to verify that no events were added or deleted. Retraced provides functionality for both of these verifications. - -Audited events are not always displayed with every field originally sent. Also, it's possible for an [actor or item to be renamed](/docs/retraced/getting-started/renaming-properties) at some point in the future. Retraced will always store the original event received, and it's possible to retrieve that source. In fact, this source is used to dynamically calculate value to show when displaying an event in the browser or other source. diff --git a/docs/retraced/architecture/index.md b/docs/retraced/architecture/index.md deleted file mode 100644 index 270f02d..0000000 --- a/docs/retraced/architecture/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Retraced Architecture -sidebar_label: Overview ---- - -# Overview - -Retraced is more than a traditional database to store and retrieve objects. The "Architecture" documentation provides an overview of some of the features that Retraced provides to provide immutability and verifiability of your audit log data. - -![Audit logs Architecture](/img/audit-logs/audit-logs-architecture.png) - -## Cryptographically Guarantee Immutability - -Retraced implements industry standard and provable digest algorithms to ensure the data you send into an audit log is the data that was received. The same algorithms can be used in the future to verify that none of the data has changed since it was written. This works automatically when using our [SDKs](/docs/retraced/sdks/available-sdks), and can be implemented manually if you use the API directly. - -Details of how we guarantee immutability are discussed in detail on the [immutability guarantee](/docs/retraced/architecture/immutability-guarantee) page. diff --git a/docs/retraced/container-signing.md b/docs/retraced/container-signing.md deleted file mode 100644 index 0098423..0000000 --- a/docs/retraced/container-signing.md +++ /dev/null @@ -1,21 +0,0 @@ -# Container Signing and Verification for Retraced - -Retraced container images are signed and can be verified using [cosign](https://github.com/sigstore/cosign). - -## Fetching our public key - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to fetch our public key or download it from our website [here](https://boxyhq.com/.well-known/cosign.pub). - -```bash -oras pull ghcr.io/boxyhq/cosign.pub:latest -``` - -## Container verification - -**Note:** This is supported for all versions >=1.5.0 - -Our container images are hosted on [Docker Hub](https://hub.docker.com/r/retracedhq/retraced/tags). You can verify it by using the following command. - -```bash -cosign verify --key cosign.pub retracedhq/retraced: -``` diff --git a/docs/retraced/exposing-retraced-data/enterprise-api.md b/docs/retraced/exposing-retraced-data/enterprise-api.md deleted file mode 100644 index 8c4c5c8..0000000 --- a/docs/retraced/exposing-retraced-data/enterprise-api.md +++ /dev/null @@ -1,163 +0,0 @@ -# Using The Enterprise API - -The Retraced Enterprise API enables users to consume audit log data programmatically and integrate it with an external monitoring or security system. - -## Creating and Managing Enterprise Tokens - -Enterprise Tokens can be created and managed via the [Embedded Viewer](/docs/retraced/exposing-retraced-data/viewer/) - -**Note**: If you're a vendor integrating Retraced as your audit log, you can also manage and distribute Enterprise Tokens using the [Publisher API](/docs/retraced/apis/publisher-api/). - -## Graphql - -The quickest way to start getting events is using the GraphQL API. Below is an example request: - -```sh -curl -sSL 'http://localhost:3000/auditlog/enterprise/v1/graphql' \ - -H 'Authorization: token=' \ - -H 'Content-Type: application/json' \ - --data-binary '{ - "variables": { - "before": "", - "last": 3, - "query": "action:document.edit received:2017-11-01,2017-12-01" - }, - "query": "query Search($query: String!, $last: Int, $before: String) { search(query: $query, last: $last, before: $before) { totalCount pageInfo { hasPreviousPage } edges { cursor node { id action crud created actor { name }}}}}" -}' -``` - -There are five things to pay attention to here: - -- We send our Enterpise API Token in a header of the form `Authorization: token=...` -- `variables.last` is the number of events we're requesting, in this case we only want the last 3 events -- `variables.query` is a free-text or structured search query, as you'd use in [The Embedded Viewer](/docs/retraced/exposing-retraced-data/viewer/#search). -- `variables.before` allows us to specify a cursor for paging through events. Since we just want the most recent events, we'll leave this blank for now. -- In the `query` field, we describe the structure and parameters of the GraphQL query. - -The response will look something like - -```json -{ - "data": { - "search": { - "edges": [ - { - "cursor": "MTUxMDg3MjgwNzAxMyxmMzc4MDNkZDdlOTY0NmUzYTRkZjQyZjdiNGUzOWRjMQ==", - "node": { - "action": "license.update", - "actor": { - "name": "customertowne+xyz@mycompany.com" - }, - "created": "2017-11-16T22:53:27Z", - "crud": "u", - "id": "f37803dd7e9646e3a4df42f7b4e39dc1" - } - }, - { - "cursor": "MTUxMDg3Mjc5ODUyNiwyZWFiYzA2NDI5NTc0YWEzOWNmNmI4MWYxNTQ1NzFlMQ==", - "node": { - "action": "license.update", - "actor": { - "name": "jane.smith@company.com" - }, - "created": "2017-11-16T22:53:18Z", - "crud": "u", - "id": "2eabc06429574aa39cf6b81f154571e1" - } - }, - { - "cursor": "MTUxMDg2Nzc3MzMxNiw5Y2M2NTM3ZGRjZTk0ZGEyODI0NTA4ZTc4M2EzOGRjNQ==", - "node": { - "action": "application.branding.update", - "actor": { - "name": "john.doe@company.com" - }, - "created": "2017-11-16T21:29:33Z", - "crud": "u", - "id": "9cc6537ddce94da2824508e783a38dc5" - } - } - ], - "pageInfo": { - "hasPreviousPage": true - }, - "totalCount": 2411 - } - } -} -``` - -The query itself is in the `query` field of the json body: - -``` -query Search($query: String!, $last: Int, $before: String) { search(query: $query, last: $last, before: $before) { totalCount pageInfo { hasPreviousPage } edges { cursor node { id action crud created actor { name }}}}} -``` - -The same query is expanded below for readability. In general use, the first few lines won't change for every request, the interesting part is under `node`, where you're able to select which fields you'd like to receive. - -``` -query Search($query: String!, $last: Int, $before: String) { - search(query: $query, last: $last, before: $before) { - totalCount - pageInfo { - hasPreviousPage - } - edges { - cursor - node { - id - action - crud - created - actor { - name - } - } - } - } -} -``` - -This example only requests a few event fields: `id`, `action`, `crud`, `created`, and `actor.name`, but there are many other fields available, as described in the [Event Schema](/docs/retraced/apis/graphql/#event). - -The GraphQL APIs for consuming events are specified fully in [GraphQL API Guide](/docs/retraced/apis/graphql/). There are example queries and usage in the [Go SDK](https://github.com/retracedhq/retraced-go/blob/master/graphql.go#L216) and the [Javascript SDK](https://github.com/retracedhq/retraced-js/blob/master/src/graphql.ts#L334) - - - -## Saved Searches - -The Enterprise API includes several endpoints for saving a search and maintaining a persistent cursor across search queries. - -The general workflow is: - -- Create a "Saved Search" with desired query parameters -- Create an "Active Search" from the saved search's ID -- Use the "Pump Active Search" endpoint whenever you want to get more events from your search. - - Pump active search will always return only the events that occurred since the last time it was queried, so it can be called as often as every few seconds, or as infrequently as every few months - -**Note**: Saved Search functionality may not be available in all Retraced environments. - -The endpoints for managing Saved Searches are described in the [Enterprise API Guide](/docs/retraced/apis/enterprise-api/). There's also an [OpenAPI/Swagger specification](http://localhost:3000/auditlog/enterprise/v1/swagger.json) and [interactive API console](https://retraced.readme.io/reference#searchactive). diff --git a/docs/retraced/exposing-retraced-data/overview.md b/docs/retraced/exposing-retraced-data/overview.md deleted file mode 100644 index ea47b7a..0000000 --- a/docs/retraced/exposing-retraced-data/overview.md +++ /dev/null @@ -1,12 +0,0 @@ -# Exposing Retraced Data - - -There are two main way to expose your audit log data to your application's users. Users can browse and search events using an embeddable viewer UI, or they can access data programmatically using API tokens. - -## Using the embedded viewer - -As a vendor, you can [embed the event viewer](/docs/retraced/getting-started/embedded-viewer/) into frontend site. For a guide to viewer features, see [Using the Embedded Viewer](/docs/retraced/exposing-retraced-data/viewer/) - -## Using Enterprise IT Integration API Tokens - -In addition to the viewer, Audit events can be exposed via the [Enterprise IT Integration API](/docs/retraced/exposing-retraced-data/enterprise-api/) diff --git a/docs/retraced/exposing-retraced-data/viewer.md b/docs/retraced/exposing-retraced-data/viewer.md deleted file mode 100644 index 714ba85..0000000 --- a/docs/retraced/exposing-retraced-data/viewer.md +++ /dev/null @@ -1,40 +0,0 @@ -# Using the Retraced Viewer - -The Retraced embedded viewer is the easiest way consume and understand your audit log data. This guide will walk you through the viewer's features. - -Note -- if you're a Software Vendor and you're looking to embed the viewer into your site, see the [Embedded Viewer Guide](/docs/retraced/getting-started/embedded-viewer/) - -## Overview - -The viewer exposes four core features: - -1. Search -1. Filters -1. Export -1. API Token Management. - -![Viewer](/images/product_images/viewer-top.png) - -### Search - -The search box allows for free-text search of all audit events, but also supports some structured search operators. Some example searches: - -- `edit` -- free text search -- `action:users.list` -- search by action -- `action:document.* location:Germany` -- search by action and location -- `actor.id:john.doe@mycompany.com` -- search by actor id -- `action:user.login,user.logout` -- seach by multiple actions - -### Filters - -The filters section allows for filtering events by date range, and by Create/Read/Update/Delete actions. - -### Export - -Save searches and export them to CSV using the "Exports" section. - -### API Tokens - -Create and Manage Enterprise API tokens using the "API Tokens" section. - -For a guide on using API Tokens, see [Using The Enterprise API](/docs/retraced/exposing-retraced-data/enterprise-api) diff --git a/docs/retraced/getting-started/embedded-viewer.md b/docs/retraced/getting-started/embedded-viewer.md deleted file mode 100644 index 215d8ac..0000000 --- a/docs/retraced/getting-started/embedded-viewer.md +++ /dev/null @@ -1,58 +0,0 @@ -# Embedded Viewer - -Now that you've sent some events into Retraced, it's time to expose them to your end users. Retraced has an advanced, highly customizable log viewer that you can embed on your own site. - -Note: Currently, a React-based site is required to embed the viewer, but support for embedding without React will be available soon. - -## Installing - -There are a few short steps to getting the embedded viewer integrated into your site. - -1. Install the `@retracedhq/logs-viewer` package from npm and include in your site. -1. Request a token from the Retraced API to identify which group/scope the viewer should be limited to. This should be initiated from your backend server, not the browser. -1. Render the `` React component as part of your application - -### Obtain a viewer token from the Retraced API - -The browser will communicate directly with the Retraced API to search and show audit logs. Your backend server is the only trusted source to identify who the browser is. To identify the user, your site's backend should request a viewer token using the appropriate [Retraced SDK](/docs/retraced/sdks/available-sdks) or directly with the [Retraced API](/docs/retraced/apis/overview). Once you have obtained a temporary viewer token from the Retraced API, send it to the browser where it can be used in the next and final step. - -### Render the component - -Inside a React Component - -```javascript -function render() { - return ( - - header="My Audit Log" - mount={true} /> - ) -} -``` - -or, without JSX: - -```html -ReactDOM.render( React.createElement( RetracedEventsBrowser, { auditLogToken: -, mount: true }, ), document.getElementById('main') ); -``` - -#### Options - -The embedded viewer supports quite a few options, but they all have defaults. The table below describes the keys that are possible to override in the component properties. - -| Key | Default Value | Value Type | Description | -| --------------- | ----------------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| admin | `true` | `boolean` | A bool to indicate if the admin/settings button is possible to show. This will never force it to show, this setting is provided to completely disable this button at times. | -| export | `true` | `boolean` | A bool to indicate if the export button should be shown on the footer. | -| crud | `cud` | `string` | The default search filter options to enable. By default, read items are not shown. | -| theme | `light` | `string` | The theme to use. Supports `dark` and `light`. | -| header | `Audit Log` | `string` | A header to show beside the search box. | -| apiTokenHelpURL | https://boxyhq.com/docs/retraced/exposing-retraced-data/enterprise-api/ | `string` | A help link for the "How to Use Audit Log API Tokens" text in the API tokens modal. | -| searchHelpURL | https://boxyhq.com/docs/retraced/exposing-retraced-data/viewer/#search | `string` | A help link for the "Get Help With Search" text in search filters modal. | -| customClass | `` | `string` | One or more space-separated CSS classes to apply to the outermost viewer `
` | -| host | `http://localhost:3000/auditlog` | `string` | Retraced API host to use. Only needs to change for on-premise Retraced instances. | -| mount | `false` | `boolean` | Determines whether to mount the component. Handy if you need to wait until a token is returned from your backend. | diff --git a/docs/retraced/getting-started/first-audit-event.md b/docs/retraced/getting-started/first-audit-event.md deleted file mode 100644 index f44f0df..0000000 --- a/docs/retraced/getting-started/first-audit-event.md +++ /dev/null @@ -1,23 +0,0 @@ -# The First Audit Event - -Getting started with Retraced is easy. The best way to start is to pick a single event to start sending to confirm that everything is set up right. If your site has a login event, it's a perfect first event because it covers most of the scenarios that can be tricky when starting to audit log. Login events can have both a successful and failed response, it can be anonymous or authenticated and it may or may not belong to a group. - -Remembering the basics of [how to audit log](/docs/retraced/how-to-audit-log), you should find a place in your code that is guaranteed to be executed after a login event. - -## Publishing Guide - -### Getting a Token - -First step is to [get a token for the publisher api](/docs/retraced/apis/publisher-api#publisher-api-tokens) from -the Retraced admin site. - -### Sending Events - -Next, in your Login API handler, you'll want to add a call to the Publisher API's after each login attempt. The Create Event call can be made using one of the [Retraced SDKs](/docs/retraced/sdks/available-sdks), or by making a request to `POST /publisher/v1/project/{projectId}/event` as described in the [Publisher API Documentation](/docs/retraced/apis/publisher-api) and the [Publisher Swagger Specification](http://localhost:3000/auditlog/publisher/v1/swagger.json). - -### Verifying Event Hashes - -The response from the Publisher API will include a hash of the received event computed according to the Retraced [event hashing formula](/docs/retraced/architecture/hashing-formula). You can choose to verify this hash to ensure -the event your api sent is identical to the one received by Retraced. If you are using one of the [Retraced SDKs](/docs/retraced/sdks/available-sdks), you can take advantage of built-in functionality for verifying event hashes. - -![flow](https://www.lucidchart.com/publicSegments/view/a68dd763-6aa0-4835-be1f-91f7728befc7/image.png) diff --git a/docs/retraced/getting-started/renaming-properties.md b/docs/retraced/getting-started/renaming-properties.md deleted file mode 100644 index 0e423b3..0000000 --- a/docs/retraced/getting-started/renaming-properties.md +++ /dev/null @@ -1,9 +0,0 @@ -# Renaming Properties - -Some properties of an audit event can be renamed after the event is received. There is a limited amount of these and the original event is still [immutable](/docs/retraced/how-to-audit-log/immutable/). But data can change over time, and it's important to be able to link to and find events later. - -## Actor - -When sending an event, an [actor](/docs/retraced/how-to-audit-log/actors/) is a required field. The `id` property of the actor is immutable and is linked and cross referenced in Retraced to make it possible to search for and find all events that a specific actor performed. An actor object has additional fields including name, url and any other data you include. These fields are mutable and the values sent with an event will replace the global values for the actor in Retraced. - -When requesting the [original events](/docs/retraced/architecture/immutability-guarantee/#future-verification-of-immutability), the original values sent when the event was created will be returned. diff --git a/docs/retraced/getting-started/retraced-basics.md b/docs/retraced/getting-started/retraced-basics.md deleted file mode 100644 index eaadb73..0000000 --- a/docs/retraced/getting-started/retraced-basics.md +++ /dev/null @@ -1,15 +0,0 @@ -# Retraced Basics - -At it's core, Retraced consists of 3 components: - -- The [Publisher API](/docs/retraced/apis/publisher-api), which is used by a - vendor application to report audit events to Retraced. - -- A [Logs Viewer](/docs/retraced/getting-started/embedded-viewer) which - can be embedded in the frontend of a vendor application to allow end customers - to view, search, and export logs. - -- The [Enterprise IT Integration API](/docs/retraced/apis/enterprise-api) which - be used by end customers to consume audit log events programmatically. - -The first step in any Retraced integration is [sending an event to the Publisher API](/docs/retraced/getting-started/first-audit-event). Once events have been published to Retraced, they can be consumed either by embedding the logs viewer or by accessing the Enterprise IT Integration API. diff --git a/docs/retraced/getting-started/searching-for-events.md b/docs/retraced/getting-started/searching-for-events.md deleted file mode 100644 index 1f60998..0000000 --- a/docs/retraced/getting-started/searching-for-events.md +++ /dev/null @@ -1,24 +0,0 @@ -# Searching For Events - -The Retraced interface supports searching for events. While it's presented as a single, simple input field, the Retraced search interface supports complex structured queries. - -## Free Text Search - -By default, the search query you type in the search box will seach all fields for this value. - -## Structured (Advanced) Search - -If you use the advanced search syntax, you can perform very specific and exact searches to find the data you are looking for. The syntax for this is `key:value`. For example, to search for all events that have an action that starts with `user.` you could enter the following query: `action:user.*` - -This table shows the supported advanced searches: - -| Key | Description | Examples | -|---|---|---| -| action | Matches events with the action equal to the value. This supports trailing wildcards. | `action:user.login`
`action:user.*` | -| crud | Matches events with crud type equal to any of the values. | `crud:c,u,d`
`crud:r` | -| received | Matches events with the received field in the range. This accepts two comma-separated ISO 8601 datetimes. Either start or end may be omitted to search an unbounded time range.| `received:2017-05-01,2017-06-01`
`received:2017-05-01T12:30+07,2017-05-01T13:30+07`
`received:,2017-01-01`
`received:2017-01-01,` | -| created | Matches events with the created field in the range. | created:2017-05-01,2017-05-02 | -| actor.name | Matches events performed by an actor whose name contains the value. | actor:Smith | -| actor.id | Matches events performed by the actor with the exact id value. | actor:b82c4cfa428342ac822c42c1f6b89200 | -| description | Matches events with a description containing the terms in the value. | description:"elevated escalated" | -| location | Matches events performed in a geographic region equal to the value. | location:"Los Angeles" | diff --git a/docs/retraced/getting-started/time-synchronization.md b/docs/retraced/getting-started/time-synchronization.md deleted file mode 100644 index 9843f4e..0000000 --- a/docs/retraced/getting-started/time-synchronization.md +++ /dev/null @@ -1,5 +0,0 @@ -# Reporting Event Timing - -## Recording Event Timing in Retraced - -Retraced allows clients to specify a `created` time for any event. In addition to allowing clients to report event timing, the Retraced Publisher API will record an NTP-synchronized `received` timestamp for all events. diff --git a/docs/retraced/how-to-audit-log/actions.md b/docs/retraced/how-to-audit-log/actions.md deleted file mode 100644 index b095c55..0000000 --- a/docs/retraced/how-to-audit-log/actions.md +++ /dev/null @@ -1,3 +0,0 @@ -# Actions - -Actions are the events that the actors performed that should be audited. In the spreadsheet example application, some of the most obvious actions might include `sheet.create` and `sheet.delete`. Sometimes it's important to create new objects to wrap events. For example, if a user is editing a spreadsheet and the sheet saves every second, you don't want to create a `sheet.update` event each second. Wrap these events into a session and create a single `sheet.update` event for the entire edit session. diff --git a/docs/retraced/how-to-audit-log/actors.md b/docs/retraced/how-to-audit-log/actors.md deleted file mode 100644 index a4c1003..0000000 --- a/docs/retraced/how-to-audit-log/actors.md +++ /dev/null @@ -1,4 +0,0 @@ -# Actors - -An actor in the spreadsheet application is any authenticated identity that's interacting with the spreadsheet. This includes the users who are logged in and editing, deleting, and creating new spreadsheets. It also includes any API tokens that are performing operations on the spreadsheets programatically. - diff --git a/docs/retraced/how-to-audit-log/exportable.md b/docs/retraced/how-to-audit-log/exportable.md deleted file mode 100644 index 265ffe2..0000000 --- a/docs/retraced/how-to-audit-log/exportable.md +++ /dev/null @@ -1,3 +0,0 @@ -# Exportability - -Most users of audit logs will want to connect it into systems that aggregate audit logs from different systems (such as Splunk). diff --git a/docs/retraced/how-to-audit-log/immutable.md b/docs/retraced/how-to-audit-log/immutable.md deleted file mode 100644 index 7f24226..0000000 --- a/docs/retraced/how-to-audit-log/immutable.md +++ /dev/null @@ -1,3 +0,0 @@ -# Immutability - -A fundamental tenant of any audit log is that it must be absolutely immutable. Once an event has occured, it must always be recorded and there must be no possible way to alter this event. diff --git a/docs/retraced/how-to-audit-log/index.md b/docs/retraced/how-to-audit-log/index.md deleted file mode 100644 index 07a39f9..0000000 --- a/docs/retraced/how-to-audit-log/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Audit Logging Basics -sidebar_label: Overview ---- - -# Audit Logging Basics - -An audit log is a centralized stream of all user activity in an application. - -The JSON structure looks like this - -```typescript -{ - "action": string, - "group"?: { - "id": string, - "name"?: string, - }, - "crud"?: string, - "created"?: Date, - "actor"?: { - "id": string, - "name"?: string, - "href"?: string, - "fields"?: { - [key: string]: string - }, - }, - "target"?: { - "id": string, - "name"?: string, - "href"?: string, - "type"?: string, - "fields"?: { - [key: string]: string - }, - }, - "source_ip"?: string, - "description"?: string, - "is_failure"?: boolean, - "is_anonymous"?: boolean, - "fields"?: { - [key: string]: string - }, -} -``` - -You can see the example below, - -```json -{ - "action": "some.record.created", - "teamId": "boxyhq", - "group": { - "id": "boxyhq", - "name": "BoxyHQ" - }, - "crud": "c", - "created": "2023-01-13T11:24:07.575Z", - "source_ip": "127.0.0.1", - "actor": { - "id": "jackson@boxyhq.com", - "name": "Jackson" - }, - "target": { - "id": "100", - "name": "tasks", - "type": "Tasks" - } -} -``` - -An audit log event is a single line that represents an [action](/docs/retraced/how-to-audit-log/actions) that an [actor](/docs/retraced/how-to-audit-log/actors) took, most often on a [target](/docs/retraced/how-to-audit-log/targets). - -Sometimes it's easiest to think about this with a concrete example. Let's consider a multi-user, collaborative spreadsheet application. - -## Actors - -An actor in the spreadsheet application is any authenticated identity that's interacting with the spreadsheet. This includes the users who are logged in and editing, deleting, and creating new spreadsheets. It also includes any API tokens that are performing operations on the spreadsheets programatically. - -## Actions - -Actions are the events that the actors performed that should be audited. In the spreadsheet example application, some of the most obvious actions might include `sheet.create` and `sheet.delete`. Sometimes it's important to create new objects to wrap events. For example, if a user is editing a spreadsheet and the sheet saves every second, you don't want to create a `sheet.update` event each second. Wrap these events into a session and create a single `sheet.update` event for the entire edit session. - -## Targets - -Targets are the objects in a system that have an action taken on them. In the spreadsheet example application, the primary target is the sheets themselves. But there are additional, less obvious targets. If the sheet application has implemented it's own authentication system, another target is the user accounts. For example, when a user changes their password, it should create an audit event for `password.update`. diff --git a/docs/retraced/how-to-audit-log/searchable.md b/docs/retraced/how-to-audit-log/searchable.md deleted file mode 100644 index cd2b6bc..0000000 --- a/docs/retraced/how-to-audit-log/searchable.md +++ /dev/null @@ -1,3 +0,0 @@ -# Searchability - -A good Audit log needs to be searchable. Proper indexing on actors, actions, and targets is essential to being able to isolate and drill down into the history of application objects and events. \ No newline at end of file diff --git a/docs/retraced/how-to-audit-log/segments.md b/docs/retraced/how-to-audit-log/segments.md deleted file mode 100644 index a05d3d0..0000000 --- a/docs/retraced/how-to-audit-log/segments.md +++ /dev/null @@ -1,13 +0,0 @@ -# Segments - -## Project - -A project represents a distinct application offered by a vendor. A vendor that only offers a single application, such as spreadsheets, would only need one project, while a vendor offering spreadsheets and calendars would have two projects. You can find your project IDs on the [Retraced Admin Portal](../../admin-portal/audit-logs.md). - -## Environment - -An environment represents a deployment target for a project. Retraced generates Production and Staging environments for each new project. You can manage your project's environments with the [Admin API](/docs/retraced/apis/admin-api) or the [Admin Portal](../../admin-portal/audit-logs.md). - -## Group - -A group is an end customer in your multi-tenant application. You can segment your audit log into groups by adding a `group.id` to each event. Then you may provide your end customers read access to their segment with the [Enterprise API](/docs/retraced/apis/enterprise-api). diff --git a/docs/retraced/how-to-audit-log/targets.md b/docs/retraced/how-to-audit-log/targets.md deleted file mode 100644 index a208044..0000000 --- a/docs/retraced/how-to-audit-log/targets.md +++ /dev/null @@ -1,4 +0,0 @@ -# Targets - - -Targets are the objects in a system that have an action taken on them. In the spreadsheet example application, the primary target is the sheets themselves. But there are additional, less obvious targets. If the sheet application has implemented it’s own authentication system, another target is the user accounts. For example, when a user changes their password, it should create an audit event for `password.update`. \ No newline at end of file diff --git a/docs/retraced/how-to-audit-log/time-synced.md b/docs/retraced/how-to-audit-log/time-synced.md deleted file mode 100644 index 5b0438f..0000000 --- a/docs/retraced/how-to-audit-log/time-synced.md +++ /dev/null @@ -1,24 +0,0 @@ -# Time Synchronization - - -A good audit log should record a synchronized timestamp that allows an end customer to determine with a high level of confidence: - -* The human-readable time an event occured,for example: - -`sheet.create occurred at 2017-01-01 17:45:22.011` - -* The ordering of events, for example - -`sheet.create occured before sheet.update` - - -## Wall Time vs. Causal Ordering - - -It's not always possible to have both a human-readable "wall time" and a causally consistent sequencing of events. When forced to trade between a human-readable wall time and a causally consistent sequencing of events, an Audit Log should favor causal consistency over a precise wall time. In a best-case scenario, protocols like Network Time Protocol (NTP) can allow for a high level of accuracy in both. - - -## Recording Time in Retraced - - -Retraced allows clients to specify a `created` time for any event. In addition to allowing clients to report event timing, the Retraced Publisher API will record an NTP-synchronized `received` timestamp for all events. \ No newline at end of file diff --git a/docs/retraced/overview.md b/docs/retraced/overview.md deleted file mode 100644 index cc8d557..0000000 --- a/docs/retraced/overview.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Introduction To Retraced -sidebar_label: Overview ---- - -# Introduction To Retraced - -Retraced provides an audit log feature for your application; one that meets all of the principles of [what makes a good audit log](/docs/retraced/how-to-audit-log). Retraced provides both an API to send audit events to, and several different methods for your customers to view and extract their events. - -Brought to you by BoxyHQ and [Replicated](https://www.replicated.com/). Check out our [GitHub repo](https://github.com/retracedhq/retraced) - -## About Retraced - -### Own your own data​ - -- An open-source solution that allows you to keep control of your data -- Supports Postgres for now -- Built-in support for Elasticsearch (optional, Postgres search can be used instead) - -### Flexible and easy to use​ - -- Designed to work with REST APIs -- Integrates with your existing applications -- Comes with an embedded viewer that you can use with your React applications - -### Support - -Reach out to the maintainer at one of the following places: - -- [GitHub Issues](https://github.com/retracedhq/retraced/issues) -- The email which is located [in GitHub profile](https://github.com/deepakprabhakara) - -### Community - -- [Discord](https://discord.gg/uyb7pYt4Pa) -- [Twitter](https://twitter.com/boxyhq) - -### License - -[Apache 2.0 License](https://github.com/retracedhq/retraced/blob/master/LICENSE) diff --git a/docs/retraced/sbom.md b/docs/retraced/sbom.md deleted file mode 100644 index bc49a9b..0000000 --- a/docs/retraced/sbom.md +++ /dev/null @@ -1,60 +0,0 @@ -# Software Bill Of Materials (SBOM) Reports for Retraced - -[SBOM](https://en.wikipedia.org/wiki/Software_bill_of_materials) is a list of components in a piece of software. It is like a list of ingredients of a product. Is it quickly becoming a standard for software supply chain risk and the ecosystem is growing with tools that help you verify, scan and monitor all your dependencies. - -## Report Standards - -SBOM reports primarily use [SPDX](https://en.wikipedia.org/wiki/Software_Package_Data_Exchange) & [CycloneDX](https://cyclonedx.org/) standards. - -## Reports for Retraced - -**Note:** This is supported for all versions >=1.5.3 - -You can find the SBOM reports as artifacts in our container registry at the locations below. They are updated every time there is change in the codebase and tagged by the exact version we release. - -| Location | Files | Context | -| ---------------------------------------------------- | ----------------------------- | --------------------------------- | -| `ghcr.io/retracedhq/retraced/sbom:service-` | `sbom.spdx`, `sbom.cyclonedx` | Retraced service | -| `ghcr.io/retracedhq/retraced/sbom:docker-` | `sbom.spdx`, `sbom.cyclonedx` | Docker Image for Retraced service | - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to retrieve these files. - -```bash -oras pull ghcr.io/retracedhq/retraced/sbom:service- -``` - -## Reports for Javascript SDK - -Located at [https://www.npmjs.com/package/@retracedhq/retraced](https://www.npmjs.com/package/@retracedhq/retraced) - -**Note:** This is supported for all versions >=0.6.2 - -You can find the SBOM reports as artifacts in our container registry at the locations below. They are updated every time there is change in the codebase and tagged by the exact version we release. - -| Location | Files | Context | -| --------------------------------------------------- | ----------------------------- | --------------- | -| `ghcr.io/retracedhq/retraced-js/sbom:npm-` | `sbom.spdx`, `sbom.cyclonedx` | Retraced JS SDK | - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to retrieve these files. - -```bash -oras pull ghcr.io/retracedhq/retraced-js/sbom:npm- -``` - -## Reports for React Logs Viewer - -Located at [https://www.npmjs.com/package/@retracedhq/logs-viewer](https://www.npmjs.com/package/@retracedhq/logs-viewer) - -**Note:** This is supported for all versions >=2.4.6 - -You can find the SBOM reports as artifacts in our container registry at the locations below. They are updated every time there is change in the codebase and tagged by the exact version we release. - -| Location | Files | Context | -| --------------------------------------------------- | ----------------------------- | ------------------ | -| `ghcr.io/retracedhq/logs-viewer/sbom:npm-` | `sbom.spdx`, `sbom.cyclonedx` | Retraced React SDK | - -You can use [oras](https://oras.land/docs/category/cli) (or a similar OCI artifacts tool) to retrieve these files. - -```bash -oras pull ghcr.io/retracedhq/logs-viewer/sbom:npm- -``` diff --git a/docs/retraced/sdks/available-sdks.md b/docs/retraced/sdks/available-sdks.md deleted file mode 100644 index da09c38..0000000 --- a/docs/retraced/sdks/available-sdks.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Retraced SDKs -sidebar_label: Overview ---- - -# Integrate Retraced - -It's possible to use Retraced completely with the [documented API](/docs/retraced/apis/overview/). But that can often be a little tedious, so we've created easy-to-use SDKs for popular languages and frameworks. If you don't see your stack on here, [reach out](https://github.com/retracedhq/retraced/issues) to send a request and we'll see how we can help! - -## Official libraries - -- [Go](golang.md) -- [Node.js](nodejs.md) diff --git a/docs/retraced/sdks/golang.md b/docs/retraced/sdks/golang.md deleted file mode 100644 index ef6cf74..0000000 --- a/docs/retraced/sdks/golang.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Retraced Go SDK -sidebar_label: Go ---- - -# Go - -On this page, we get you up and running with Retraced's Go SDK in your application. - -## Installation - -```bash -go get github.com/retracedhq/retraced-go -``` - -## Basic Usage - -Error handling omitted for brevity. - -### Initialize a client - -```go -import "github.com/retracedhq/retraced-go" - -client, _ := retraced.NewClient("The host, defaults to http://localhost:3000/auditlog", "You Retraced project id goes here", "Your Retraced Publisher API token goes here") -``` - -### Report an event - -```go -event := &retraced.Event{ - Created: time.Now(), - CRUD: "r", - Action: "user.login", - Description: "User Alice logged in", - SourceIP: "102.109.10.1", - Actor: &retraced.Actor{ID: "alice@bigcorp.com", Name: "Alice"}, - Group: &retraced.Group{ID: "bigcorp.com"}, -} - -resp, _ := client.ReportEvent(event) -``` - -### Verify the event receipt hash - -```go -err := event.VerifyHash(resp) -if err != nil { - // hashes did not match -} else { - // event reported successfully -} -``` diff --git a/docs/retraced/sdks/nodejs.md b/docs/retraced/sdks/nodejs.md deleted file mode 100644 index e8c48b4..0000000 --- a/docs/retraced/sdks/nodejs.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Retraced NodeJS SDK -sidebar_label: NodeJS ---- - -# NodeJS - -On this page, we get you up and running with Retraced's NodeJS SDK in your application. - -## Installation - -The Retraced NodeJS SDK can be installed with npm: - -```bash -npm install -s @retracedhq/retraced -``` - -## Basic Usage - -### Initialize a client - -```javascript -import * as Retraced from 'retraced'; - -const retraced = new Retraced.Client({ - apiKey: 'your api key goes here', - projectId: 'your project id goes here', -}); -``` - -### Report an event - -```javascript -const event = { - action: "some.record.created", - teamId: "My Rad Customer", - crud: "C", - source_ip: request.ip, - actor: { - id: "ultra.employee@customertowne.xyz", - displayName: "Ultra Employee", - url: "https://customertowne.xyz/employees/123456", - }, - target: { - id: newRecord.id, - displayName: newRecord.name, - url: "https://customertowne.xyz/records/" + newRecord.id, - }, -}; - -// The Retraced client's methods are asynchronous. -// You can "fire and forget" them. -retraced.reportEvent(event); - -await retraced.reportEvent(event); - -retraced.reportEvent(event) - .then(() => { console.log("Finished reporting!"); }) - .catch((err) => handleError(err)); -} -``` diff --git a/docs/retraced/self-host/aws.md b/docs/retraced/self-host/aws.md deleted file mode 100644 index 812ca97..0000000 --- a/docs/retraced/self-host/aws.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Self-host Audit Logs on AWS -sidebar_label: AWS -description: Self-host Audit Logs on AWS ---- - -# AWS - -Coming soon. diff --git a/docs/retraced/self-host/digitalocean.md b/docs/retraced/self-host/digitalocean.md deleted file mode 100644 index 28272e2..0000000 --- a/docs/retraced/self-host/digitalocean.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Self-host Audit Logs on DigitalOcean -sidebar_label: DigitalOcean -description: Self-host Audit Logs on DigitalOcean ---- - -# DigitalOcean - -Coming soon. diff --git a/docs/retraced/self-host/docker.md b/docs/retraced/self-host/docker.md deleted file mode 100644 index 06836f6..0000000 --- a/docs/retraced/self-host/docker.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Self-host Audit Logs on Docker -sidebar_label: Docker ---- - -# Docker - -Docker is the most effortless way to get started with the self-hosted Retraced instance. - -## Prerequisite - -You need the following installed in your system: - -- [Docker](https://www.docker.com/) and [Docker compose](https://docs.docker.com/compose/) -- [Git](https://git-scm.com/) - -## Install - -Please see the docker directory in the Retraced repo. - -```bash -# Get the code -git clone https://github.com/retracedhq/retraced.git - -# Go to the root folder -cd retraced - -# Start the Docker compose -docker-compose up -``` - -At this stage, you've got a running Retraced instance. You can now start publishing the audit logs using the Publisher API endpoints. - -The base URL would be `http://localhost:3000/auditlog/publisher/v1/project/{project-id}/event` diff --git a/docs/retraced/self-host/env-variables.md b/docs/retraced/self-host/env-variables.md deleted file mode 100644 index 54ff0c0..0000000 --- a/docs/retraced/self-host/env-variables.md +++ /dev/null @@ -1,335 +0,0 @@ ---- -title: Environment Variables (Audit Logs) -sidebar_label: Environment Variables -description: Environment Variables for Audit Logs ---- - -# Environment Variables (Audit Logs) - -The environment variables are set in `.env` or `docker-compose` files. - -The service always respects `.env` file but in case of compose based deployments you can override the variables using docker-compose file `x-common-variables` section. - -The codebase has most of the things configured, we expect users to configure `ADMIN_ROOT_TOKEN` variable for security reasons. - -So just set the `ADMIN_ROOT_TOKEN` and you are good to go for your first run of Audit log service. - -You can check the complete list of environment variables below, - -## General configuration - -### **API_BASE_URL_PATH** - -The string to be added to the retraced API path. -Default: `""` - -### **RETRACED_API_BASE** - -The Retraced API base path. -Default: `localhost:3000` - -### **HMAC_SECRET_ADMIN** - -The secret to be used to encode & decode the [JSON Web Token](https://datatracker.ietf.org/doc/html/rfc7519) for [Admin APIs](/docs/retraced/apis/admin-api). - -### **HMAC_SECRET_VIEWER** - -The secret to be used to encode & decode the [JSON Web Token](https://datatracker.ietf.org/doc/html/rfc7519) for [Viewer APIs](/docs/retraced/getting-started/embedded-viewer). - -### **LOG_LEVEL** - -Sets the logging level of the application logs. Supported values `trace`, `debug`, `info`, `warn`, `error` - -Default: `warn` - -### **EXPORT_PAGE_SIZE_INTERNAL** - -The `Page Size` to be used to fetch Audit Logs from `ElasticSearch` for the `Saved Export Report`. - -Default: `10000` - -### **PG_SEARCH** - -If set `true` Retraced will use Postgres to `index & search` the audit logs instead of `Elasticsearch`. - -Default: `false` - -### **RETRACED_API_LOG_FILE** - -If set to a valid file path, Retraced will use the file to save `Retraced API` logs. - -### **RETRACED_PROCESSOR_LOG_FILE** - -If set to a valid file path, Retraced will use the file to save `Retraced processor` logs. - -### **RETRACED_API_SCHEMES** - -The api schema to used for swagger. - -Default: `http,https` - -### **PROCESSOR_NORMALIZE_REPAIRER_MIN_AGE_MS** - -The minimum age in microseconds used by processor to select audit logs to process. - -Default: `120000` - -### **PROCESSOR_NORMALIZE_REPAIRER_MAX_EVENTS** - -The maximum number of events processor will select to process. - -Default: `10000` - -### **RETRACED_DB_NO_CACHE** - -If set to true, Retraced disables db level caching.
-Caching is used for `Actor`, `Target` & `Groups` SELECT queries of audit log. - -### **MAXMIND_GEOLITE2_LICENSE_KEY** - -The `MaxMind` license key to fetch `"GeoLite2"` data. - -### **TMPDIR** - -The path of the temporary folder used for Geo data sync.
-Retraced looks for `"GeoLite2` files to import IP address and location data. - -### **RETRACED_APP_BASE** - -The base path of the Retraced instance which is used for links in the emails. - -## [Postgres](https://www.postgresql.org/) Configuration - -### **POSTGRES_HOST** - -The hostname to use for Postgres connection. - -Default: `""` - -### **POSTGRES_PORT** - -The port to use for Postgres connection. - -Default: `""` - -### **POSTGRES_USER** - -The user to use for Postgres connection. - -Default: `""` - -### **POSTGRES_PASSWORD** - -The password to use for Postgres connection. - -Default: `""` - -### **POSTGRES_DATABASE** - -The Postgres database name to use for Retraced. - -Default: `""` - -### **POSTGRES_POOL_SIZE** - -The number of connections to be used for Postgres pool. - -Default: `20` - -## [NSQD](https://github.com/nsqio/nsq) Configuration - -### **NSQD_HTTP_PORT** - -The http port to use for nsqd connection. - -Default: `4151` - -### **NSQD_HOST** - -The hostname to use for nsqd connection. - -Default: `""` - -### **NSQD_TCP_PORT** - -The tcp port to use for nsqd connection. - -Default: `4150` - -### **NSQ_CIRCUIT_BREAKER_THRESHOLD** - -The circuit breaker threshold used for NSQ client. - -## [Elasticsearch](https://www.elastic.co/) Configuration - -### **ELASTICSEARCH_NODES** - -Elasticsearch node address or a `comma seperated` list of Elasticsearch nodes. - -Ex:
-`https://localhost:9200`
-or
-`https://localhost:9200,https://localhost:9201,https://localhost:9202` - -### **ELASTICSEARCH_CAFILE** - -The CA file to use when connecting with `SSL enabled Elasticsearch`. - -### **ELASTICSEARCH_REQUEST_RETRIES** - -Max retries for Elasticsearch client. - -### **ELASTICSEARCH_REQUEST_TIMEOUT** - -Request timeout for Elasticsearch client. - -### **ELASTICSEARCH_BACKOFF** - -The backoff interval for retries used by `internal wrapper of Elasticsearch`. - -### **ELASTICSEARCH_TOTAL_TIMEOUT** - -The total timeout used by wrapper for `all Elasticsearch requests` & `retries with backoffs`. - -## Headless Mode configuration - -`Headless mode bootstraps the db configuration required for a tenant to use Retraced right away.` - -### **HEADLESS_ENV_ID** - -Environment Id to be used in the headless mode. - -### **HEADLESS_API_KEY** - -API key to be used in the headless mode. - -### **HEADLESS_PROJECT_ID** - -Project Id to be used in the headless mode. - -### **HEADLESS_PROJECT_ENV** - -Environment Id to be used for Project in the headless mode. - -## [Bugsnag](https://www.bugsnag.com) configuration ([Error Reporting](https://docs.bugsnag.com/api/error-reporting/)) - -### **BUGSNAG_TOKEN** - -Token to be used for bugsnag [error reporting](https://docs.bugsnag.com/api/error-reporting/). - -### **STAGE** - -[ReleaseStage](https://docs.bugsnag.com/product/releases/#configuring-the-release-stage) configuration to be used for bugsnag. - -## [Signal Sciences](https://www.signalsciences.com/) configuration - -`Signal Sciences is used for edge security & API protection` - -### **SIGSCI_RPC_ADDRESS** - -The RPC address to be used for Signal Sciences API protection. - -## **ADMIN_ROOT_TOKEN** - -When this is set, Retraced makes api `/admin/v1/user/_login` available. -Admin can make a post request to above api with `token=` in Authorization Header to create users. - -## SSL configuration - -Used to enable https mode of Retraced. - -### **SSL_SERVER_CERT_PATH** - -The path of the ssl certificate file. - -### **SSL_SERVER_KEY_PATH** - -The path of the ssl private key file. - -## Statsd Reporter configuration - -### **STATSD_HOST** - -The hostpath for the statsd reporter. - -### **STATSD_PORT** - -The port for the statsd reporter. - - - -## Opentelemetry configuration - -Retraced supports observability via OpenTelemetry. The following env vars are available for configuration (along with the rest of the [supported ones](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md)) - -### **OTEL_EXPORTER_OTLP_ENDPOINT** or **OTEL_EXPORTER_OTLP_METRICS_ENDPOINT** - -Target URL to which the exporter is going to send metrics. - -Example: `https://ingest.lightstep.com:443/metrics/otlp/v0.6` - -### **OTEL_EXPORTER_OTLP_HEADERS** or **OTEL_EXPORTER_OTLP_METRICS_HEADERS** - -Headers relevant for the endpoint, useful for specifying authentication details for providers. - -Example: `lightstep-access-token=,...` - -### **OTEL_EXPORTER_OTLP_PROTOCOL** or **OTEL_EXPORTER_OTLP_METRICS_PROTOCOL** - -The transport protocol. Options MUST be one of: `grpc`, `http/protobuf` or `http/json`. - -### **OTEL_EXPORTER_DEBUG** - -Set this to `true` to enable debug logs for Opentelemetry. This is only meant for purposes of debugging otel locally. - -## Email configuration - -### **EMAIL_FROM** - -The email address to be used to send email from Retraced. - -Default: `Retraced ` - -### **SMTP_CONNECTION_URL** - -SMTP connection url to be used to send emails using [nodemailer](https://www.npmjs.com/package/nodemailer). - -### **MANDRILL_KEY** - -The API key to be used to send emails using [Mandrill By Mailchimp](https://mailchimp.com/en-gb/features/transactional-email/?utm_source=mandrill&utm_medium=mc-site&utm_campaign=aoc_product-mktg_tnx_redirect_wld_20200515). - -## Publisher configuration - -### **PUBLISHER_BULK_CREATE_MAX_EVENTS** - -The limit of the events that can be created using bulk api. - -default: `50` - -### **PUBLISHER_CREATE_EVENT_TIMEOUT** - -The timeout used by publisher for delay while registering events. - -default: `1000` - -## [Analytics-node](https://segment.com/docs/connections/sources/catalog/libraries/server/node/) configuration - -### **SEGMENT_WRITE_KEY** - -The write keys used for [Analytics](https://segment.com/docs/connections/sources/catalog/libraries/server/node/#identify). Reports the project as a `user segment`. - -## Anonymous Analytics - -### **RETRACED_NO_TELEMETRY** or **DO_NOT_TRACK** - -Set one of these to `1` or `true` to turn off our anonymous analytics. We only track usage events once per day and it does not contain any information that can identify you in any form. diff --git a/docs/retraced/self-host/index.md b/docs/retraced/self-host/index.md deleted file mode 100644 index d6d7dfa..0000000 --- a/docs/retraced/self-host/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Self-host Audit Logs -sidebar_label: Overview ---- - -# Self Hosting - -Getting a production environment of Retraced up and running is probably one of the first things you want to do! This section goes through the different options available depending on where you'll be hosting Retraced. - -Self-hosting Retraced means managing the service yourself and taking care of upgrades, scaling, security etc. - -The docker container can be found at [retracedhq/retraced](https://hub.docker.com/r/retracedhq/retraced/tags). It is preferable to use a specific version instead of the `latest` tag. - -## Deployment options - -- [Docker](docker.md) -- [DigitalOcean](digitalocean.md) -- [AWS](aws.md) -- [Kubernetes](kubernetes.md) -- [Skaffold](skaffold.md) diff --git a/docs/retraced/self-host/kubernetes.md b/docs/retraced/self-host/kubernetes.md deleted file mode 100644 index b1fef0e..0000000 --- a/docs/retraced/self-host/kubernetes.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Self-host Audit Logs on Kubernetes -sidebar_label: Kubernetes -description: Self-host Audit Logs on Kubernetes ---- - -# Kubernetes - -Coming soon. diff --git a/docs/retraced/self-host/local.md b/docs/retraced/self-host/local.md deleted file mode 100644 index 6c8b366..0000000 --- a/docs/retraced/self-host/local.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Running Locally -description: Running Locally ---- - -# Running Locally - -## Clone the project - -`git clone https://github.com/retracedhq/retraced && cd retraced` - -## Install Dependancies - -`yarn install` or `npm i` - -## Set the environment variables - -Use `.env` file to set the [Environment Variables](./env-variables). - -## Tools (DBs, queues, etc.) - -Make sure the tools configured in `.env` file are up & running. - -### [Postgres](./env-variables#postgres-configuration) - -### [NSQ](./env-variables#nsqd-configuration) - -### [Elasticsearch](./env-variables#elasticsearch-configuration) - -### [Supercronic](./env-variables#supercronic-configuration) - -### [Redis](./env-variables#redis-configuration) - -## Postgres Migration - -Create tables and indexes required for Retraced in Postgres. - -`node -r ts-node/register src/_db/runner-lite.ts pg` - -## Elastic Migration - -Create tables and indexes required for Retraced in Elasticsearch. - -`node -r ts-node/register src/_db/runner-lite.ts es` - -## Bootstrap dev environment - -`node -r ts-node/register src/retracedctl.ts bootstrap --projectName dev --projectId dev --environmentId dev --apiKey dev` - -## Start the API - -`node -r ts-node/register src/index.ts` - -## Start the processor - -`node -r ts-node/register src/_processor/index.ts` - -## See it in action - -Use the postman collection located at `./postman/Retraced.postman_collection.json`. -You can import the json file in postman and use the API calls to test Retraced. diff --git a/docs/retraced/self-host/skaffold.md b/docs/retraced/self-host/skaffold.md deleted file mode 100644 index 278718f..0000000 --- a/docs/retraced/self-host/skaffold.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Skaffold -description: Skaffold ---- - -# Skaffold - -## Clone the project - -`git clone https://github.com/retracedhq/retraced && cd retraced` - -You can change the environment variables from `/kustomize/overlays/dev/secrets.yaml`. - -## Run Retraced - -`skaffold dev --status-check=false --force=true` - -## See it in action - -Use the postman collection located at `./postman/Retraced.postman_collection.json`. -You can import the json file in postman and use the API calls to test Retraced. - -`Make sure that the bootstrap & migrations are finished before makeing api calls.` diff --git a/docs/代码库管理/WebIDE.md b/docs/代码库管理/WebIDE.md new file mode 100644 index 0000000..33b3b06 --- /dev/null +++ b/docs/代码库管理/WebIDE.md @@ -0,0 +1,41 @@ +--- +sidebar_label: 'WebIDE' +sidebar_position: 9 +--- + +### **1. 语言服务** +● 支持近 40 种语言的语法高亮 +● 支持 JavaScript/TypeScript、HTML、CSS、JSON、Markdown 的基于 LSP (Language Server Protocol) 语言特性功能,具备智能提示和大纲信息以及单文件内跳转。 +● 支持 Java、Go、Python、C++、Php 的基于 Tree Sitter 的在线语言服务能力,提供查看引用、符号搜索等特性 + +### **2. WebIDE 入口** +从 Gitlink 仓库首页 ,点击Web IDE 按键即可进入 +![](../../static/img/代码库管理/WebIDE/WebIDE入口.png)
+ +### **3. 分支** +支持分支切换:点击左下角分支名即可切换分支。 +![](../../static/img/代码库管理/WebIDE/WebIDE切换分支.png)
+ +### **4. 搜索** +当前支持 Gitlink 仓库内代码搜索(支持单词匹配和文件过滤)和文件搜索。 +![](../../static/img/代码库管理/WebIDE/WebIDE搜索.png)
+ +### **5. 行高亮** +支持单行或多行高亮,点击行号即可高亮行,按住 Shift 可选中连续多行。 +![](../../static/img/代码库管理/WebIDE/WebIDE行高亮.png)
+ +### **6. Blame** +支持查看单行 blame 信息,hover 后可展示详细信息。 +![](../../static/img/代码库管理/WebIDE/WebIDEblame.png)
+ +### **7. Graph** +支持 graph 视图,可查看分支 commits 历史以及每个 commit 详细文件变更,并支持文件 diff 查看。底部状态栏左下角点击 Git Graph 或在命令面板输入 View Git Graph,即可打开 Git Graph 视图。 +![](../../static/img/代码库管理/WebIDE/WebIDEGraph.png)
+ +### **8. WebSCM** +可以在极速版新建分支,修改代码后在 SCM 面板看到变更文件列表,写完 commit message 后提交到 Gitlink 上。如果想快速修改一些文件可以不用在本地修改,直接通过极速版修改代码一次性提交。 + +### **9. 代码在线运行** +● 集成了基于 skypack 的更加轻量的 CodeSwing 插件,可以在极速版去运行前端代码。 +● 集成了基于 Pyodide 的 Code-Runner-For-Web 插件,可以将 Python 的运行搬到浏览器上。 +![](../../static/img/代码库管理/WebIDE/WebIDE代码在线运行.png)
\ No newline at end of file diff --git a/docs/代码库管理/Webhook.md b/docs/代码库管理/Webhook.md new file mode 100644 index 0000000..33bc170 --- /dev/null +++ b/docs/代码库管理/Webhook.md @@ -0,0 +1,38 @@ +--- +sidebar_label: 'Webhook' +sidebar_position: 8 +--- + ### **1. Webhook模块入口** + 在项目主页,点击“仓库设置”按键,再点击“网络钩子”按键,即可进入仓库的Webhook模块。 + ![](../../static/img/代码库管理/Webhook/Webhook入口.png)
+ + ### **2. 添加Webhook** + 单击“添加Webhook”按键,可进入配置Webhook页面: + + ![](../../static/img/代码库管理/Webhook/添加Webhook.png)
+ ![](../../static/img/代码库管理/Webhook/Webhook配置.png)
+ + ### **3. 编辑Webhook** + 添加Webhook后,如下图所示,可以通过点击右侧”编辑“按键来对每个Webhook进行编辑操作。 + + ![](../../static/img/代码库管理/Webhook/编辑Webhook.png)
+ + ### **4. 删除Webhook** + 添加Webhook后,如下图所示,可以通过点击右侧”删除“按键来对每个Webhook进行删除操作。 + + ![](../../static/img/代码库管理/Webhook/删除webhook.png)
+ + ### **5. Webhook支持的事件类型** + 在GitLink中,Webhook支持的事件类型如下: + - 推送:git推送到存储库 + - 代码库:创建或删除代码库 + - 创建:创建分支或标签 + - 删除:删除分支或标签 + - 合并请求:合并请求被打开、被关闭、被重新打开或被编辑 + - 合并请求分配:合并请求被分配或取消分配 + - 合并请求收入里程碑:合并请求被记录或取消记录于里程碑中 + - 合并请求被评论:合并请求评论被创建、编辑或删除 + - 合并请求标签:合并请求的标签被更新或清除 + - 合并请求审查:合并请求被批准、拒绝或提出审查意见,审查人员的修改,审查线程已解决或未解决 + - 合并请求被同步:合并请求被同步 + \ No newline at end of file diff --git a/docs/代码库管理/_category_.json b/docs/代码库管理/_category_.json new file mode 100644 index 0000000..82c9af5 --- /dev/null +++ b/docs/代码库管理/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "代码库管理", + "position": 2 +} diff --git a/docs/代码库管理/仓库创建.md b/docs/代码库管理/仓库创建.md new file mode 100644 index 0000000..e17cd76 --- /dev/null +++ b/docs/代码库管理/仓库创建.md @@ -0,0 +1,11 @@ +--- +sidebar_label: '仓库创建' +sidebar_position: 1 +--- + ### **1. 仓库创建入口** +用户可以通过平台主页右上角的按键以及个人主页参与项目模块的“新建”按键来创建仓库。 +![](../../static/img/代码库管理/仓库创建/仓库创建.png)
+ + ### **2. 填写项目基本信息** +进入新建项目页面后,如下图所示,填写拥有者、项目名称、项目标识等信息,单击”创建项目“按键即可完成创建。 +![](../../static/img/代码库管理/仓库创建/新建项目.png)
\ No newline at end of file diff --git a/docs/代码库管理/仓库设置.md b/docs/代码库管理/仓库设置.md new file mode 100644 index 0000000..6e31214 --- /dev/null +++ b/docs/代码库管理/仓库设置.md @@ -0,0 +1,11 @@ +--- +sidebar_label: '仓库设置' +sidebar_position: 2 +--- +### **1. 仓库设置入口** +在仓库主页,点击“仓库设置”按键即可进入仓库设置模块。仓库设置中可以修改项目的基本信息、进行成员管理、配置webhook、设置分支以及安装bot。 +![](../../static/img/代码库管理/仓库设置/仓库设置.png)
+ +### **2. 基本设置** +进入仓库设置模块后,单击”基本设置“按键,进入基本设置模块,如下图所示,可以对项目的项目名称、项目标识、项目简介、项目类别、项目语言等基本信息进行修改。单击“转移”按键可以将仓库转移给其他用户和组织,单击“删除本仓库“按键可以删除本仓库。 +![](../../static/img/代码库管理/仓库设置/基本设置.png)
\ No newline at end of file diff --git a/docs/代码库管理/代码提交.md b/docs/代码库管理/代码提交.md new file mode 100644 index 0000000..11b6835 --- /dev/null +++ b/docs/代码库管理/代码提交.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '代码提交' +sidebar_position: 3 +--- \ No newline at end of file diff --git a/docs/代码库管理/分支管理.md b/docs/代码库管理/分支管理.md new file mode 100644 index 0000000..f543748 --- /dev/null +++ b/docs/代码库管理/分支管理.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '分支管理' +sidebar_position: 5 +--- \ No newline at end of file diff --git a/docs/代码库管理/成员管理.md b/docs/代码库管理/成员管理.md new file mode 100644 index 0000000..cbf6199 --- /dev/null +++ b/docs/代码库管理/成员管理.md @@ -0,0 +1,23 @@ +--- +sidebar_label: '成员管理' +sidebar_position: 7 +--- +### **1. 成员管理入口** +在仓库主页,点击“仓库设置”按键,再点击”成员管理“按键,即可进入成员管理模块,如下图所示。 +![](../../static/img/代码库管理/成员管理/成员管理入口.png)
+ +### **2. 筛选、搜索项目成员** +进入成员管理模块后,可以通过”角色筛选“按键来筛选项目成员类型,通过”搜索“按键可以检索具体的项目成员,如下图所示。 +![](../../static/img/代码库管理/成员管理/筛选、搜索项目成员.png)
+ +### **3. 筛选、搜索项目成员** +进入成员管理模块后,可以通过”添加成员“按键来添加项目成员,左侧搜索框检索到具体用户并选中后,单击”添加成员“按键即可成功添加项目成员。 +![](../../static/img/代码库管理/成员管理/添加成员.png)
+ +### **4. 项目成员权限管理** +进入成员管理模块后,单击项目成员右侧的角色栏,可以选择赋予该名项目成员的权限等级,如下图所示。 +![](../../static/img/代码库管理/成员管理/项目成员权限管理.png)
+ +### **5. 删除项目成员** +进入成员管理模块后,单击项目成员右侧的”删除“按键,可以删除改名项目成员,如下图所示。 +![](../../static/img/代码库管理/成员管理/删除项目成员.png)
diff --git a/docs/代码库管理/文件管理.md b/docs/代码库管理/文件管理.md new file mode 100644 index 0000000..af8c755 --- /dev/null +++ b/docs/代码库管理/文件管理.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '文件管理' +sidebar_position: 4 +--- \ No newline at end of file diff --git a/docs/代码库管理/标签和发行版管理.md b/docs/代码库管理/标签和发行版管理.md new file mode 100644 index 0000000..44e0ae7 --- /dev/null +++ b/docs/代码库管理/标签和发行版管理.md @@ -0,0 +1,29 @@ +--- +sidebar_label: '标签和发行版管理' +sidebar_position: 6 +--- +### **1. 标签和发行版管理入口** +在仓库主页,点击“代码库”按键,再点击”标签“按键,即可进入标签和发行版管理模块,如下图所示。 +![](../../static/img/代码库管理/标签和发行版管理/标签和发行版管理入口.png)
+ +### **2. 删除标签** +进入标签和发行版管理模块后,点击标签右侧“删除”按键,即可实现对标签的删除操作,如下图所示。 +![](../../static/img/代码库管理/标签和发行版管理/删除标签.png)
+ +### **3. 查看发行版** +进入标签和发行版管理模块后,点击”发行版”按键即可查看项目的发行版,如下图所示。 +![](../../static/img/代码库管理/标签和发行版管理/查看发行版.png)
+ +### **4. 创建发行版** +进入标签和发行版管理模块后,点击标签右侧”创建发行版”按键,即可快速创建绑定该标签的发行版,如下图所示。 +![](../../static/img/代码库管理/标签和发行版管理/发布新版本.png)
+ +### **5. 修改发行版** +进入标签和发行版管理模块后,点击发行版右侧的修改按键,即可进入发行版的修改页面,如下图所示。完成发行版的修改后,单击”保存发行版“按键即可保存修改内容。 +![](../../static/img/代码库管理/标签和发行版管理/修改发行版.png)
+![](../../static/img/代码库管理/标签和发行版管理/发行版修改页面.png)
+ +### **6. 删除发行版** +进入标签和发行版管理模块后,点击发行版右侧的删除按键,即可进入发行版的删除页面,如下图所示。 +![](../../static/img/代码库管理/标签和发行版管理/删除发行版.png)
+ \ No newline at end of file diff --git a/docs/合并请求/_category_.json b/docs/合并请求/_category_.json new file mode 100644 index 0000000..15eab23 --- /dev/null +++ b/docs/合并请求/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "合并请求(PR)", + "position": 5 +} diff --git a/docs/合并请求/代码评审.md b/docs/合并请求/代码评审.md new file mode 100644 index 0000000..9b4aefb --- /dev/null +++ b/docs/合并请求/代码评审.md @@ -0,0 +1,6 @@ +--- +sidebar_label: '代码评审' +sidebar_position: 3 +--- + +# 代码评审 \ No newline at end of file diff --git a/docs/合并请求/创建合并请求.md b/docs/合并请求/创建合并请求.md new file mode 100644 index 0000000..ce7059e --- /dev/null +++ b/docs/合并请求/创建合并请求.md @@ -0,0 +1,22 @@ +--- +sidebar_label: '创建合并请求' +sidebar_position: 2 +--- + +# 创建合并请求 + +1. 进入需要发起合并请求的项目的“**合并请求(PR)**”界面,点击上方的“**新建合并请求**”按钮后,进入合并请求发布界面,如下所示: + +![合并请求模块](/img/PR/imagePR2.png) + +![合并请求发布界面](/img/PR/imagePR3.png) + +2. 选择需要合并的**源分支**和**目标分支**,其中源分支为已完成代码开发、需要合并其代码变更的分支,目标分支为要并入代码变更的分支,既可以是同一仓库下的其他分支(branch),也可以是被复刻的源仓库下的分支; + +3. 选中分支后,填写本次合并请求的标题和描述内容,为审查者提供辅助理解本次合并请求的信息,进而加快合并请求审查过程(见 ***代码评审*** 一节); + +4. 此外,用户还可以在右侧边栏中指定审查人员、添加里程碑、标记以及优先级(合并请求本质上是一个疑修,这些操作与疑修模块中的操作含义相同或相近,所以可以参照疑修章节中的介绍辅助理解); + +5. 最后信息填写完毕后,点击底部的“**创建**”按钮即可提交您的第一个合并请求了🎉🎉🎉! + +![创建合并请求](/img/PR/imagePR4.png) \ No newline at end of file diff --git a/docs/合并请求/合并模式简介.md b/docs/合并请求/合并模式简介.md new file mode 100644 index 0000000..c8d0750 --- /dev/null +++ b/docs/合并请求/合并模式简介.md @@ -0,0 +1,100 @@ +--- +sidebar_label: '合并模式简介' +sidebar_position: 4 +--- + +# 合并模式简介 + +在审阅人审查完开发者提交的代码变更后,便可以决定是否将这些提交合并进主分支`master`中。 + +然而,对于不同分支间的提交合并,存在多种合并模式,下图为GitLink中支持的合并模式,包括**合并请求**、**变基并合并**、**变基合并 --no-ff**以及**压缩提交并合并**四种。 + +![合并模式](/img/PR/imagePR5.png) + +1. **合并请求** + +**合并请求**是最常用的合并模式,以下图为例,开发者在主分支`master`的提交3处拉取了开发分支`dev`,然后分别提交了A、B、C,然后在`master`分支上进行合并。 + +快进合并前: + +![快进合并前](/img/PR/imagePR6.png) + +快进合并后: + +![快进合并后](/img/PR/imagePR7.png) + +**注意**:可以看到,合并的过程就是直接把`master`指针移动到了`dev`指针处,这种合并被称为**快进(fast-forward)**,之所以出现这种情形是因为在提交3之后,`master`分支上没有新的提交,所以通过直接快进`master`指针就可以完成合并;但如果在`master`分支上也有新的提交,就需要进行实质性的合并了,如下面两幅图所示: + +在合并前,`dev`分支上提交A之后、提交B之前,`master`分支上提交了4,这时合并`dev`分支就不能简单地快进移动,而是要比较两个分支上更改的内容,然后进行合并; + +非快进合并前: + +![非快进合并前](/img/PR/imagePR8.png) + + +合并之后,提交A、B、C都会按时间线加入`master`的提交记录中,并且会生成一个新的提交D,用于记录合并这件事情;此外,如果合并过程中发生了冲突,即两个分支对同一个文件进行了修改,则需要手动处理冲突;这种合并方式就是**非快进(no fast-forward)**,这也是**合并请求**模式下的默认方式! + +非快进合并后: + +![非快进合并后](/img/PR/imagePR9.png) + +为了方便理解,可以以线性方式查看合并后的`master`分支上的提交记录 + +![线性的提交记录](/img/PR/imagePR10.png) + +**总结**:在**合并请求**模式下,默认采用**非快进**合并开发分支到`master`分支上,而**非快进**方式会生成一个特殊的提交用于记录此次合并事件! + +2. **变基并合并** + +从**合并请求**后`master`分支上的提交记录可以看出,两个分支的提交记录可能会交叉在一起,这可能会给后续开发带来困扰,而**变基并合并**可以解决这个问题。 + +**变基并合并**包括两个操作:**变基**、**合并**。首先是变基,以下图为例,`dev`分支是从提交3处拉取出来的,所以提交3就是`dev`的基,而变基操作就是改变`dev`的基,使其变为`master`分支上最新的一次提交。当然,变基过程中可能会出现冲突,则需要手动处理。 + +变基前: + +![变基前](/img/PR/imagePR8.png) + +变基后、合并前: + +![变基后_合并前](/img/PR/imagePR11.png) + + +`dev`分支变基之后,`master`分支就没有“更新”的提交了,所以此时进行合并,就得到了如下的结果 + +合并后: + +![合并后](/img/PR/imagePR12.png) + +**总结**:在**变基并合并**模式下,开发分支`dev`可以先进行变基操作,使其上的提交看起来都是在`master`分支最新的提交基础上进行的,然后再通过**快进**方式合并回`master`分支,从而起到整理提交记录的作用! + +3. **变基合并 --no-ff** + +因为**变基并合并**进行合并操作时,默认采用**快进**方式,这样在`master`分支上就没有一个特殊的提交用于记录这次合并事件,所以可以使用`--no-ff`(**no fast-forward**)选项申明采用**非快进**方式进行合并。 + +`--no-ff`合并前: + +![--no-ff合并前](/img/PR/imagePR11.png) + +`--no-ff`合并后: + +![--no-ff合并后](/img/PR/imagePR13.png) + +**总结**:通过`--no-ff`选项,可以显式声明在合并时采用**非快进**方式,这样就可以在`master`分支中添加一个记录合并事件的提交! + +4. **压缩提交并合并** + +在`dev`或者`feature`这样的开发分支中,开发者为了完成某个需求会进行多次提交,然而这些琐碎的提交信息在合并回`master`分支后,会使`master`上的提交记录臃肿混乱,所以需要在合并前,对这些提交进行压缩。如图所示,压缩操作是在`master`分支上进行的,本质是将`dev`分支上进行的变更施加到`master`分支维护的文件上,然后将这些修改用新的提交5保存,最后提交。 + +压缩前: + +![压缩前](/img/PR/imagePR8.png) + +压缩后、提交前: + +![压缩后_提交前](/img/PR/imagePR14.png) + +提交后: + +![提交后](/img/PR/imagePR15.png) + +**总结**:在合并前,先对开发分支上的琐碎提交进行压缩,可以使`master`分支上的提交信息更简洁,但是要注意,这种合并模式本质上是`master`分支一次性保存`dev`上的变更,并创建新的提交记录这些变更,所以提交者发生了变化! \ No newline at end of file diff --git a/docs/合并请求/合并请求关联疑修.md b/docs/合并请求/合并请求关联疑修.md new file mode 100644 index 0000000..ac29313 --- /dev/null +++ b/docs/合并请求/合并请求关联疑修.md @@ -0,0 +1,6 @@ +--- +sidebar_label: '合并请求关联疑修' +sidebar_position: 5 +--- + +# 合并请求关联疑修 \ No newline at end of file diff --git a/docs/合并请求/合并请求简介.md b/docs/合并请求/合并请求简介.md new file mode 100644 index 0000000..c0ac142 --- /dev/null +++ b/docs/合并请求/合并请求简介.md @@ -0,0 +1,16 @@ +--- +sidebar_label: '合并请求简介' +sidebar_position: 1 +--- + +# 合并请求简介 + +**合并请求(PR)** 模块提供合并请求创建和管理两方面的功能: + +- 一方面支持向源项目或者同一个项目其他分支创建(发起)代码合并请求(Pull Request,PR); + +- 另一方面也为项目管理者对他人发送到本项目的合并请求进行管理、审阅并最终确定是否纳入项目。 + +如下图所示为合并请求(PR)管理模块: + +![合并请求管理模块](/img/PR/imagePR1.png) \ No newline at end of file diff --git a/docs/平台公告/_category_.json b/docs/平台公告/_category_.json new file mode 100644 index 0000000..a6b5159 --- /dev/null +++ b/docs/平台公告/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "平台公告", + "position": 11 +} diff --git a/docs/平台公告/平台公告.md b/docs/平台公告/平台公告.md new file mode 100644 index 0000000..3b451a8 --- /dev/null +++ b/docs/平台公告/平台公告.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '平台公告' +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/快速开始/_category_.json b/docs/快速开始/_category_.json new file mode 100644 index 0000000..c826d66 --- /dev/null +++ b/docs/快速开始/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "快速开始", + "position": 1 +} diff --git a/docs/快速开始/创建第一个开源项目.md b/docs/快速开始/创建第一个开源项目.md new file mode 100644 index 0000000..b18cc64 --- /dev/null +++ b/docs/快速开始/创建第一个开源项目.md @@ -0,0 +1,24 @@ +--- +sidebar_label: '创建第一个开源项目' +sidebar_position: 2 +--- + +# 创建第一个开源项目 + +## 1. 新建项目 + +平台提供了“新建”按钮,用户可以通过点击快速从零开始创建新的公开或者私有项目。 + +![创建首页](/img/quickstart/create_homepage.png) + +## 2. 填写项目信息 + +填写项目基本信息。 + +![](/img/quickstart/create_info.png) + +## 3. 创建成功 + +点击创建项目,创建成功后进入项目主页。 + +![](/img/quickstart/create_success.png) diff --git a/docs/快速开始/导入GitHub等第三方Git项目.md b/docs/快速开始/导入GitHub等第三方Git项目.md new file mode 100644 index 0000000..20be5ce --- /dev/null +++ b/docs/快速开始/导入GitHub等第三方Git项目.md @@ -0,0 +1,28 @@ +--- +sidebar_label: '导入GitHub等第三方Git项目' +sidebar_position: 5 +--- + +# 导入GitHub等第三方Git项目 + +## 1. 导入项目 + +在首页选择**导入项目** + +![](/img/quickstart/import_homepage.png) + +## 2. 填写信息 + +填写完需要导入的第三方Git项目地址后和项目信息后,点击导入项目 + +![](/img/quickstart/import_info.png) + +## 3. 导入成功 + +提示正在从第三方Git项目地址迁移 + +![](/img/quickstart/import_wait.png) + +迁移成功则导入项目成功 + +![](/img/quickstart/import_success.png) \ No newline at end of file diff --git a/docs/快速开始/提交第一行代码.md b/docs/快速开始/提交第一行代码.md new file mode 100644 index 0000000..1436b02 --- /dev/null +++ b/docs/快速开始/提交第一行代码.md @@ -0,0 +1,22 @@ +--- +sidebar_label: '提交第一行代码' +sidebar_position: 3 +--- + +# 提交第一行代码 + +# 1. 编辑代码 + +点击编辑按钮,开始编辑代码。 + +![](/img/quickstart/first_edit.png) + +# 2. 提交代码 + +在编辑框中编写代码,编写完成后填写变更信息后提交变更。 + +![](/img/quickstart/first_commit.png) + +## 3. 代码更新成功 + +提交成功后代码代码更新成功。![](/img/quickstart/first_success.png) \ No newline at end of file diff --git a/docs/快速开始/搜索开源项目.md b/docs/快速开始/搜索开源项目.md new file mode 100644 index 0000000..d584762 --- /dev/null +++ b/docs/快速开始/搜索开源项目.md @@ -0,0 +1,44 @@ +--- +sidebar_label: '搜索开源项目' +sidebar_position: 4 +--- + +# 搜索开源项目 + +## 1. 开源项目页面介绍 + +项目”模块汇聚和管理了所有 GitLink 平台上的托管项目和镜像项目,用户可以输入项目名称关键字进行搜索,也可以根据项目类别对项目进行筛选。 + +进入“项目”模块,左侧列出了项目类型和项目类别。其中,项目类型主要包括开源托管项目和开源镜像项目两类。项目类别主要包括:云计算、大数据、区块链、物联网、机器学习、人工智能、智慧医疗、其他。 + +![](/img/quickstart/search_homepage.png) + +右侧展示了所有项目的基本信息,包括创建者、项目名、项目简介、浏览量、项目类别、更新时间、点赞数量、Fork 数量等信息,用户可以通过关键字搜索查找特定的项目,也可以按照更新时间、创建时间、Fork 数量、点赞数量等对项目进行排序。 + +![](/img/quickstart/search_list.png) + +用户点击项目名称,即可进入到项目详情,查看和参与开源项目开发。 + +## 2. 搜索开源项目 + +有两处搜索框可以搜索 + +### 开源项目搜索框 + +搜索项目: + +![](/img/quickstart/search_method1.png) + +搜索结果: + +![](/img/quickstart/search_result1.png) + +### 菜单栏搜索框 + +搜索项目: + +![](/img/quickstart/search_method2.png) + +搜索结果: + +![](/img/quickstart/search_result2.png) \ No newline at end of file diff --git a/docs/快速开始/注册GitLink账号.md b/docs/快速开始/注册GitLink账号.md new file mode 100644 index 0000000..5b3cadf --- /dev/null +++ b/docs/快速开始/注册GitLink账号.md @@ -0,0 +1,27 @@ +--- +sidebar_label: '注册GitLink账号' +sidebar_position: 1 +--- + +# 注册GitLink账号 + +## 1. 点击**立即注册**按钮 + +![](/img/quickstart/register_homepage.png) + +## 2. 填写注册信息 + +- 手机号注册 + + ![](/img/quickstart/register_phone.png) + +- 邮箱注册 + + ![](/img/quickstart/register_email.png) + +## 3. 注册完成 + +填写完所需信息后点击注册,注册成功后则进入个人主页 + +![](/img/quickstart/register_ownpage.png) + diff --git a/docs/服务协议/GitLink服务协议.md b/docs/服务协议/GitLink服务协议.md new file mode 100644 index 0000000..607cc59 --- /dev/null +++ b/docs/服务协议/GitLink服务协议.md @@ -0,0 +1,34 @@ +--- +sidebar_label: 'GitLink服务协议' +sidebar_position: 1 +--- + +尊敬的用户,您好! + +欢迎使用GitLink平台,在您使用GitLink平台前,请您认真阅读并遵守《GitLink服务协议》(以下简称”本协议”),请您务必审慎阅读、充分理解协议的各条款内容。 +当您在注册过程中点击查看”看过并同意本服务协议”,按照注册流程成功注册为GitLink平台的用户即表示您已充分阅读、理解并完全接受本协议中的全部条款。您承诺接受并遵守本协议的约定,届时您不应以未阅读本协议的内容等理由,主张本协议无效或本协议中的某些条款无效,或要求撤销本协议。 + +## 一、GitLink平台权利和义务 +1. 尊重用户隐私:尊重用户隐私,保障用户隐私安全是GitLink平台的一项基本政策; +2. 管理平台用户:GitLink平台依据国家法律、地方法律和国际法律等的标准以及本行业的规则来管理平台注册用户; +3. 处理用户反馈:GitLink平台的相关人员会及时处理用户反馈的问题并给予及时回复。 + +## 二、用户权利和义务 +用户在使用GitLink平台的过程中,必须遵守如下原则: + +1. 遵守中国的有关法律和法规; +2. 使用网络服务不作非法用途; +3. 不干扰和混乱网络服务; +4. 遵守所有使用网络服务的网络协议、规定、程序和惯例; +5. 不传输任何非法的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、伤害性的、庸俗的,淫秽等信息资料; +6. 不传输任何教唆他人构成犯罪行为的资料; +7. 用户不得故意或者过失损害GitLink平台合法权利和利益。 + +## 三、关于责任 +鉴于网络服务的特殊性,用户同意GitLink团队有权在事先通知的情况下,变更、中断、升级部分网络服务。GitLink团队不担保网络服务不会中断,但承诺在用户可承受的时间内快速恢复服务,同时确保用户数据的安全性和可靠性。 + +## 四、服务条款的修改 +GitLink团队保留在必要时对本协议修改的权利,一旦发生变动,这些条款可由GitLink团队及时更新,且毋须另行通知,修改后的条款一旦在网页上公布即有效代替原来的服务条款。您可随时查阅最新版服务条款。 + + +本协议最终解释权归GitLink团队所有。 \ No newline at end of file diff --git a/docs/服务协议/_category_.json b/docs/服务协议/_category_.json new file mode 100644 index 0000000..c6b6703 --- /dev/null +++ b/docs/服务协议/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "服务协议", + "position": 12 +} diff --git a/docs/疑修/_category_.json b/docs/疑修/_category_.json new file mode 100644 index 0000000..71829c3 --- /dev/null +++ b/docs/疑修/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "疑修(Issue)", + "position": 4 +} diff --git a/docs/疑修/标记管理.md b/docs/疑修/标记管理.md new file mode 100644 index 0000000..3217988 --- /dev/null +++ b/docs/疑修/标记管理.md @@ -0,0 +1,22 @@ +--- +sidebar_label: '标记管理' +sidebar_position: 6 +--- + +# 标记管理 + +在疑修的内容编辑页面可以根据疑修的类型对其设置标记,标记的存在方便了在疑修列表中筛选目标疑修,提高项目开发管理效率。
+GitLink默认疑修共有缺陷、功能、疑问、支持、任务、协助、搁置、文档、测试和重复共计十种标记类型,分别具有不同的含义和颜色标志: + +- **缺陷:** 表示存在意外问题或错误; +- **功能:** 表示新功能申请; +- **疑问:** 表示存在疑惑; +- **支持:** 表示特定功能或特定需求; +- **任务:** 表示需要分配的任务; +- **协助:** 表示需要社区用户协助; +- **搁置:** 表示此问题暂时不会继续处理; +- **文档:** 表示文档材料补充; +- **测试:** 表示需要测试的需求; +- **重复:** 表示已存在类似的疑修。 + +另外,**项目成员**可以根据需求或习惯,进行标记含义或颜色标志的修改、新建标记和删除标记操作。 \ No newline at end of file diff --git a/docs/疑修/疑修列表.md b/docs/疑修/疑修列表.md new file mode 100644 index 0000000..5ac8734 --- /dev/null +++ b/docs/疑修/疑修列表.md @@ -0,0 +1,13 @@ +--- +sidebar_label: '疑修列表' +sidebar_position: 4 +--- +# 疑修列表 + +对于项目开发过程中创建的所有疑修,可以在**疑修(Issue)** 界面统一查看,如下图所示为[确实开源](https://www.gitlink.org.cn/Gitlink/forgeplus)项目下的疑修列表。 + +![](/img/Issue/imageIssue5.png) + ++ **创建疑修**:在疑修列表界面下,点击“**创建疑修**”按钮,同样可以创建疑修,具体见 ***疑修创建*** 一节; + ++ **筛选疑修**:疑修列表支持不同条件筛选,包括发布人、标记(见 ***标记管理*** 一节)、里程碑(见 ***里程碑管理*** 一节),负责人、状态和开始/结束日期等;同时支持关键字搜索,以及按多种排序规则对疑修进行排序。 \ No newline at end of file diff --git a/docs/疑修/疑修创建.md b/docs/疑修/疑修创建.md new file mode 100644 index 0000000..69e3423 --- /dev/null +++ b/docs/疑修/疑修创建.md @@ -0,0 +1,13 @@ +--- +sidebar_label: '疑修创建' +sidebar_position: 2 +--- +# 疑修创建 + +1. 进入需要发布疑修的项目的“**代码库**”界面,点击上方的“**+疑修**”按钮即可进入疑修发布界面,如下图所示: + +![](/img/Issue/imageIssue2.png) + +2. 开始创建疑修,包括疑修标题、内容,输入疑修内容时既可以采用简单灵活的[Markdown语法](https://markdown.com.cn/),同时可以点击上方的功能按钮;然后上传需要的附件内容;最后点击“**创建**”按钮提交你的第一个疑修🎉🎉🎉 + +![](/img/Issue/imageIssue3.png) \ No newline at end of file diff --git a/docs/疑修/疑修状态变更.md b/docs/疑修/疑修状态变更.md new file mode 100644 index 0000000..7984618 --- /dev/null +++ b/docs/疑修/疑修状态变更.md @@ -0,0 +1,19 @@ +--- +sidebar_label: '疑修状态变更' +sidebar_position: 3 +--- +# 疑修状态变更 + +**疑修**本质上是开发任务,而开发任务随着开发活动的进行,其状态也会发生改变,而“**状态**”便是用于跟踪记录开发活动的变更。如图所示,GitLink中疑修的**状态**包括“新增”、“正在解决”、“已解决”、“关闭”和“拒绝“五类,用于表示开发任务的处理进度。 + +![](/img/Issue/imageIssue4.png) + ++ **新增**:新创建的疑修默认状态为“新增”; + ++ **正在解决**:若已创建的疑修处在解决过程中,此时可将疑修状态修改为“正在解决”; + ++ **已解决**:疑修被开发者解决,此时可将其状态改为“已解决”✅; + ++ **关闭**:已被解决或者没有必要继续开启的疑修,可被设置为“关闭”; + ++ **拒绝**:若被指派解决疑修的开发者拒绝处理该疑修,则可把疑修设置为“拒绝”状态❌。 \ No newline at end of file diff --git a/docs/疑修/疑修简介.md b/docs/疑修/疑修简介.md new file mode 100644 index 0000000..fec3dc0 --- /dev/null +++ b/docs/疑修/疑修简介.md @@ -0,0 +1,17 @@ +--- +sidebar_label: '疑修简介' +sidebar_position: 1 +--- +# 疑修简介 + +**疑修(Issue)** 管理模块主要为项目组成员提供**开发任务**发布、指派、跟踪等功能服务。 + +![](/img/Issue/imageIssue1.png) + +**说明事项** + +1. **疑修**是一个可以追踪开发任务进度的帖子,因此支持参与者回复与评论等功能,见 ***评论及操作记录*** 一节; + +2. **疑修**的默认类型(标记)包括缺陷、功能、任务、支持、周报等,具体见 ***标记管理*** 一节; + +3. 可以为**疑修**设置开始和结束时间,并指定负责解决该任务的负责人,在疑修截止日期的前一天,系统将自动为任务的发布者和被指派人发送提醒消息。 diff --git a/docs/疑修/评论及操作记录.md b/docs/疑修/评论及操作记录.md new file mode 100644 index 0000000..36f3054 --- /dev/null +++ b/docs/疑修/评论及操作记录.md @@ -0,0 +1,11 @@ +--- +sidebar_label: '评论及操作记录' +sidebar_position: 5 +--- + +# 评论及操作记录 +### 评论 +每个疑修都相当于一个可以进度追踪的帖子,因此支持评论和回复,不仅仅是项目成员,所有人都可以在某个疑修下进行评论和回复,发表疑问或是见解,进行交流。 +### 操作记录 +所有人都可以创建疑修,但是要注意,非项目成员仅可以修改自己创建的疑修,而项目成员有权限修改所有的疑修。 +对于某个疑修的所有编辑操作,包括**创建疑修、添加负责人、移除负责人、更改状态、更改优先级、添加标记、移除标记、添加里程碑、移除里程碑、设置关联分支、移除关联分支、设置开始日期和设置结束日期**,均被记录在操作记录中。 \ No newline at end of file diff --git a/docs/疑修/里程碑管理.md b/docs/疑修/里程碑管理.md new file mode 100644 index 0000000..9790e35 --- /dev/null +++ b/docs/疑修/里程碑管理.md @@ -0,0 +1,29 @@ +--- +sidebar_label: '里程碑管理' +sidebar_position: 7 +--- + +# 里程碑管理 + +### 里程碑简介 +里程碑主要用于项目组对项目开发和版本发布提供支持,每一个里程碑可以关联多个开发任务。 + +### 创建里程碑 +项目成员可以基于以下步骤创建里程碑: +1. 进入目标项目的 **“里程碑”** 界面,此时界面所示为已创建的里程碑的列表,所有已创建里程碑分为 **“已关闭”** 和 **“开启中”** 两类; +2. 点击上方的 **“+创建里程碑”** 按钮即可进入里程碑创建界面; +3. 填写标题(必填)、描述(必填)、截止日期(选填)后,点击右下角的 **“创建里程碑”** 即可以完成一个新的里程碑的创建。 + +### 关联里程碑 +项目成员可以将疑修关联到里程碑,从而使里程碑包含明确的疑修列表,主要步骤如下: +1. 在疑修列表中点击目标疑修; +2. 编辑“里程碑”属性,选择需要关联的里程碑。 + + +### 其他操作 +- **开启里程碑** +- **关闭里程碑** +- **编辑里程碑** +- **删除里程碑** + +上述操作均可以在里程碑列表中,对目标里程碑进行处理实现。 \ No newline at end of file diff --git a/docs/第三方服务/WebIDE.md b/docs/第三方服务/WebIDE.md new file mode 100644 index 0000000..3d152e9 --- /dev/null +++ b/docs/第三方服务/WebIDE.md @@ -0,0 +1,122 @@ +--- +sidebar_label: 'WebIDE' +sidebar_position: 9 + +--- +## WebIDE背景 +传统的代码托管平台提供了代码仓库的 Git/SVN 的管理,可以在平台上做代码浏览、代码评审、缺陷管理、CI 流水线等和代码相关的活动。其中代码浏览、代码评审所用的编辑器组件一般为 CodeMirror,代码高亮使用 highlight.js,常常只提供了读代码的场景。蚂蚁研发效能部门云研发团队通过自研的 OpenSumi 框架及基于 OpenSumi 框架做的专门针对于 Web IDE(无远程容器)场景的极速版 Web IDE 框架,与内部代码托管平台碰撞出了创新型的、只依赖浏览器的、IDE 风格的代码阅读、代码编写、代码提交、代码运行、代码评审等场景,极大的提高了用户在代码托管平台阅读代码、代码评审、轻研发等场景的效率。本次蚂蚁研发效能云研发团队和 CCF(中国计算机学会)GitLink 代码托管平台合作,将内部极速版 Web IDE 应用到了 Gitlink 代码托管平台上,解决了长久以来的用户反馈的很多体验问题。 + +## Web IDE 核心能力 +对标有容器的标准版,极速版 IDE 主要在读、写、运行、提交等方面进行了探索: + + **1. 读:** + - a. 适配了多种代码托管平台,例如 Gitlink、Github、Gitlab 等代码托管平台,业务可以非常方便的使用代码服务的能力 + - b. 内置了包括 Java、TS/JS、C++、Go、Python、Rust 等几十种常见语言的语法高亮支持 + - c. 支持了如 Git Blame、GitGraph 等代码阅读辅助插件 + + **2. 写:** + - a. 支持 HTML/CSS/JS/Markdown 等在线语言服务能力,支持错误诊断能力 + - b. 浏览器文件系统 + + **3. 运行:** + - a. 支持基于 Skypack 的前端代码运行方案 + - b. 支持基于 Pyodide 的 Python 运行 + + **4. 提交:** + - a. 支持 WebSCM,提供分支切换/新增、代码提交等能力 + +如果说以 CodeMirror、Monaco 为代表的浏览器 IDE 组件为 Web IDE 1.0,那拥有上述能力的极速版 Web IDE 就是 Web IDE 2.0。极速版 Web IDE 方案在蚂蚁内部与 2021 年 4 月上线,承接了代码阅读、代码评审、在线笔试、代码检查结果反馈、轻量在线研发等众多场景,同年 8 月 vscode.dev 和 github.dev 上线,与之相比,极速版 Web IDE 利用 OpenSumi 框架的高扩展性,业务可以更加深度的定制模块与插件,让业务有多的想象空间。 + +## 代码阅读 +在代码托管平台上进行代码阅读时经常需要查看当前方法在哪里被引用、当前接口在哪里被实现,极速版 Web IDE 提供编辑器 + 插件的能力,解决了上述用户需求: +![](/img/di_san_fang/WebIDE/代码引用.png) + +
代码引用查看
+Gitlink 通过实现 Blame 插件,完成了编辑器 Blame 查看的能力: + +![](/img/di_san_fang/WebIDE/当前代码.png) +
当前代码行作者、修改日期查看
+ + +## 代码评审 +代码评审功能用户长久以来一直反馈以下几个问题: + +- 1.语言服务缺失,阅读效率低:缺少代码高亮、提示、跳转、查看引用及大纲功能 +- 2.大 PR 浏览体验不佳:统计显示 Gitlink PR 平均有 14-17 个变更文件,传统代码评审交互一般为代码 Diff 组件流式展示,对于一些变更文件多、文件内部较大的场景 Review 体验不佳,常常要等待很久。 +- 3.代码修改流程重,耗时久:代码 Diff 组件只有读能力,无法快速修改一些拼写或 lint 错误,需要在本地找到对应文件后修改提交 针对于上述需求,蚂蚁云研发团队和 Gitlink 打造了 IDE 风格的代码评审场景: +![](/img/di_san_fang/WebIDE/IDE模式的代码评审.png) + +
IDE模式的代码评审
+- 1.变更树 a. 提供平铺和树状两种浏览方式 b. 变更树使用 OpenSumi Recycle 组件,对于大 PR 也能通过虚拟滚动高性能的查看变更文件 +- 2.工具栏 a. 提供 IDE 编辑器基础设置,如字体大小、编码、忽略收尾空格等 b. 快速切换当前分支历史版本与基线的对比 c. 变更文件快速定位、设置已查看,并支持快捷键快速执行 +- 3.编辑器 a. 通过 monaco fold 能力完成非变更内容的折叠 b. 自定义评论组件嵌入编辑器 +- 4.插件 a. 复用代码浏览 Blame 插件能力进行代码行 Git 信息查看 除了上述能力,Gitlink 还支持了在代码评审时快速修改代码: + +![](/img/di_san_fang/WebIDE/代码评审.png) +
代码评审时可修改代码
+ +## Gitlink Web IDE +Gitlink 代码阅读场景虽然接入极速版 IDE 编辑器,但文件树、代码搜索、快捷键、IDE 皮肤、等均和平时开发时使用习惯的 IDE 差异较大,更有大部分用户仅仅是为了代码阅读将代码克隆到本地,尽管保证了一致的体验,但整个链路繁琐费时。 +基于这个洞察,蚂蚁云研发团队和 Gitlink 推出 Gitlink Web IDE,可以一键快速打开 Web IDE 访问阅读项目仓库代码,实现项目与 IDE 的无缝衔接,保持研发同学的日常偏好习惯,同时完美兼容 Gitlink 代码托管平台。更重要的是,通过无容器在浏览器上直接运行一个极速版 IDE,确保「秒开」的即时体验。 + +#### **1. 快速体验** +从 Gitlink 仓库首页 Web IDE 入口即可体验 +![](/img/di_san_fang/WebIDE/WebIDE入口.png) +
Gitlink WebIDE 入口
+ +#### **2. 代码浏览体验** +与传统 IDE 一致的代码浏览体验。文件树、皮肤样式、快捷键一应俱全。 +#### **3. 语言功能** +- 1.支持近 40 种语言的语法高亮 +- 2.支持 JavaScript/TypeScript、HTML、CSS、JSON、Markdown 的基于 LSP (Language Server Protocol) 语言特性功能,具备智能提示和大纲信息以及单文件内跳转。 +![](/img/di_san_fang/WebIDE/JS语言服务提示.png) +
JS语言服务提示
+ +- 3. 提供了 Java、Go、Python、C++、Php 的在线语言服务能力,支持简单的定义跳转、查找引用等功能,让大家更加方便的阅读代码 + +![](/img/di_san_fang/WebIDE/python查看引用.png) +
Python 查看引用
+ +#### **4. 分支新建与切换** +点击左下角分支名即可新建/切换分支。 + +![](/img/di_san_fang/WebIDE/分支新建.png) +
分支新建与切换
+ + +#### **5. 文件搜索** +使用 CMD/Ctrl + P 唤起文件搜索面板 + +![](/img/di_san_fang/WebIDE/文件搜索.png) +
文件搜索面板
+ +#### **6. 行高亮** +持单行或多行高亮,点击行号即可高亮行,按住 Shift 可选中连续多行。 +![](/img/di_san_fang/WebIDE/多选行高亮.png) +
多选行高亮
+ +#### **7. Blame** +支持查看单行 blame 信息,hover 后可展示详细信息。 +![](/img/di_san_fang/WebIDE/Blame详细信息.png) +
Blame详细信息
+ +#### **8. Graph** +支持 graph 视图,可查看分支 commits 历史以及每个 commit 详细文件变更,并支持文件 diff 查看。底部状态栏左下角点击 Git Graph 或在命令面板输入 View Git Graph,即可打开 Git Graph 视图。 +![](/img/di_san_fang/WebIDE/Graph.png) +
Graph 详细信息
+ + +#### **9.WebSCM** +对于开发来说日常多个需求并行开发是非常常见的事,经常修改一些很小但必要的逻辑,而也许你本地环境已经在开发下一个需求,频繁的分支切换并行修改又容易出错。通过 Gitlink Web IDE 极速切换分支修改提交一气呵成,无需打断本地开发流程。 +![](/img/di_san_fang/WebIDE/WebSCM.png) +
WebSCM
+ + +#### **10.代码在线运行** +目前如果在没有容器的情况下,大部分应用只能运行前端代码。Gitlink Web IDE 集成了基于 skypack 的更加轻量的 CodeSwing 插件,可以在极速版去运行前端代码,并且代码版本是使用 Gitlink 来管理。结合上述 WebSCM 能力,甚至能在一分钟完成前端代码初始化、编写、预览和代码提交。 +![](/img/di_san_fang/WebIDE/前端代码.png) +
前端代码运行
+ +随着 Webassembly 技术的发展,一些后端语言也可以运行在浏览器里,在 2021 年 Google IO 大会上,StackBlitz 展示了他们最近做的技术:WebContainer,该能力可以将语言运行时编译为 Webassembly 从而运行在浏览器上。Code-Runner-For-Web 插件结合 Pyodide,已经将 Python 的运行搬到了浏览器上,新版极速版也默认集成了该插件。 +![](/img/di_san_fang/WebIDE/Python代码运行.png) +
Python代码运行
\ No newline at end of file diff --git a/docs/第三方服务/_category_.json b/docs/第三方服务/_category_.json new file mode 100644 index 0000000..a1d9d5b --- /dev/null +++ b/docs/第三方服务/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "第三方服务", + "position": 9 +} diff --git a/docs/第三方服务/跨平台代码同步.md b/docs/第三方服务/跨平台代码同步.md new file mode 100644 index 0000000..3330e5b --- /dev/null +++ b/docs/第三方服务/跨平台代码同步.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '跨平台代码同步' +sidebar_position: 2 +--- \ No newline at end of file diff --git a/docs/第三方服务/重睛鸟代码溯源.md b/docs/第三方服务/重睛鸟代码溯源.md new file mode 100644 index 0000000..420351b --- /dev/null +++ b/docs/第三方服务/重睛鸟代码溯源.md @@ -0,0 +1,71 @@ +--- +sidebar_label: '重睛鸟代码溯源' +sidebar_position: 1 +--- + +## 代码分析入口 + +![](/img/di_san_fang/重晴鸟代码溯源/代码分析入口.png) +
代码分析入口
+ +页面说明: +- 1、在"维基"与"动态"之间加入"服务"菜单,并设计前置icon。 +- 2、用户可点击"服务"菜单 tab 进入服务页面。 +- 3、仓库管理员可在"仓库设置" tab 中项目导航处开启/关闭代码分析菜单可见性,如下图: + +![](/img/di_san_fang/重晴鸟代码溯源/项目导航.png) +
项目导航
+ +## 代码分析检测 +![](/img/di_san_fang/重晴鸟代码溯源/代码分析检测.png) +
代码分析检测
+ +页面说明: +- 1、此页面为暂无历史分析记录时页面展示。 +- 2、"新建分析"按钮仅对仓库管理员可见。仓库开发者、观察者、游客访问此页面时,"新建分析"按钮不可见。 +- 3、点击"新建分析"按钮,需判断该仓库是否已签订协议(是否开启代码分析功能)。 + +## 代码分析协议签订 +![](/img/di_san_fang/重晴鸟代码溯源/代码分析协议签订.png) +
代码分析协议签订
+ +页面说明: +- 1、用户点击"新建分析"按钮,需判断该仓库是否已签订协议(是否开启代码分析功能),若未签订协议,则弹出签订协议弹窗。 +- 2、签订协议流程: +①用户将垂直滚动条拉至最底部。 +②勾选阅读并同意协议条款。 +③点击同意协议(若未勾选"我已阅读并同意《用户协议及声明条款》",则"同意协议"按钮置灰)。 +- 3、用户勾选 CheckBox ,并点击"同意协议"按钮,逻辑上等同于代码溯源系统中新建一个账户。在页面交互上,相当于点击"新建分析"按钮弹出分支选择弹窗。 + +## 分支选择 +![](/img/di_san_fang/重晴鸟代码溯源/分支选择.png) +
分支选择
+ +页面说明: +- 1、用户点击“新建分析”按钮,弹出新建分析需要选择填写分支。 +- 2、图中检测类型、检测参数均为默认值,不允许用户修改,此处展示在界面上,仅起到提示用户,让用户知晓作用。 +- 3、点击此处“开始检测”即开启基于选中分支的检测,新建一个检测列表。 + +## 列表展示 +![](/img/di_san_fang/重晴鸟代码溯源/列表展示.png) +
列表展示
+ +页面说明: +- 1、当检测列表行数超过一行时,“新建分析”按钮左侧提供分支名称的筛选下拉框,下拉框内选项为列表中分支的集合。若本仓库有分支1、2、3、4、5,此列表中有分支3、4,则此处下拉框中分支类型仅为3、4。 +- 2、当新建分析任务正在检测中时,检测状态处有百分比进度条展示现有进度。 +- 3、点击“重新扫描”按钮,将弹出一条新建分析的弹窗,此弹窗保存所有上次已配置的分支信息,检测分支不可修改(分支下拉选中框置灰)。确认新建后,将新增一条检测数据。 +- 4、点击删除将出现二次确认弹框:“此操作将永久删除该检测记录,是否继续?”,用户点击确认后,此条检测记录将从列表中移除。 + +## 结果展示 +![](/img/di_san_fang/重晴鸟代码溯源/结果展示.png) +
结果展示
+页面说明: +- 1、用户在代码检测"操作"列表点击"查看"按钮,将在当前页面展开结果展示页面。当用户再次点击"查看"按钮后,结果展示页面收回;当用户点击其他检测记录"查看"按钮后,将展开其他检测记录的结果页,收回当前已展开的结果展示页; +- 2、当检测状态为"失败"状态,或当前处于"正在检测"状态时,"查看"按钮将置灰,处于无法点击状态; +- 3、结果展示页取代码溯源已有页面,嵌入至 GitLink 即可,无需再次设计。 + +## 用户操作流程 +![](/img/di_san_fang/重晴鸟代码溯源/用户操作流程.png) +
用户操作流程
+ + diff --git a/docs/组织管理/_category_.json b/docs/组织管理/_category_.json new file mode 100644 index 0000000..bb58afa --- /dev/null +++ b/docs/组织管理/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "组织管理", + "position": 3 +} diff --git a/docs/组织管理/组织创建及设置.md b/docs/组织管理/组织创建及设置.md new file mode 100644 index 0000000..b39a71b --- /dev/null +++ b/docs/组织管理/组织创建及设置.md @@ -0,0 +1,31 @@ +--- +sidebar_label: '组织创建及设置' +sidebar_position: 2 +--- +# 组织创建(Organization Creation) + + 在 *https://www.gitlink.org.cn* 页面点击顶部导航栏的“+”符号可以进行组织新建操作。 + + ![](/img/Org/imageOrg1.png) + + 在新建页面中输入**组织账号**、**组织名称**、**组织描述**、**所在地区**、**可见性**以及**组织头像**等信息后,点击“**创建组织**”按钮完成组织的创建。 + + ![](/img/Org/imageOrg2.png) + +## 组织账号 + + ![](/img/Org/imageOrg4.png) + + **注**:只能使用以字母、数字开头,包含字母、数字、下划线、横杠等,长度4到20个字符 + +## 组织名称与组织描述 + + ![](/img/Org/imageOrg5.png) + + **注**:此处为必填项,不得为空 + +## 可见性 + + ![](/img/Org/imageOrg3.png) + + **注**:可见性预设三类组织:公开、受限(仅对登录用户可见)、私有(仅对组织成员可见)。 diff --git a/docs/组织管理/组织团队管理.md b/docs/组织管理/组织团队管理.md new file mode 100644 index 0000000..ce0c356 --- /dev/null +++ b/docs/组织管理/组织团队管理.md @@ -0,0 +1,34 @@ +--- +sidebar_label: '组织团队管理' +sidebar_position: 3 +--- +# 组织团队管理 + +## 创建组织团队 +点击组织信息页面中的“新建团队”按钮可以创建属于该组织的团队(平台默认创建“Owners”团队,成员为组织的创建者)。 + +在团队新建页面,输入团队标识、团队名称、团队描述、项目权限以及版本库权限等信息后,点击“新建团队”完成团队的创建。 + + ![](/img/Org/imageOrg9.png) + +## 查看组织团队 + +点击组织信息页面中的某个团队名称可以查看该团队的详细信息,该页面包括团队的名称、描述等信息,此外还会列出该团队关联的成员以及项目。 + + ![](/img/Org/imageOrg8.png) + +## 管理组织团队 + +点击团队信息页面中的“团队设置”按钮可以对团队进行管理 + + - 基本设置:修改项目的基本信息,如名称和描述等。 + ![](/img/Org/imageOrg10.png) + + - 团队成员管理:为该团队添加新成员或者移除已有成员。 + ![](/img/Org/imageOrg11.png) + + - 团队项目管理:为该团队关联新项目(该组织已经创建的项目)或者移除已关联项目。 + ![](/img/Org/imageOrg12.png) + + + diff --git a/docs/组织管理/组织成员管理.md b/docs/组织管理/组织成员管理.md new file mode 100644 index 0000000..b178a64 --- /dev/null +++ b/docs/组织管理/组织成员管理.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '组织成员管理' +sidebar_position: 4 +--- \ No newline at end of file diff --git a/docs/组织管理/组织简介.md b/docs/组织管理/组织简介.md new file mode 100644 index 0000000..469b59d --- /dev/null +++ b/docs/组织管理/组织简介.md @@ -0,0 +1,28 @@ +--- +sidebar_label: ‘组织简介’ +sidebar_position: 1 +--- + +# 组织简介 + +组织是共享帐户,其中业务和开源项目可同时跨多个项目进行协作,具有复杂的安全性和管理功能。多个个人帐户可以通过加入同一组织帐户来协作处理共享项目。 + +您的团队可以通过使用组织帐户在 GitLink 上进行协作,组织帐户充当共享工作的容器,并为工作赋予独特的名称和品牌。同时,平台支持组织在“组织详情”页面发布新闻动态,显示项目概览和仓库详情等内容 + + ![](/img/Org/imageOrg6.png) + +## 作为组织拥有者 + +有效管理组织,是您的使命。 + +组织提供了一个集中式的合作与共享中心,让您的团队一起工作,共享资源并实现更有效地沟通。 + +为了简化访问管理并增强协作,您可以创建能体现组结构的嵌套团队。您可以根据他们的角色或项目将人员分组,并分配任务。 + + ![](/img/Org/imageOrg7.png) + +平台同时支持组织拥有者管理对数据访问的自定义设置。 + +## 作为组织成员 + +您可以通过组织与无限数量的人在多个项目中协作,与志同道合的人一起,通过分工和写作,参与开发流程,发布或处理问题。 diff --git a/docs/组织管理/组织项目管理.md b/docs/组织管理/组织项目管理.md new file mode 100644 index 0000000..2253db7 --- /dev/null +++ b/docs/组织管理/组织项目管理.md @@ -0,0 +1,12 @@ +--- +sidebar_label: '组织项目管理' +sidebar_position: 5 +--- + ## 创建组织项目 + +点击组织信息页面中的“新建项目”按钮可以创建属于该组织的托管项目或者镜像项目。 + + ![](/img/Org/imageOrg13.png) + + **注**:在“拥有者”一栏的下拉选项中,可以选择:个人、组织、团队 + diff --git a/docs/维基/_category_.json b/docs/维基/_category_.json new file mode 100644 index 0000000..9072bcc --- /dev/null +++ b/docs/维基/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "维基(Wiki)", + "position": 7 +} diff --git a/docs/维基/模板导入及导出.md b/docs/维基/模板导入及导出.md new file mode 100644 index 0000000..0901b17 --- /dev/null +++ b/docs/维基/模板导入及导出.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '模板导入及导出' +sidebar_position: 2 +--- \ No newline at end of file diff --git a/docs/维基/维基页面管理.md b/docs/维基/维基页面管理.md new file mode 100644 index 0000000..1ed56fc --- /dev/null +++ b/docs/维基/维基页面管理.md @@ -0,0 +1,4 @@ +--- +sidebar_label: '维基页面管理' +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/通知/_category_.json b/docs/通知/_category_.json new file mode 100644 index 0000000..aabbf21 --- /dev/null +++ b/docs/通知/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "通知", + "position": 10 +} diff --git a/docs/通知/通知简介.md b/docs/通知/通知简介.md new file mode 100644 index 0000000..278389b --- /dev/null +++ b/docs/通知/通知简介.md @@ -0,0 +1,29 @@ +--- +sidebar_label: '通知简介' +sidebar_position: 1 +--- + +# 确实开源帮助中心 + +## 通知简介 +#### 1.通知类型 +GitLink将通知分为“系统通知”和“@我”的两种类型: +* 系统通知包括“我的状态”、“我创建的或负责的”、“我管理的仓库”三种类型的通知: + +| 系统通知类型 | 具体通知内容 | +| ----------- | ----------- | +| 我的状态 | 账号有权限变更;被拉入或移出组织;被拉入或移出项目;有新的疑修指派给我;有新的合并请求指派给我;| +| 我创建的或负责的 | 疑修状态变更;合并请求状态变更;| +| 我管理的仓库 | 有新的疑修;有新的合并请求;有成员变动;仓库设置被更改;| +* “@我”的通知目前支持在用户首页、课程首页、项目首页的动态列表中使用@功能对用户进行通知: + 例,在项目首页提交疑修时,输入@后可以通过下拉列表选择@其他用户。 + ![](/img/notice/@notice.png) + +#### 2.查看通知 +登录后在平台右上角个人头像旁即可查看收到的通知数量;移动光标至通知按钮出现下拉列表可以分别查看“系统通知”和“@我”的通知;下拉列表右下角可以对所有消息进行一键已读;点击通知即可跳转至通知详情界面。 +![](/img/notice/home_notice2.png) +
+ + +点击通知按钮可以进入消息通知界面,“我的通知”界面可以进行“进查看未读消息”和“所有消息一键已读”的选择。 +![](/img/notice/my_notice2.png) \ No newline at end of file diff --git a/docs/通知/通知设置.md b/docs/通知/通知设置.md new file mode 100644 index 0000000..37f798c --- /dev/null +++ b/docs/通知/通知设置.md @@ -0,0 +1,20 @@ +--- +sidebar_label: '通知设置' +sidebar_position: 2 +--- + + +# 确实开源帮助中心 + +## 通知设置 +#### 1.进入通知设置界面 +通过点击首页的通知按钮进入通知设置界面; +![](/img/notice/home_notice.png) +
+或在头像下拉列表中选择设置可以进入消息通知设置界面; +![](/img/notice/into_notice.png) + +#### 2.进行通知设置 +通过“通知管理”可以对接受通知的方式进行设置,默认所有通知都是通过站内信的方式接受,可以通过勾选为重要的通知类型增加邮件接受方式。 + +![](/img/notice/notice_set.png) \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 99680f0..629d942 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,23 +1,23 @@ -const copyright = '2021-present © BoxyHQ Inc.'; +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').DocusaurusConfig} */ module.exports = { - title: 'Security Building Blocks for Developers', - tagline: - 'BoxyHQ helps startups enable enterprise features in any SaaS app with just a few lines of code. Integrate SAML, Audit Logs, Privacy Vault and Role Based Access in minutes. Open source and free.', + title: 'gitlink', + tagline:'gitlink帮助中心', url: 'https://boxyhq.com', baseUrl: '/', - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'throw', - favicon: 'img/favicon.ico', - organizationName: 'boxyhq', // Usually your GitHub org/user name. - projectName: 'website', // Usually your repo name. + onBrokenLinks: 'ignore', + onBrokenMarkdownLinks: 'ignore', + favicon: 'img/icon.ico', + organizationName: 'luffyZh', // Usually your GitHub org/user name. + projectName: 'docusaurus-luffyzh-website', // Usually your repo name. scripts: [], // stylesheets: ['styles/dark-mode.css'], themeConfig: { prism: { - theme: require('prism-react-renderer/themes/dracula'), - additionalLanguages: ['php'], + theme: lightCodeTheme, + darkTheme: darkCodeTheme, }, zoom: { selector: '.markdown :not(em) > img', @@ -28,170 +28,102 @@ module.exports = { }, }, }, - announcementBar: { - id: 'announcement-bar', - content: - '⭐ Star Enterprise SSO on GitHub ⭐ Star Audit Logs on GitHub', - isCloseable: false, - }, - image: 'img/website-preview-image.png', colorMode: { defaultMode: 'light', disableSwitch: false, respectPrefersColorScheme: true, }, navbar: { - title: 'BoxyHQ', + style:"dark", + title: '', logo: { - alt: 'BoxyHQ', - width: '32px', - height: '32px', - src: 'img/logo.png', - srcDark: 'img/logo-dark.png', + // width: '32px', + // height: '32px', + alt: 'gitlink', + src: 'img/gitlink.png' + // srcDark: 'img/logo-dark.png', }, items: [ - { - label: 'Products', - type: 'dropdown', - items: [ - { - to: '/enterprise-sso', - label: 'Enterprise SSO', - }, - { - to: '/directory-sync', - label: 'Directory Sync', - }, - { - to: '/audit-logs', - label: 'Audit Logs', - }, - { - to: '/privacy-vault', - label: 'Privacy Vault', - }, - { to: '/saas-registration', label: 'SaaS Early Access' }, - ], - }, - { - label: 'Developers', - type: 'dropdown', - items: [ - { to: '/docs', label: 'Docs' }, - { to: '/guides', label: 'Guides' }, - { to: '/enterprise-readiness', label: 'Enterprise Readiness' }, - { - href: 'https://mocksaml.com', - label: 'Mock SAML', - }, - { - href: 'https://github.com/boxyhq/saas-starter-kit', - label: 'Enterprise SaaS Starter Kit', - }, - { - href: 'https://awesome-oss-devsec.boxyhq.com', - label: 'Developer Security Tools', - }, - ], - }, - { to: '/blog', label: 'Blog' }, - { to: '/pricing', label: 'Pricing' }, - { - label: 'Company', - type: 'dropdown', - position: 'right', - items: [ - { - to: '/careers', - label: 'Careers', - }, - { - to: '/team', - label: 'Team', - }, - { - to: '/pledge', - label: 'Pledge', - }, - ], - }, - { - href: 'https://github.com/boxyhq', - position: 'right', - className: 'header-github-link', + { + type: 'doc', + docId: 'intro', + position: 'left', + label: '帮助中心' }, + // { + // href: 'https://github.com/boxyhq', + // position: 'right', + // className: 'header-github-link', + // }, ], }, footer: { style: 'dark', + logo:{ + src:"img/gitlink.png" + }, links: [ { - title: 'Community', + title: '社区', items: [ { - label: 'GitHub', - href: 'https://github.com/boxyhq', + label: '网站首页', + to: 'https://www.gitlink.org.cn', }, { - label: 'Discord', - href: 'https://discord.boxyhq.com', + label: '关于我们', + to: 'https://www.gitlink.org.cn/aboutus', }, { - label: 'Twitter', - href: 'https://twitter.com/boxyhq', + label: '教学实践', + to: 'https://www.gitlink.org.cn/educoder', }, { - label: 'OSS Friends', - href: 'https://boxyhq.com/oss-friends', + label: '合作伙伴', + to: 'https://forum.trustie.net/forums/5030/detail', }, ], }, { - title: 'Social', + title: '支持与服务', items: [ { - label: 'LinkedIn', - href: 'https://www.linkedin.com/company/boxyhq', + label: 'API文档', + to: 'https://forgeplus.trustie.net/docs/api', }, { - label: 'Facebook', - href: 'https://www.facebook.com/boxyhq', + label: 'Git常用命令', + to: 'https://git-scm.com', }, { - label: 'Instagram', - href: 'https://www.instagram.com/boxyhq', + label: '引擎使用手册', + to: 'https://forum.gitlink.org.cn/forums/7487/detail', + }, + { + label: '服务协议', + to: 'https://forum.trustie.net/forums/5029/detail', }, ], }, { - title: 'Legal', + title: '加入我们', items: [ { - label: 'Privacy & Cookies Policy', - href: '/privacy.html', + label: '官网邮箱:gitlink@ccf.org.cn', + to:"https://www.gitlink.org.cn" }, { - label: 'Terms', - href: '/terms.html', - target: '_blank', - }, - ], - }, - { - title: 'Company', - items: [ - { - label: 'Careers', - href: '/careers', + label:'QQ群', + to:'https://www.gitlink.org.cn' }, { - label: 'Team', - href: '/team', - }, + label:'公众号', + to:'https://www.gitlink.org.cn' + } ], }, ], - copyright, + copyright: `

©Copyright ${new Date().getFullYear()} CCF 开源发展委员会

Powered by Trustie& IntelliDE 京ICP备13000930号

`, }, }, presets: [ @@ -199,21 +131,9 @@ module.exports = { '@docusaurus/preset-classic', { docs: { - sidebarPath: require.resolve('./sidebars.js'), - }, - blog: { - blogTitle: 'Blog', - blogDescription: - 'The BoxyHQ blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.', - showReadingTime: true, - feedOptions: { - type: 'all', - copyright, - }, - - blogSidebarTitle: 'Recent posts', - blogSidebarCount: 5, - postsPerPage: 'ALL', + // sidebarPath: require.resolve('./sidebars.js'), + editUrl:'https://www.gitlink.org.cn/Gitlink/gitlink_help_center/tree/master/', + routeBasePath: "/", }, theme: { customCss: require.resolve('./src/css/custom.css'), @@ -222,70 +142,10 @@ module.exports = { ], ], plugins: [ - [ - require.resolve('docusaurus-gtm-plugin'), - { - id: 'GTM-N9999D3', // GTM Container ID - }, - ], - [ - '@docusaurus/plugin-content-blog', - { - /** - * Required for any multi-instance plugin - */ - id: 'careers', - /** - * URL route for the blog section of your site. - * *DO NOT* include a trailing slash. - */ - routeBasePath: 'careers', - /** - * Path to data on filesystem relative to site dir. - */ - path: './careers', - blogTitle: 'Careers', - blogDescription: - 'Join us on our mission to help startups simplify the development of compliance and data security-related features in their products. Check out our open roles.', - }, - ], - [ - '@docusaurus/plugin-content-docs', - { - id: 'guides', - path: 'guides', - routeBasePath: 'guides', - sidebarPath: require.resolve('./sidebars_guides.js'), - }, - ], ['@cmfcmf/docusaurus-search-local', {}], - require.resolve('docusaurus-plugin-image-zoom'), - [ - '@docusaurus/plugin-client-redirects', - { - redirects: [ - { - from: '/docs/jackson/admin-ui', - to: '/docs/admin-portal/enterprise-sso', - }, - { - from: '/docs/directory-sync/admin-ui', - to: '/docs/admin-portal/directory-sync', - }, - { - from: '/docs/jackson/saml-flow', - to: '/docs/jackson/sso-flow', - }, - { - from: '/docs/jackson/configure-saml-idp', - to: '/docs/jackson/sso-providers', - }, - { - from: '/docs/jackson/deploy/pre-loaded-configuration', - to: '/docs/jackson/deploy/pre-loaded-connections', - }, - ], - }, - ], ], + i18n: { + defaultLocale: 'zh-cn', + locales: ['zh-cn'], + }, }; diff --git a/guides/directory-sync/frameworks/express.md b/guides/directory-sync/frameworks/express.md deleted file mode 100644 index de0efc6..0000000 --- a/guides/directory-sync/frameworks/express.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: Implement Directory Sync (SCIM) to your Express.js App using Jackson -sidebar_label: Express.js ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Express.js - -This guide will teach you to implement SCIM Provisioning in your Express.js app. - -## Quickstart - -Directory sync helps organizations automate the provisioning and de-provisioning of their users in the Enterprise SaaS app. As a result, it streamlines the user lifecycle management process by saving valuable organizational hours, creating a single truth source of the user identity data. - -### Install SAML Jackson - -Let’s start by installing SAML Jackson to your Express.js app. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -### Initialize SAML Jackson - -Please note that the initialization of `@boxyhq/saml-jackson` is async, you cannot run it at the top level. Run this in a function where you initialize the express server. - -```javascript -let directorySyncController; - -const opts = { - externalUrl: `http://localhost:3000/`, - samlPath: '/', - scimPath: '/api/scim', - db: { - engine: 'sql', - type: 'postgres', - url: 'postgres://username:password@localhost:5432/your-database-name', - }, -}; - -async function init() { - const ret = await require('@boxyhq/saml-jackson').controllers(opts); - - directorySyncController = ret.directorySyncController; -} -``` - -### Create the Directory - -The first step towards the integration is creating a directory for a tenant. - -Directory Sync providers (Identity Providers) require you to provide a **SCIM Base URL** and **SCIM Auth token**. Both are unique for each directory your app users create. - -```javascript -const { data, error } = await directorySyncController.directories.create({ - name: 'any-name', - type: 'okta-scim-v2', - tenant: "tenant-identifier" - product: "product-identifier" -}); -``` - -The response will looks like as below: - -```javascript -{ - "data": { - "id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "name": "any-name", - "tenant": "tenant-identifier", - "product": "product-identifier", - "type": "okta-scim-v2", - "log_webhook_events": false, - "scim": { - "path": "/api/scim/58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "secret": "IJzAoevjD_liiiy-VkDtXg", - "endpoint": "http://localhost:5225/api/scim/58b5cd9dfaa39d47eb8f5f88631f9a629a232016" - }, - "webhook": { - "endpoint": "", - "secret": "" - } - }, - "error": null -} -``` - -Note the keys `scim.endpoint` and `scim.secret` from the above JSON. Your users need these values while configuring SCIM app on their Identity Provider. - -Typically you'll have to provide some UI where the users can create the directory for their providers and display `SCIM Base URL` and `SCIM Auth Token` for the directory the user created. Usually, this UI comes under organization settings or team settings. - -For example, see the demo below. - -![create-directory](/videos/create-directory.gif) - -You can retrieve the supported list of Directory Sync providers by calling the method `directorySyncController.providers()`. - -### Understand SCIM API Requests - -A key piece to implementing SCIM is building a RESTful API that IdP's SCIM provisioning can call to provision users and groups to your app. The requests will come to the `SCIM Base URL (scim.endpoint)`. - -Here are the calls your API should be able to receive from IdP SCIM provisioning for a given `SCIM Base URL (scim.endpoint)`. - -#### Users Provisioning - -| Route | Methods | -| ---------- | ---------- | -| /Users | POST | -| /Users/:id | GET | -| /Users/:id | PUT, PATCH | -| /Users/:id | DELETE | - -#### Push Groups and Group Memberships - -| Route | Methods | -| ----------- | ---------- | -| /Groups | POST | -| /Groups/:id | GET | -| /Groups/:id | PUT, PATCH | -| /Groups/:id | DELETE | - -### Handle SCIM API Requests - -Now let's add the route to handle the incoming requests from the Directory Sync providers. - -```javascript -router.all( - '/api/scim/:directoryId/:resourceType/:resourceId?', - async (req, res, next) => { - const { params, method, body, headers, query } = req; - const { directoryId, resourceType, resourceId } = params; - - const authToken = headers.authorization.split(' ')[1]; - - // Construct the event - const request = { - method: method, - body: body ? JSON.parse(body) : undefined, - directoryId: directoryId, - resourceId: resourceId, - resourceType: resourceType.toLowerCase(), - apiSecret: authToken, - query: { - count: query.count ? parseInt(query.count) : undefined, - startIndex: query.startIndex ? parseInt(query.startIndex) : undefined, - filter: query.filter, - }, - }; - - // Handle the requests - // highlight-start - const { status, data } = await directorySyncController.requests.handle( - request, - async (event) => { - console.log(event); // Do something with the event - } - ); - // highlight-end - - // Send the response back - return res.status(status).json(data); - } -); -``` - -`router.all('/api/scim/:directoryId/:resourceType/:resourceId?', async (req, res, next) => {...})` is a catch all paths route. Matched parameters will be sent as a parameter to the route. - -Look at the highlighted lines, and you can pass an async callback method to the `directorySyncController.requests.handle` as a second argument. This method will be called with SCIM event as the first argument. - -Checkout the documentation for [SCIM events and Types](/docs/directory-sync/events) to understand more about the events. - -Use these events to trigger actions in your application, such as creating a new user in your application, or updating a user in your application based on the changes made in the directory. - -### Configure the Identity Provider - -Your users should typically do this step at their end. We've [detailed documentation](/docs/directory-sync/providers/) for each Directory Sync provider. diff --git a/guides/directory-sync/frameworks/nextjs.md b/guides/directory-sync/frameworks/nextjs.md deleted file mode 100644 index 502c601..0000000 --- a/guides/directory-sync/frameworks/nextjs.md +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: Implement Directory Sync (SCIM) to your Next.js App using Jackson -sidebar_label: Next.js ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Next.js - -This guide will teach you to implement SCIM Provisioning in your Next.js app. - -## Quickstart - -Directory sync helps organizations automate the provisioning and de-provisioning of their users in the Enterprise SaaS app. As a result, it streamlines the user lifecycle management process by saving valuable organizational hours, creating a single truth source of the user identity data. - -### Install SAML Jackson - -Let’s start by installing SAML Jackson to your Next.js app. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -### Initialize SAML Jackson - -Create a new file, `jackson.ts` that holds the Jackson initialization. - -```javascript title="lib/jackson.ts" -import type { JacksonOption, IDirectorySyncController } from '@boxyhq/saml-jackson'; -import jackson from '@boxyhq/saml-jackson'; - -let directorySyncController: IDirectorySyncController; - -const g = global as any; - -const opts = { - externalUrl: `http://localhost:3000/`, - samlPath: '/', - scimPath: '/api/scim', - db: { - engine: 'sql', - type: 'postgres', - url: "postgres://username:password@localhost:5432/your-database-name", - }, -} as JacksonOption; - -export default async function init() { - if (!g.directorySyncController) { - const ret = await jackson(opts); - - directorySyncController = ret.directorySyncController; - g.directorySyncController = directorySyncController; - } else { - directorySyncController = g.directorySyncController; - } - - return { - directorySyncController, - }; -} -``` - -### Create the Directory - -The first step towards the integration is creating a directory for a tenant. - -Directory Sync providers (Identity Providers) require you to provide a **SCIM Base URL** and **SCIM Auth token**. Both are unique for each directory your app users create. - -```javascript -const { data, error } = await directorySyncController.directories.create({ - name: 'any-name', - type: 'okta-scim-v2', - tenant: "tenant-identifier" - product: "product-identifier" -}); -``` - -The response will looks like as below: - -```javascript -{ - "data": { - "id": "58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "name": "any-name", - "tenant": "tenant-identifier", - "product": "product-identifier", - "type": "okta-scim-v2", - "log_webhook_events": false, - "scim": { - "path": "/api/scim/58b5cd9dfaa39d47eb8f5f88631f9a629a232016", - "secret": "IJzAoevjD_liiiy-VkDtXg", - "endpoint": "http://localhost:5225/api/scim/58b5cd9dfaa39d47eb8f5f88631f9a629a232016" - }, - "webhook": { - "endpoint": "", - "secret": "" - } - }, - "error": null -} -``` - -Note the keys `scim.endpoint` and `scim.secret` from the above JSON. Your users need these values while configuring SCIM app on their Identity Provider. - -Typically you'll have to provide some UI where the users can create the directory for their providers and display `SCIM Base URL` and `SCIM Auth Token` for the directory the user created. Usually, this UI comes under organization settings or team settings. - -For example, see the demo below. - -![create-directory](/videos/create-directory.gif) - -You can retrieve the supported list of Directory Sync providers by calling the method `directorySyncController.providers()`. - -### Understand SCIM API Requests - -A key piece to implementing SCIM is building a RESTful API that IdP's SCIM provisioning can call to provision users and groups to your app. The requests will come to the `SCIM Base URL (scim.endpoint)`. - -Here are the calls your API should be able to receive from IdP SCIM provisioning for a given `SCIM Base URL (scim.endpoint)`. - -#### Users Provisioning - -| Route | Methods | -| ---------- | ---------- | -| /Users | POST | -| /Users/:id | GET | -| /Users/:id | PUT, PATCH | -| /Users/:id | DELETE | - -#### Push Groups and Group Memberships - -| Route | Methods | -| ----------- | ---------- | -| /Groups | POST | -| /Groups/:id | GET | -| /Groups/:id | PUT, PATCH | -| /Groups/:id | DELETE | - -### Handle SCIM API Requests - -Now let's add the route to handle the incoming requests from the Directory Sync providers. - -```javascript title="pages/api/scim/[...directory].ts" -import type { NextApiRequest, NextApiResponse } from 'next'; -import type { DirectorySyncRequest, HTTPMethod, DirectorySyncEvent } from '@boxyhq/saml-jackson'; - -import jackson from '../../../lib/jackson'; - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { directorySyncController } = await jackson(); - - const { method, query, body } = req; - - const directory = query.directory as string[]; - const [directoryId, path, resourceId] = directory; // Extract the params - - // Construct the event - const request: DirectorySyncRequest = { - method: method as HTTPMethod, - body: body ? JSON.parse(body) : undefined, - directoryId: directoryId, - resourceId: resourceId, - resourceType: path === 'Users' ? 'users' : 'groups', - apiSecret: extractAuthToken(req), - query: { - count: req.query.count ? parseInt(req.query.count as string) : undefined, - startIndex: req.query.startIndex ? parseInt(req.query.startIndex as string) : undefined, - filter: req.query.filter as string, - }, - }; - - // Handle the requests - // highlight-start - const { status, data } = await directorySyncController.requests.handle(request, async (event: DirectorySyncEvent) => { - console.log(event); // Do something with the event - }); - // highlight-end - - // Send the response back - return res.status(status).json(data); -} - -// Fetch the auth token from the request headers -const extractAuthToken = (req: NextApiRequest): string | null => { - const authHeader = req.headers.authorization || null; - - return authHeader ? authHeader.split(' ')[1] : null; -}; -``` - -`pages/api/scim/[...directory].ts` is a catch all paths route. Matched parameters will be sent as a query parameter to the page, and it will always be an array. - -Look at the highlighted lines, and you can pass an async callback method to the `directorySyncController.requests.handle` as a second argument. This method will be called with SCIM event as the first argument. - -Checkout the documentation for [SCIM events and Types](/docs/directory-sync/events) to understand more about the events. - -Use these events to trigger actions in your application, such as creating a new user in your application, or updating a user in your application based on the changes made in the directory. - -### Configure the Identity Provider - -Your users should typically do this step at their end. We've [detailed documentation](/docs/directory-sync/providers/) for each Directory Sync provider. diff --git a/guides/directory-sync/overview.md b/guides/directory-sync/overview.md deleted file mode 100644 index 2d91d52..0000000 --- a/guides/directory-sync/overview.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Directory Sync Guide -hide_table_of_contents: true -slug: /directory-sync ---- - -# Framework Guides - -This guide describes how to add Directory Sync to different languages & frameworks. - -import GuideSection from '../../src/components/GuideSection.js'; -const frameworks = [ - { - name: 'Next.js', - href: '/guides/directory-sync/frameworks/nextjs', - }, - { - name: 'Express.js', - href: '/guides/directory-sync/frameworks/express', - } -]; - -
-
- -
-
diff --git a/guides/index.mdx b/guides/index.mdx deleted file mode 100644 index 512a42d..0000000 --- a/guides/index.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Guides -description: Check out our guides to see how you can deploy our enterprise-ready solutions into your application with ease. -hide_table_of_contents: true ---- - -import Link from '@docusaurus/Link'; - -Security Building Blocks for Developers - -Reduce Time to Market without sacrificing your security posture! BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster. Integrate Single Sign-On (SSO), Audit Logs, Privacy Vault and Role Based Access in minutes. Open source and free. - -
-
-
- -
-

Enterprise SSO

-

- An SAML SSO service designed as an OAuth 2.0 or OpenID Connect flow. - Integrate SAML and OIDC with just a few lines of code. -

-
- -
-
- -
-

Directory Sync (SCIM 2.0)

-

- Directory Sync service that helps organizations automate the - provisioning and de-provisioning of their users. -

-
- -
-
-
diff --git a/guides/jackson/configuring-saml-sso.md b/guides/jackson/configuring-saml-sso.md deleted file mode 100644 index 1fb6b19..0000000 --- a/guides/jackson/configuring-saml-sso.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: UI Best Practices for Configuring SAML Single Sign-On -description: UI Best Practices for Configuring SAML Single Sign-On -sidebar_label: Configuring SAML SSO ---- - -# Configuring SAML Single Sign-On - -For an overview of our SAML SSO, read [SSO Building blocks](/blog/sso-building-blocks). - -This guide aims to give you some ideas about configuring the SAML SSO for your tenants and the best practices you can follow while implementing the same. - -## SSO connection identifier - -A multi-tenant enterprise app must attach SSO connections to a **tenant identifier**. For example, an app can use any of the following as its tenant identifier. - -- Email domain -- Organization Id or Organization slug -- Team Id or Team slug -- Other unique identifiers - -Typically, the app asks users to enter their tenant identifier to initiate the authentication flow. Then the app tries to find the proper SSO connection based on the tenant identifier. Finally, the app redirects users to their Identity Provider if a valid SSO connection is found, or the app displays an appropriate error message if the connection is not found. - -If your app asks for the work email address, it must extract the domain part and use it as the tenant identifier. - -Let's see what other apps use to identify the SSO Connections: - -- Airtable uses the Email domain -- Vercel uses the Team slug -- Netlify uses the Team Id -- Sentry uses the Organization Id - -Read more about [UI Best Practices for login with SAML Single Sign-On](/guides/jackson/login-with-saml-sso). - -## SSO settings UI - -An app should allow each tenant to configure SAML SSO for their users. - -Depending on your application's tenant architecture, you can put the SAML SSO configuration page under the organization or team settings page. - -Since the SAML SSO is an exclusive security-facing feature for enterprises, the best place to put the configuration page is under the **Security** tab. - -Here is how Sentry does the SAML SSO configuration for their customers. - -

- -

- -To create an [SSO connection with SAML Jackson](/docs/jackson/sso-flow/#2-sso-connection-api), you must pass the tenant identifier, product name, and XML metadata. So your settings page UI must display a form to capture the XML Metadata. - -Typically, an Administrator user with a higher privilege does the SAML SSO configuration for their tenant. - -## Additional SSO settings - -You can consider a few additional settings while implementing the SAML SSO into your app. - -**Enforcing SAML** - -For additional security, SAML SSO can be enforced for a tenant so that all tenant members must authenticate via an identity provider (IdP). - -**Default role** - -Allow the tenants to choose a default role. Every member who creates a new account via SSO will be assigned the default role that has been set. diff --git a/guides/jackson/deployments/heroku.md b/guides/jackson/deployments/heroku.md deleted file mode 100644 index eef11d3..0000000 --- a/guides/jackson/deployments/heroku.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Deploy Enterprise SSO on Heroku -sidebar_label: Heroku ---- - -# Heroku - -This guide will walk you through the configuration and deployment of SAML Jackson on Heroku. We'll be using the **Deploy to Heroku** button that enables users to deploy apps to Heroku without leaving the web browser and with little or no configuration. - -If you don’t have a Heroku account, create one [here](https://signup.heroku.com/). - -## Deploy SAML Jackson - -- Fork the the SAML Jackson [GitHub repository](https://github.com/boxyhq/jackson/fork). -- Go to the forked repo and click the **Deploy to Heroku** button from the README section. -- Give your new application a **name**. -- Fill the **Config Vars** as per the [documentation](/docs/jackson/deploy/env-variables). -- After you've filled everything click the **Deploy app** button. - -### Verify deployment - -You can visit the path `/api/hello` on your app to see if the Jackson was started successfully! If the installation was successful, you'll see the following output on the screen. - -```javascript -{ - name: 'Jules Winnfield'; -} -``` - -## Next steps - -At this stage you have a functional SAML Jackson instance running on your server! - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -- [Sign into Admin Portal](/docs/admin-portal/overview#sign-into-admin-portal) -- [Add SAML Configurations](/docs/admin-portal/enterprise-sso) diff --git a/guides/jackson/deployments/mogenius.md b/guides/jackson/deployments/mogenius.md deleted file mode 100644 index 69ac8da..0000000 --- a/guides/jackson/deployments/mogenius.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Deploy Enterprise SSO on mogenius -sidebar_label: mogenius ---- - -# mogenius - -This guide will walk you through the configuration and deployment of SAML Jackson on mogenius. mogenius is the easiest way for developers to run any application in the cloud. They have a template for SAML Jackson, so that you can deploy it on their fully automated cloud infrastructure in minutes. - -If you don’t have a mogenius account, create one [here](https://studio.mogenius.com/user/registration). They have an extensive [guide](https://docs.mogenius.com/getting-started/quickstart) to get you started. - -## Deploy SAML Jackson - -- Head over to [mogenius](https://docs.mogenius.com/services/various/saml-jackson) and follow the instructions to deploy SAML Jackson as a docker container. -- You should deploy the latest version from [Docker Hub](https://hub.docker.com/r/boxyhq/jackson/tags) and please keep your image up to date for additional security. - -### Verify deployment - -You can visit the path `/api/hello` on your app to see if the Jackson was started successfully! If the installation was successful, you'll see the following output on the screen. - -```javascript -{ - name: 'Jules Winnfield'; -} -``` - -## Next steps - -At this stage you have a functional SAML Jackson instance running on your server! - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -- [Sign into Admin Portal](/docs/admin-portal/overview#sign-into-admin-portal) -- [Add SAML Configurations](/docs/admin-portal/enterprise-sso) diff --git a/guides/jackson/deployments/vercel.md b/guides/jackson/deployments/vercel.md deleted file mode 100644 index 03c5d3a..0000000 --- a/guides/jackson/deployments/vercel.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Deploy Enterprise SSO on Vercel -sidebar_label: Vercel ---- - -# Vercel - -This guide will walk you through the configuration and deployment of SAML Jackson on Vercel. We'll be using the Vercel **Deploy Button** that enables users to deploy apps to Vercel without leaving the web browser and with little or no configuration. - -If you don’t have a Vercel account, create one [here](https://vercel.com/signup). - -## Deploy SAML Jackson - -- Fork the the SAML Jackson [GitHub repository](https://github.com/boxyhq/jackson/fork). -- Go to the forked repo and click the **Deploy** button from the README section. -- Select your username under **GIT SCOPE**. -- Enter a **name** for your project, choose whether you want your repo `private` or `public`, and click **Create**. -- Fill the **Environment Variables** as per the [documentation](/docs/jackson/deploy/env-variables). -- After you've filled everything click the **Deploy** button. - -### Verify deployment - -You can visit the path `/api/hello` on your app to see if the Jackson was started successfully! If the installation was successful, you'll see the following output on the screen. - -```javascript -{ - name: 'Jules Winnfield'; -} -``` - -## Next steps - -At this stage you have a functional SAML Jackson instance running on your server! - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) -- [Sign into Admin Portal](/docs/admin-portal/overview#sign-into-admin-portal) -- [Add SAML Configurations](/docs/admin-portal/enterprise-sso) diff --git a/guides/jackson/frameworks/adonis.md b/guides/jackson/frameworks/adonis.md deleted file mode 100644 index 67e1755..0000000 --- a/guides/jackson/frameworks/adonis.md +++ /dev/null @@ -1,329 +0,0 @@ ---- -title: Add SAML SSO to AdonisJS App with BoxyHQ -description: Add SAML SSO to AdonisJS App with BoxyHQ -sidebar_label: AdonisJS ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to AdonisJS App - -This guide assumes that you have a AdonisJS app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/jackson-examples/tree/main/apps/adonisjs) to see the source code for the AdonisJS SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure SAML Single Sign-On - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focus more on the SSO authentication side. - -### Install SAML Jackson - -To get started with SAML Jackson, use the Node Package Manager to add the package to your project's dependencies. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -### Setup SAML Jackson - -Setup the SAML Jackson to work with AdonisJS app. - -```js title="lib/jackson.ts" -import { type JacksonOption } from '@boxyhq/saml-jackson'; - -export const appUrl = 'https://your-app.com'; -export const samlAudience = 'https://saml.boxyhq.com'; -export const redirectUrl = `${appUrl}/sso/callback`; - -export const options: JacksonOption = { - externalUrl: appUrl, - samlAudience, - samlPath: '/sso/acs', - db: { - engine: 'sql', - type: 'postgres', - url: 'postgres://postgres:postgres@localhost:5432/postgres', - }, -}; -``` - -`samlPath` is where the identity provider POST the SAML response after authenticating the user and `redirectUrl` is where the SAML Jackson redirects the user after authentication. - -Create a new custom Provider `JacksonProvider` that relies on the `@boxyhq/saml-jackson`. The `boot` method initializes the SAML Jackson and returns a singleton. - -```js title="providers/JacksonProvider.ts" -import type { ApplicationContract } from '@ioc:Adonis/Core/Application'; - -import { options } from '../lib/jackson'; - -export default class JacksonProvider { - constructor(protected app: ApplicationContract) {} - - public async boot() { - const jackson = await require('@boxyhq/saml-jackson').default(options); - - this.app.container.singleton('BoxyHQ/Jackson', () => { - const { connectionAPIController, oauthController } = jackson; - - return { - connectionAPIController, - oauthController, - }; - }); - } - - public register() { - // Register your own bindings - } - - public async ready() { - // App is ready - } - - public async shutdown() { - // Cleanup, since app is going down - } -} -``` - -Create a declaration file if you are working with TypeScript. - -```js title="contracts/jackson.ts" -declare module '@ioc:BoxyHQ/Jackson' { - import { type IOAuthController, type IConnectionAPIController } from '@boxyhq/saml-jackson'; - - export const connectionAPIController: IConnectionAPIController; - export const oauthController: IOAuthController; -} -``` - -### Make Authentication Request - -Let's add a route to begin the authenticate flow; this route initiates the SAML SSO flow by redirecting the users to their configured Identity Provider. - -```js title="start/routes.ts" -import LoginController from 'App/Controllers/Http/LoginController'; - -Route.post('/login', async (ctx) => { - return new LoginController().store(ctx); -}); -``` - -The `store` method of `LoginController` takes care of redirecting the user to the Identity Provider. - - - - -```js title="app/Controllers/Http/LoginController.ts" -import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; - -import { oauthController } from '@ioc:BoxyHQ/Jackson'; -import { type OAuthReq } from '@boxyhq/saml-jackson'; -import { redirectUrl } from '../../../lib/jackson'; - -export default class LoginController { - public async store({ request, response }: HttpContextContract) { - const tenant = 'boxyhq.com'; // The user's tenant - const product = 'saml-demo.boxyhq.com'; // Your app or product name - const state = 'a-random-state-value'; // You can use the `state` parameter to restore application state between redirects. - - const { redirect_url } = await oauthController.authorize({ - tenant, - product, - state, - redirect_uri: redirectUrl, - } as OAuthReq); - - return response.redirect(redirect_url as string); - } -} -``` - - - - - -```js title="app/Controllers/Http/LoginController.ts" -import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; - -import { oauthController } from '@ioc:BoxyHQ/Jackson'; -import { type OAuthReq } from '@boxyhq/saml-jackson'; -import { redirectUrl } from '../../../lib/jackson'; - -export default class LoginController { - public async store({ request, response }: HttpContextContract) { - const clientId = '123456789'; // The tenant's client ID - - const { redirect_url } = await oauthController.authorize({ - client_id: clientId, - state: 'a-random-state-value', // You can use the `state` parameter to restore application state between redirects. - redirect_uri: redirectUrl, - } as OAuthReq); - - return response.redirect(redirect_url as string); - } -} -``` - - - - -### Receives SAML Response - -After successful authentication, Identity Provider POST the SAML response to the Assertion Consumer Service (ACS) URL. - -Let's add a route to handle the SAML response. Ensure the route matches the value of the `samlPath` you configured while initializing the SAML Jackson library and should be able to receives POST request. - -```js title="start/routes.ts" -import SSOController from 'App/Controllers/Http/SSOController'; - -Route.post('/sso/acs', async (ctx) => { - return new SSOController().acs(ctx); -}); -``` - -The `acs` method of `SSOController` takes care of handling the SAML response from the Identity Provider and redirecting the users to the `redirectUrl`. - -```js title="app/Controllers/Http/SSOController.ts" -import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; - -import { oauthController } from '@ioc:BoxyHQ/Jackson'; - -export default class SSOController { - public async acs({ request, response }: HttpContextContract) { - const relayState = request.input('RelayState'); - const samlResponse = request.input('SAMLResponse'); - - const { redirect_url } = await oauthController.samlResponse({ - RelayState: relayState, - SAMLResponse: samlResponse, - }); - - return response.redirect(redirect_url as string); - } -} -``` - -### Request Access Token - -Let's add another route for receiving the callback after the authentication. Ensure the route matches the value of the `redirectUrl` you configured previously. - -```js title="apps/adonisjs/start/routes.ts" -import SSOController from 'App/Controllers/Http/SSOController'; - -Route.get('/sso/callback', async (ctx) => { - return new SSOController().callback(ctx); -}); -``` - -The application requests an `access_token` by passing the authorization `code` along with authentication details, including the `client_id`, `client_secret`, and `redirect_uri`. - -The `callback` method of `SSOController` take care of this. - - - - -```js title="app/Controllers/Http/SSOController.ts" -import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; - -import { oauthController } from '@ioc:BoxyHQ/Jackson'; -import { type OAuthTokenReqWithCredentials } from '@boxyhq/saml-jackson'; -import { redirectUrl } from '../../../lib/jackson'; - -export default class SSOController { - public async callback({ request, response, auth }: HttpContextContract) { - const { code, state } = request.qs(); - - const tenant = 'boxyhq.com'; // The user's tenant - const product = 'saml-demo.boxyhq.com'; // Your app or product name - - const clientId = `tenant=${tenant}&product=${product}`; - const clientSecret = 'dummy'; - - // Exchange the `code` for `access_token` - const { access_token } = await oauthController.token({ - code, - client_id: clientId, - client_secret: clientSecret, - redirect_uri: redirectUrl, - } as OAuthTokenReqWithCredentials); - } -} -``` - - - - - -```js title="app/Controllers/Http/SSOController.ts" -import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; - -import { oauthController } from '@ioc:BoxyHQ/Jackson'; -import { type OAuthTokenReqWithCredentials } from '@boxyhq/saml-jackson'; -import { redirectUrl } from '../../../lib/jackson'; - -export default class SSOController { - public async callback({ request, response, auth }: HttpContextContract) { - const { code, state } = request.qs(); - - const clientId = '123456789'; // The tenant's client ID - const clientSecret = 'dUdSOmGoxr'; // The tenant's client Secret - - // Exchange the `code` for `access_token` - const { access_token } = await oauthController.token({ - code, - client_id: clientId, - client_secret: clientSecret, - redirect_uri: redirectUrl, - } as OAuthTokenReqWithCredentials); - } -} -``` - - - - -### Fetch User Profile - -Once the `access_token` has been fetched, you can use it to retrieve the user profile from the Identity Provider. The `userInfo` method returns a response containing the user profile if the authorization is valid. - -```js -const user = await oauthController.userInfo(access_token); -``` - -The entire response will look something like this: - -```json -{ - "id":"", - "email": "jackson@coolstartup.com", - "firstName": "SAML", - "lastName": "Jackson", - "requested": { - "tenant": "", - "product": "", - "client_id": "", - "state": "" - }, - "raw": { - ... - } -} -``` - -### Authenticate User - -Once the user has been retrieved from the Identity Provider, you may determine if the user exists in your application and authenticate the user. If the user does not exist in your application, you will typically create a new record in your database to represent the user. diff --git a/guides/jackson/frameworks/django.md b/guides/jackson/frameworks/django.md deleted file mode 100644 index 95ba23d..0000000 --- a/guides/jackson/frameworks/django.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Add SAML SSO to Django App with BoxyHQ -description: Add SAML SSO to Django App with BoxyHQ -sidebar_label: Django ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to Django App - -This guide assumes that you have a Django app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/jackson-examples/tree/main/apps/adonisjs) to see the source code for the Django SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure SAML Single Sign-On - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focuses more on the SSO authentication side. - -[WIP - Coming Soon] diff --git a/guides/jackson/frameworks/express.md b/guides/jackson/frameworks/express.md deleted file mode 100644 index a4a9ee8..0000000 --- a/guides/jackson/frameworks/express.md +++ /dev/null @@ -1,239 +0,0 @@ ---- -title: Add SAML SSO to Express.js App with BoxyHQ -description: Add SAML SSO to Express.js App with BoxyHQ -sidebar_label: Express.js -image: https://1755-103-146-175-95.in.ngrok.io/img/sso/og-image.png ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to Express.js App - -This guide assumes that you have a Express.js app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/jackson-examples/tree/main/apps/express) to see the source code for the Express.js SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure SAML Single Sign-On - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focuses more on the SSO authentication side. - -### Install SAML Jackson - -To get started with SAML Jackson, use the Node Package Manager to add the package to your project's dependencies. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -### Setup SAML Jackson - -Setup the SAML Jackson to work with Express.js app. - -```js title="jackson.js" -const baseUrl = 'https://your-app.com'; -const samlAudience = 'https://saml.boxyhq.com'; -const product = 'saml-demo.boxyhq.com'; -const samlPath = '/sso/acs'; -const redirectUrl = `${baseUrl}/sso/callback`; - -// SAML Jackson options -const options = { - externalUrl: baseUrl, - samlAudience, - samlPath, - db: { - engine: 'sql', - type: 'postgres', - url: 'postgres://postgres:postgres@localhost:5432/postgres', - }, -}; - -module.exports = { - baseUrl, - product, - samlPath, - redirectUrl, - samlAudience, - options, -}; -``` - -`samlPath` is where the identity provider POST the SAML response after authenticating the user and `redirectUrl` is where the SAML Jackson redirects the user after authentication. - -Initialize the SAML Jackson as below. - -Please note that the initialization of `@boxyhq/saml-jackson` is async. Therefore, you cannot run it at the top level. Instead, run this in a function where you initialize the express server. - -```js title="routes/index.js" -const { options, product, redirectUrl } = require('../jackson'); - -let apiController; -let oauthController; - -(async function init() { - const jackson = await require('@boxyhq/saml-jackson').controllers(options); - - apiController = jackson.connectionAPIController; - oauthController = jackson.oauthController; -})(); -``` - -### Make Authentication Request - -Let's add a route to begin the authenticate flow; this route initiates the SAML SSO flow by redirecting the users to their configured Identity Provider. - - - - -```js title="/routes/index.js" -router.post('/sso', async (req, res, next) => { - const tenant = 'boxyhq.com'; // The user's tenant - - const { redirect_url } = await oauthController.authorize({ - tenant, - product, - state: 'a-random-state-value', - redirect_uri: redirectUrl, - }); - - res.redirect(redirect_url); -}); -``` - - - - - -```js title="/routes/index.js" -router.post('/sso', async (req, res, next) => { - const clientId = '123456789'; // The tenant's client ID - - const { redirect_url } = await oauthController.authorize({ - client_id: clientId, - state: 'a-random-state-value', // You can use the `state` parameter to restore application state between redirects. - redirect_uri: redirectUrl, - }); - - res.redirect(redirect_url); -}); -``` - - - - -### Receives SAML Response - -After successful authentication, Identity Provider POST the SAML response to the Assertion Consumer Service (ACS) URL. - -Let's add a route to handle the SAML response. Ensure the route matches the value of the `samlPath` you configured while initializing the SAML Jackson library and should be able to receives POST request. - -```js title="/routes/index.js" -router.post('/sso/acs', async (req, res, next) => { - const { RelayState, SAMLResponse } = req.body; - - const { redirect_url } = await oauthController.samlResponse({ - RelayState, - SAMLResponse, - }); - - res.redirect(redirect_url); -}); -``` - -### Request Access Token - -Let's add another route for receiving the callback after the authentication. Ensure the route matches the value of the `redirectUrl` you configured previously. - -The application requests an `access_token` by passing the authorization `code` along with authentication details, including the `client_id`, `client_secret`, and `redirect_uri`. - - - - -```js title="/routes/index.js" -router.get('/sso/callback', async (req, res, next) => { - const { code, state } = req.query; - - const tenant = 'boxyhq.com'; // The user's tenant - const product = 'saml-demo.boxyhq.com'; // Your app or product name - - const clientId = `tenant=${tenant}&product=${product}`; - const clientSecret = 'dummy'; - - // Exchange the `code` for `access_token` - const { access_token } = await oauthController.token({ - code, - client_id: clientId, - client_secret: clientSecret, - redirect_uri: redirectUrl, - }); -}); -``` - - - - - -```js title="/routes/index.js" -router.get('/sso/callback', async (req, res, next) => { - const { code, state } = req.query; - - const clientId = '123456789'; // The tenant's client ID - const clientSecret = 'dUdSOmGoxr'; // The tenant's client Secret - - // Exchange the `code` for `access_token` - const { access_token } = await oauthController.token({ - code, - client_id: clientId, - client_secret: clientSecret, - redirect_uri: redirectUrl, - }); -}); -``` - - - - -### Fetch User Profile - -Once the `access_token` has been fetched, you can use it to retrieve the user profile from the Identity Provider. The `userInfo` method returns a response containing the user profile if the authorization is valid. - -```js -const user = await oauthController.userInfo(access_token); -``` - -The entire response will look something like this: - -```json -{ - "id":"", - "email": "jackson@coolstartup.com", - "firstName": "SAML", - "lastName": "Jackson", - "requested": { - "tenant": "", - "product": "", - "client_id": "", - "state": "" - }, - "raw": { - ... - } -} -``` - -### Authenticate User - -Once the user has been retrieved from the Identity Provider, you may determine if the user exists in your application and authenticate the user. If the user does not exist in your application, you will typically create a new record in your database to represent the user. diff --git a/guides/jackson/frameworks/laravel.md b/guides/jackson/frameworks/laravel.md deleted file mode 100644 index 71626c6..0000000 --- a/guides/jackson/frameworks/laravel.md +++ /dev/null @@ -1,238 +0,0 @@ ---- -title: Add SAML SSO to Laravel App with BoxyHQ -description: Add SAML SSO to Laravel App with BoxyHQ -sidebar_label: Laravel ---- - -# Add SAML SSO to Laravel App - -This guide assumes that you have a Laravel app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/php-examples/tree/main/laravel-enterprise-sso) to see the source code for the Laravel SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure SAML Single Sign-On - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focus more on the SSO authentication side. - -### Install SAML Jackson - -The first step is to deploy the SAML Jackson service. Follow the [deployment docs](/docs/jackson/deploy/service) to install and configure the SAML Jackson. - -### Setup SAML Jackson - -We'll use the Laravel Socialite for the integration. Socialite provides an expressive, fluent interface to OAuth authentication with external authentication providers. - -Create a new config file to hold the SAML Jackson configuration values. - -```php title="config/jackson.php" - 'http://localhost:5225', // SAML Jackson service URL - 'product' => 'your-app-name', - 'client_id' => 'dummy', // Keep this as `dummy`, we'll pass the tenant & product as dynamic params - 'client_secret' => 'dummy', // Keep this as `dummy`, we'll pass the tenant & product as dynamic params - 'redirect' => env('APP_URL') . '/sso/callback' -]; -``` - -Set `host` to URL of running SAML Jackson service. - -Let's add a custom provider to the Laravel Socialite for the SAML Jackson. - -```php title="app/BoxyHQ/JacksonProvider.php" -host = rtrim($host, '/'); - } - - return $this; - } - - protected function getAuthUrl($state) - { - return $this->buildAuthUrlFromBase($this->host . '/api/oauth/authorize', $state); - } - - protected function getTokenUrl() - { - return $this->host . '/api/oauth/token'; - } - - protected function getUserByToken($token) - { - $response = $this->getHttpClient()->get($this->host . '/api/oauth/userinfo', [ - RequestOptions::QUERY => ['access_token' => $token], - ]); - - return json_decode($response->getBody(), true); - } - - protected function mapUserToObject(array $user) - { - return (new User)->setRaw($user)->map([ - 'id' => $user['id'], - 'email' => $user['email'], - 'name' => $user['firstName'].' '.$user['lastName'], - 'first_name' => $user['firstName'], - 'last_name' => $user['lastName'], - 'requested' => $user['requested'], - 'nickname' => null, - 'avatar' => null, - ]); - } -} -``` - -Bootstrap the `JacksonProvider` in the `AppServiceProvider`. - -```php title="app/Providers/AppServiceProvider.php" -app->make('Laravel\Socialite\Contracts\Factory'); - - $socialite->extend( - 'jackson', - function ($app) use ($socialite) { - $config = config('jackson'); - - return $socialite->buildProvider(JacksonProvider::class, $config) - ->setHost($config['host'] ?? null); - } - ); - } -} -``` - -### Make Authentication Request - -Let's add a route to begin the authenticate flow; this route initiates the SAML SSO flow by redirecting the users to their configured Identity Provider. - -```php title="routes/web.php" -input('tenant'); - - return Socialite::driver('jackson') - ->with(['tenant' => $tenant, 'product' => $jackson['product']]) - ->redirect(); - } -} -``` - -### Fetch User Profile - -Let's add another route for receiving the callback after the authentication. Ensure the route matches the value of the `redirect` you configured previously. - -```php title="routes/web.php" -user(); - - // $user has all the properties you need. Do your business logic here. - } -} -``` - -### Authenticate User - -Once the user has been retrieved from the Identity Provider, you may determine if the user exists in your application and authenticate the user. If the user does not exist in your application, you will typically create a new record in your database to represent the user. diff --git a/guides/jackson/frameworks/nextjs.md b/guides/jackson/frameworks/nextjs.md deleted file mode 100644 index 5129768..0000000 --- a/guides/jackson/frameworks/nextjs.md +++ /dev/null @@ -1,305 +0,0 @@ ---- -title: Add SAML SSO to Next.js App with BoxyHQ -description: Add SAML SSO to Next.js App with BoxyHQ -sidebar_label: Next.js ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to Next.js App - -This guide assumes that you have a Next.js app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/saas-starter-kit) to see the source code for the Next.js SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure SAML Single Sign-On - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focus more on the SSO authentication side. - -### Install SAML Jackson - -To get started with SAML Jackson, use the Node Package Manager to add the package to your project's dependencies. - -```bash -npm i --save @boxyhq/saml-jackson -``` - -### Setup SAML Jackson - -Setup the SAML Jackson to work with Next.js app. - -```bash title=".env" -NEXTAUTH_URL=https://your-app.com -NEXTAUTH_SECRET= #A random string is used to hash tokens, sign/encrypt cookies and generate cryptographic keys. -``` - -```js title="lib/jackson.ts" -import jackson, { - type IOAuthController, - type JacksonOption, -} from "@boxyhq/saml-jackson"; - -const samlAudience = "https://saml.boxyhq.com"; -const samlPath = "/api/auth/saml/acs"; - -const opts: JacksonOption = { - externalUrl: `${process.env.NEXTAUTH_URL}`, - samlAudience, - samlPath, - db: { - engine: "sql", - type: "postgres", - url: "postgres://postgres:postgres@localhost:5432/postgres", - }, -}; - -let oauthController: IOAuthController; - -const g = global as any; - -export default async function init() { - if (!g.oauthController) { - const ret = await jackson(opts); - - oauthController = ret.oauthController; - g.oauthController = oauthController; - } else { - oauthController = g.oauthController; - } - - return { - oauthController, - }; -} -``` - -`samlPath` is where the identity provider POST the SAML response after authenticating the user. - -We'll use [NextAuth.js](https://next-auth.js.org/) for the authentication. NextAuth is a complete open-source authentication solution for Next.js applications. - -```bash -npm install next-auth -``` - -Let's add a custom provider called `saml-jackson` to the NextAuth. - -```js title="pages/api/auth/[...nextauth].ts" -import NextAuth, { type NextAuthOptions } from 'next-auth'; - -export const authOptions: NextAuthOptions = { - providers: [ - { - id: 'saml-jackson', - name: 'BoxyHQ', - type: 'oauth', - checks: ['pkce', 'state'], - authorization: { - url: `${process.env.NEXTAUTH_URL}/api/auth/saml/authorize`, - params: { - scope: '', - response_type: 'code', - provider: 'saml', - }, - }, - token: { - url: `${process.env.NEXTAUTH_URL}/api/auth/saml/token`, - params: { grant_type: 'authorization_code' }, - }, - userinfo: `${process.env.NEXTAUTH_URL}/api/auth/saml/userinfo`, - profile: (profile) => { - return { - id: profile.id || '', - firstName: profile.firstName || '', - lastName: profile.lastName || '', - email: profile.email || '', - name: `${profile.firstName || ''} ${profile.lastName || ''}`.trim(), - email_verified: true, - }; - }, - options: { - clientId: 'dummy', - clientSecret: 'dummy', - }, - }, - ], - session: { - strategy: 'jwt', - }, -}; - -export default NextAuth(authOptions); -``` - -### Make Authentication Request - -Let's add a route to begin the authenticate flow; this route initiates the SAML SSO flow by redirecting the users to their configured Identity Provider. - -```js title="pages/api/auth/saml/authorize.ts" -import type { NextApiRequest, NextApiResponse } from "next"; -import type { OAuthReq } from "@boxyhq/saml-jackson"; - -import jackson from "../../../../lib/jackson"; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { oauthController } = await jackson(); - - const { redirect_url } = await oauthController.authorize( - req.query as unknown as OAuthReq - ); - - return res.redirect(302, redirect_url as string); -} -``` - -### Receives SAML Response - -After successful authentication, Identity Provider POST the SAML response to the Assertion Consumer Service (ACS) URL. - -Let's add a route to handle the SAML response. Ensure the route matches the value of the `samlPath` you configured while initializing the SAML Jackson library and should be able to receives POST request. - -```js title="pages/api/auth/saml/acs.ts" -import type { NextApiRequest, NextApiResponse } from "next"; - -import jackson from "../../../../lib/jackson"; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { oauthController } = await jackson(); - - const { RelayState, SAMLResponse } = req.body; - - const { redirect_url } = await oauthController.samlResponse({ - RelayState, - SAMLResponse, - }); - - return res.redirect(302, redirect_url as string); -} -``` - -### Request Access Token - -Let's add another route for receiving the callback after the authentication. - -The NextAuth requests an `access_token` by passing the authorization `code` along with authentication details, including the `grant_type`, `redirect_uri`, and `code_verifier`. - -```js title="pages/api/auth/saml/token.ts" -import type { NextApiRequest, NextApiResponse } from 'next'; - -import jackson from '../../../../lib/jackson'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { oauthController } = await jackson(); - - const response = await oauthController.token(req.body); - - return res.json(response); -} -``` - -### Fetch User Profile - -Once the `access_token` has been fetched, NextAuth can use it to retrieve the user profile from the Identity Provider. The `userInfo` method returns a response containing the user profile if the authorization is valid. - -```js title="pages/api/auth/saml/userinfo.ts" -import type { NextApiRequest, NextApiResponse } from 'next'; - -import jackson from '../../../../lib/jackson'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { oauthController } = await jackson(); - - const authHeader = req.headers['authorization']; - - if (!authHeader) { - throw new Error('Unauthorized'); - } - - const token = authHeader.split(' ')[1]; - - const user = await oauthController.userInfo(token); - - return res.json(user); -} -``` - -The entire response will look something like this: - -```json -{ - "id":"", - "email": "jackson@coolstartup.com", - "firstName": "SAML", - "lastName": "Jackson", - "requested": { - "tenant": "", - "product": "", - "client_id": "", - "state": "" - }, - "raw": { - ... - } -} -``` - -### Authenticate User - -Once the user has been retrieved from the Identity Provider, you may determine if the user exists in your application and authenticate the user. If the user does not exist in your application, you will typically create a new record in your database to represent the user. - -### Starts OAuth sign-in flow - -You can use NextAuth's `signIn` method to initiate the authentication with `saml-jackson` provider. - -You can pass the `tenant` and `product` as additional parameters to the `/api/auth/saml/authorize` endpoint through the third argument of `signIn()`. - -```js title="pages/login.tsx" -import type { NextPage } from 'next'; -import { useSession, signIn } from 'next-auth/react'; - -const Login: NextPage = () => { - const { data: session, status } = useSession(); - - if (status === 'loading') { - return <>Loading...; - } - - if (status === 'authenticated') { - return <>Authenticated; - } - - // Starts OAuth sign-in flow - signIn('saml-jackson', undefined, { - tenant: 'boxyhq.com', - product: 'saml-demo.boxyhq.com', - }); - - return <>Unauthenticated; -}; - -export default Login; -``` diff --git a/guides/jackson/frameworks/rails.md b/guides/jackson/frameworks/rails.md deleted file mode 100644 index e7c6412..0000000 --- a/guides/jackson/frameworks/rails.md +++ /dev/null @@ -1,542 +0,0 @@ ---- -title: Add SAML SSO to Ruby on Rails App with BoxyHQ -description: Add SAML SSO to Ruby on Rails App with BoxyHQ -sidebar_label: Ruby on Rails -toc_min_heading_level: 2 -toc_max_heading_level: 5 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to Ruby on Rails App - -This guide assumes that you have a Ruby on Rails app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -Visit the [GitHub repository](https://github.com/boxyhq/ruby-examples/tree/main/rails-enterprise-sso) to see the source code for the Ruby on Rails SAML SSO integration. - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure Enterprise SSO on Rails - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focus more on the SSO authentication side. - -### Deploy SAML Jackson - -The first step is to deploy the SAML Jackson service. Follow the [deployment docs](/docs/jackson/deploy/service) to install and configure the SAML Jackson. - -### Setup SAML Jackson Integration - -We will dive into Jackson integration with two popular authentication libraries: - -- [Sorcery](#with-sorcery) -- [OmniAuth](#with-omniauth) - -#### With Sorcery - -First, we need to install and configure [sorcery](https://github.com/Sorcery/sorcery). - -##### Install Dependencies - -Install the `sorcery` gem using - -```shell -bundle add sorcery -``` - -##### Configure the database - -```shell title="Generate migration scripts for sorcery" - bin/rails g sorcery:install external --only-submodules -``` - -```shell title="Run migration scripts" - bin/rake db:migrate -``` - -```shell title="Generate the Authentication model" - bin/rails generate model Authentication --migration=false -``` - -```shell title="Modify the user schema" - # remove the unused columns from the user table, we won't need the password field as the login is external - bin/rails generate migration RemoveColumnsFromUsers crypted_password:string salt:string - # add the new columns - bin/rails generate migration AddColumnsToUsers firstName:string lastName:string uid:string - # run the migrations - bin/rake db:migrate -``` - -##### Add a custom provider for Jackson - -Add a custom sorcery provider for Jackson. We will name it `Boxyhqsso`. - -We rely on the `Protocols::Oauth2` mixin from the sorcery package. In a nutshell, here we are wiring up the OAuth 2.0 flow with Jackson. Jackson will redirect to the configured IdP connection based on the tenant/product. - -:::info -By including the file in the `app/lib` folder, rails will autoload the provider class. -::: - -```ruby title="app/lib/sorcery/providers/boxyhqsso.rb" - module Sorcery - module Providers - # This class adds support for OAuth2.0 SSO flow with Jackson service. - # - # config.boxyhqsso.site = - # config.boxyhqsso.key = - # config.boxyhqsso.secret = - # ... - # - class Boxyhqsso < Base - include Protocols::Oauth2 - - attr_reader :parse - attr_accessor :auth_url, :token_url, :user_info_path - - def initialize - super - - @site = ENV['JACKSON_URL'] - @auth_url = '/api/oauth/authorize' - @token_url = '/api/oauth/token' - @user_info_path = '/api/oauth/userinfo' - @parse = :json - # @state = SecureRandom.hex(16) - end - - def get_user_hash(access_token) - response = access_token.get(user_info_path) - body = JSON.parse(response.body) - auth_hash(access_token).tap do |h| - h[:user_info] = body - h[:uid] = body['id'] - end - end - - # calculates and returns the url to which the user should be redirected, - # to get authenticated at the external provider's site. - def login_url(params, _session) - add_param(authorize_url(authorize_url: auth_url), - [ - { name: 'tenant', value: params[:tenant] }, - { name: 'product', value: params[:product] } - ]) - end - - # tries to login the user from access token - def process_callback(params, _session) - args = {}.tap do |a| - a[:code] = params[:code] if params[:code] - end - get_access_token(args, token_url: token_url, token_method: :post, auth_scheme: :request_body) - end - - def add_param(url, query_params) - uri = URI(url) - qp = URI.decode_www_form(uri.query || []) - query_params.each do |param| - qp << [param[:name], param[:value]] - end - uri.query = URI.encode_www_form(qp) - uri.to_s - end - end - end - end - -``` - -##### Configure the custom sorcery provider - -Add an initializer file to configure the sorcery module. Here we tell sorcery to load the `:external` submodule and also add `boxyhqsso` custom provider from the previous step to the `external_providers` list. Also, see the inline comments for `boxyhqsso` provider settings. - -```ruby title="config/initializers/sorcery.rb" - Rails.application.config.sorcery.submodules = [:external] - - # Here you can configure each submodule's features. - Rails.application.config.sorcery.configure do |config| - - config.external_providers = [:boxyhqsso] - - # URL of Jackson service - config.boxyhqsso.site = ENV['JACKSON_URL'] - # This translates to client_id in OAuth 2.0. Setting it to dummy will allow us to use `tenant` and product` params instead - config.boxyhqsso.key = 'dummy' - # The url of the rails app to which Jackson sends back the authorization code - config.boxyhqsso.callback_url = 'http://localhost:3366/oauth/callback' - # This will be passed to Jackson token endpoint as part of credentials - config.boxyhqsso.secret = ENV['CLIENT_SECRET_VERIFIER'] - # Takes care of converting the user info from the provider (Jackson) into the attributes of the User. - config.boxyhqsso.user_info_mapping = { email: 'email', uid: 'id', firstName: 'firstName', lastName: 'lastName'} - - # --- user config --- - config.user_config do |user| - - # -- external -- - user.authentications_class = Authentication - - end - # This line must come after the 'user config' block. - # Define which model authenticates with sorcery. - config.user_class = User - - end -``` - -##### Routes and Controllers - -Finally, we need to add the routes and controller files that initiate the login flow and handle the callback from the Jackson service. - -:::info -The login flow is initiated by posting to `/sso` -::: - - - - -```ruby title="config/routes.rb" - Rails.application.routes.draw do - ... - # Renders the login page - get 'sso', to: 'logins#index', as: :login - # Initiates the OAuth 2.0 redirect to Jackson SSO service - post 'sso', to: 'sorcery#oauth' - # logout the user - delete 'logout' => 'logins#destroy', as: :logout - # handles the redirect back from Jackson SSO service, exchanges code with access_token and then fetches userprofile. Sorcery creates the user if not present in database, else return the one in the db. - resource :oauth do - get :callback, to: 'sorcery#callback', on: :collection - end - # Show profile data - get 'profile', to: 'profiles#index', as: :profile - - ... - end - -``` - - - - - - -The `oauth` action initiates the OAuth 2.0 flow to Jackson SSO service. In the `callback` action, sorcery exchanges the code for access_token and user profile. If a user exists in the database, then the value of `@current_user` is loaded from the database. Else a new user is created in the database and returned. - -```ruby title="app/controllers/sorcery_controller.rb" - class SorceryController < ApplicationController - skip_before_action :require_login, raise: false - - def oauth - login_at('boxyhqsso', state: SecureRandom.hex(16)) - end - - # rubocop:disable Metrics/AbcSize, Metrics/MethodLength - def callback - provider = 'boxyhqsso' - if @user = login_from(provider) - redirect_to profile_path, notice: "Logged in from #{provider.titleize}!" - else - begin - @user = create_from(provider) - - reset_session # protect from session fixation attack - auto_login(@user) - redirect_to profile_path, notice: "Logged in from #{provider.titleize}!" - rescue - redirect_to root_path, alert: "Failed to login from #{provider.titleize}!" - end - end - rescue ::OAuth2::Error => e - Rails.logger.error e - Rails.logger.error e.code - Rails.logger.error e.description - Rails.logger.error e.message - Rails.logger.error e.backtrace - end - - end - -``` - - - - - -```ruby title="app/controllers/logins_controller.rb" - class LoginsController < ApplicationController - skip_before_action :require_login - - def index; # render login view - end - - def destroy - logout - redirect_to(root_path, notice: 'Logged out!') - end - - end - -``` - - - - - -```ruby title="app/controllers/profiles_controller.rb" - class ProfilesController < ApplicationController - def index; end # display profile information - end - -``` - - - - - - -#### With OmniAuth - -:::info -Unlike sorcery, omniauth does not automatically associate with a User model nor persist the user in the database. -::: - -First, we need to install and configure [omniauth](https://github.com/omniauth/omniauth). - -##### Install Dependencies - -```shell - bin/bundle add omniauth - bin/bundle add omniauth-rails_csrf_protection # Used to protect against CSRF vulnerability - bin/bundle add omniauth-oauth2 # generic OAuth2 strategy for OmniAuth that we will inherit from -``` - -##### Add a custom strategy for Jackson - -Add a custom omniauth strategy for Jackson. We will name it `Boxyhqsso`. -By inheriting from `OmniAuth::Strategies::OAuth2`, we can wire up the OAuth 2.0 flow with Jackson. Jackson will redirect to the configured IdP connection based on the tenant/product. - -```ruby title="app/lib/omniauth/strategies/boxyhqsso.rb" - module OmniAuth - module Strategies - class Boxyhqsso < OmniAuth::Strategies::OAuth2 - # strategy name - option :name, "boxyhqsso" - - args %i[ - client_id - client_secret - domain - ] - - # Setup client URLs used during authentication - def client - options.client_options.site = domain_url - options.client_options.authorize_url = '/api/oauth/authorize' - options.client_options.token_url = '/api/oauth/token' - options.client_options.userinfo_url = '/api/oauth/userinfo' - options.client_options.auth_scheme = :request_body - options.token_params = { :redirect_uri => full_host + '/auth/boxyhqsso/callback' } - super - end - - # These are called after authentication has succeeded. If - # possible, you should try to set the UID without making - # additional calls (if the user id is returned with the token - # or as a URI parameter). This may not be possible with all - # providers. - uid{ raw_info['id'] } - - # Define the parameters used for the /authorize endpoint - def authorize_params - params = super - %w[connection connection_scope prompt screen_hint login_hint organization invitation ui_locales tenant product].each do |key| - params[key] = request.params[key] if request.params.key?(key) - end - - # Generate nonce - params[:nonce] = SecureRandom.hex - - # Store authorize params in the session for token verification - session['authorize_params'] = params.to_hash - - params - end - - extra do - { - 'raw_info' => raw_info - } - end - - # Declarative override for the request phase of authentication - def request_phase - if no_client_id? - # Do we have a client_id for this Application? - fail!(:missing_client_id) - elsif no_client_secret? - # Do we have a client_secret for this Application? - fail!(:missing_client_secret) - elsif no_domain? - # Do we have a domain for this Application? - fail!(:missing_domain) - else - # All checks pass, run the Oauth2 request_phase method. - super - end - end - - def raw_info - userinfo_url = options.client_options.userinfo_url - @raw_info ||= access_token.get(userinfo_url).parsed - end - - # Check if the options include a client_id - def no_client_id? - ['', nil].include?(options.client_id) - end - - # Check if the options include a client_secret - def no_client_secret? - ['', nil].include?(options.client_secret) - end - - # Check if the options include a domain - def no_domain? - ['', nil].include?(options.domain) - end - - # Normalize a domain to a URL. - def domain_url - domain_url = URI(options.domain) - domain_url = URI("https://#{domain_url}") if domain_url.scheme.nil? - domain_url.to_s - end - end - end - end - -``` - -##### Configure the custom omniauth provider - -Add an initializer file to insert omniauth into the rack middleware pipeline. `OmniAuth::Builder` allows us to load multiple strategies. - -```ruby title="config/initializers/omniauth.rb" - Rails.application.config.middleware.use OmniAuth::Builder do - provider( - :boxyhqsso, - 'dummy', - ENV['CLIENT_SECRET_VERIFIER'], - ENV['JACKSON_URL'], - callback_path: '/auth/boxyhqsso/callback', - authorize_params: { - scope: 'openid' - } - ) - - end -``` - -##### Routes and Controllers - -Finally, we need to add the routes and controller files that initiate the login flow and handle the callback from the Jackson service. We also use a controller `concern` to control access to protected routes such as the profile page. - -:::info -The login flow is initiated by posting to `/auth/boxyhqsso` which is handled by omniauth in the rack middleware pipeline. -::: - - - - - -```ruby title="config/routes.rb" - Rails.application.routes.draw do - # Renders the login page - get 'sso', to: 'logins#index', as: :login - # handles the redirect back from Jackson SSO service, exchanges code with access_token and then fetches userprofile. - get 'auth/boxyhqsso/callback', to: 'omniauth#callback' - # Show profile data - get 'omniauth/profile', to: 'omniauth_profiles#show', as: :omniauth_profile - # logout the user - delete 'omniauth/logout' => 'omniauth#logout', as: :omniauth_logout - end -``` - - - - - - - - - -After omniauth handles the callback from Jackson SSO service, it sets an authentication hash (`omniauth.auth`) on the rack environment of a request to `/auth/boxyhqsso/callback`. This contains the information about the logged-in user. We then set this value in the session which can then be displayed on the profile page. - -```ruby title="app/controllers/omniauth_controller.rb" - class OmniauthController < ApplicationController - skip_before_action :require_login, raise: false - - def callback - user_info = request.env['omniauth.auth'] - session[:userinfo] = user_info['extra']['raw_info'] - redirect_to omniauth_profile_path, notice: "Logged in using omniauth!" - end - - def logout - reset_session - redirect_to root_path, notice: "Logged out from Omniauth!" - end - end -``` - - - - - -Here we set the instance variable `@user` from the session. This can then be referenced in the profile view. Also by using the concern `OmniauthSecured`, we ensure that the profile view is rendered only if a user is logged in, else we redirect to the login page. - -```ruby title="app/controllers/omniauth_profiles_controller.rb" - class OmniauthProfilesController < ApplicationController - skip_before_action :require_login, raise: false - include OmniauthSecured - - def show - @user = session[:userinfo] - end - end -``` - - - - - - - - -```ruby title="app/controllers/concerns/omniauth_secured.rb" - module OmniauthSecured - extend ActiveSupport::Concern - - included do - before_action :logged_in_using_omniauth? - end - - def logged_in_using_omniauth? - redirect_to login_path, notice: "⚠️ Please login using omniauth" unless session[:userinfo].present? - end - end -``` - - - - diff --git a/guides/jackson/frameworks/react.md b/guides/jackson/frameworks/react.md deleted file mode 100644 index 81a067d..0000000 --- a/guides/jackson/frameworks/react.md +++ /dev/null @@ -1,468 +0,0 @@ ---- -title: Add SAML SSO to React App with BoxyHQ -description: Add SAML SSO to React App with BoxyHQ -sidebar_label: React ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to React App - -This guide assumes that you have a React app and want to enable SAML Single Sign-On authentication for your enterprise customers. By the end of this guide, you'll have an app that allows you to authenticate the users using SAML Single Sign-On. - -If you wish to dive straight into the source, Checkout: https://github.com/boxyhq/jackson-examples/tree/main/apps/react - -:::info -We use an express backend with the React Single Page App. The code for this can be found at https://github.com/boxyhq/jackson-examples/tree/main/apps/express-api -::: - -Integrating SAML SSO into an app involves the following steps. - -- Configure SAML Single Sign-On -- Authenticate with SAML Single Sign-On - -## Configure Enterprise SSO on React - -This step allows your tenants to configure SAML connections for their users. Read the following guides to understand more about this. - -- [UI Best Practices for Configuring SAML Single Sign-On](/guides/jackson/configuring-saml-sso) -- [SSO Connection API](/docs/jackson/sso-flow/) - -## Authenticate with SAML Single Sign-On - -Once you add a SAML connection, the app can use this SAML connection to initiate the SSO authentication flow using SAML Jackson. The following sections focus more on the SSO authentication side. - -### Deploy SAML Jackson - -The first step is to deploy the SAML Jackson service. Follow the [deployment docs](/docs/jackson/deploy/service) to install and configure the SAML Jackson. - -### Setup SAML Jackson Integration - -We'll use the client library `@bity/oauth2-auth-code-pkce` to implement the authentication process. It is a zero-dependency OAuth 2.0 client implementing the authorization code grant with PKCE for client-side protection. - -```bash -npm i --save @bity/oauth2-auth-code-pkce -``` - -Let's configure the `OAuth2AuthCodePKCE` client to use the SAML Jackson service for authentication. Here we use a custom hook so that the `oauthClient` can be used elsewhere in the app. - -```ts title="src/hooks/useOAuthClient.ts" -import { OAuth2AuthCodePKCE } from '@bity/oauth2-auth-code-pkce'; -import { useEffect, useState } from 'react'; - -const JACKSON_URL = process.env.REACT_APP_JACKSON_URL; - -interface OauthClientOptions { - redirectUrl: string; -} -export default function useOAuthClient({ - redirectUrl, -}: OauthClientOptions): OAuth2AuthCodePKCE | null { - const [oauthClient, setOauthClient] = useState( - null - ); - - useEffect(() => { - setOauthClient( - new OAuth2AuthCodePKCE({ - authorizationUrl: `${JACKSON_URL}/api/oauth/authorize`, - tokenUrl: `${JACKSON_URL}/api/oauth/token`, - // Setting the clientId dummy here. We pass additional query params for - // tenant and product in the authorize request. - clientId: 'dummy', - redirectUrl, - scopes: [], - onAccessTokenExpiry(refreshAccessToken) { - console.log('Expired! Access token needs to be renewed.'); - alert( - 'We will try to get a new access token via grant code or refresh token.' - ); - return refreshAccessToken(); - }, - onInvalidGrant(refreshAuthCodeOrRefreshToken) { - console.log( - 'Expired! Auth code or refresh token needs to be renewed.' - ); - alert('Redirecting to auth server to obtain a new auth grant code.'); - //return refreshAuthCodeOrRefreshToken(); - }, - }) - ); - }, [redirectUrl]); - - return oauthClient; -} -``` - -### Setup global Authentication primitives - -#### AuthContext - -We need a way to make the logged-in `user` as well as the `signIn`, `signOut` methods accessible globally. These, along with the `setTenant` (method used to select the tenant for the SSO flow) and `authStatus` (boolean which helps us to conditionally render content based on whether the authenticated status is fully known or being loaded) are made available throughout the application by using `AuthContext`. - -```tsx title="src/lib/AuthProvider.tsx" -import React, { useState, useEffect, ReactNode, createContext } from 'react'; -import { useLocation } from 'react-router-dom'; -import useOAuthClient from '../hooks/useOAuthClient'; -import { authenticate, getProfileByJWT } from './backend'; - -interface ProviderProps { - children: ReactNode; -} - -interface AuthContextInterface { - setTenant?: React.Dispatch>; - authStatus: 'UNKNOWN' | 'FETCHING' | 'LOADED'; - user: any; - signIn: () => void; - signOut: (callback: VoidFunction) => void; -} - -// localstorage key to store from url -const APP_FROM_URL = 'appFromUrl'; - -export const AuthContext = createContext(null!); -``` - -We also create a custom hook that returns a handle to the `AuthContext`. - -```ts title="src/hooks/useAuth.ts" -import { useContext } from 'react'; -import { AuthContext } from '../lib/AuthProvider'; - -const useAuth = () => { - return useContext(AuthContext); -}; - -export default useAuth; -``` - -#### AuthProvider - -We will wire up the flow inside the AuthProvider. - -1. Once the app shell is rendered, we run an effect that uses the `authClient` from `useOAuthClient` to conduct the flow. Two scenarios need to be handled here. The first one is the case where we have secured an access_token from the SSO provider (Jackson) in which case we can retrieve the logged-in user profile by passing in the cookie. The second one is the case where the browser gets redirected back to the app, after signing in at IdP. The authorization code in the redirect is exchanged for an access token which is then passed to the app backend to complete the login. - - ```tsx title="src/lib/AuthProvider.tsx" - const AuthProvider = ({ children }: ProviderProps) => { - const [user, setUser] = useState(null); - const [authStatus, setAuthStatus] = useState('UNKNOWN'); - - ... - - const redirectUrl = process.env.REACT_APP_APP_URL + from; - - const authClient = useOAuthClient({ redirectUrl }); - - useEffect(() => { - let didCancel = false; - - const loadUser = async () => { - if (!authClient) { - return; - } - setAuthStatus('FETCHING'); - if (authClient.isAuthorized()) { - const { data, error } = await getProfileByJWT(); - if (!didCancel && !error) { - setUser(data); - setAuthStatus('LOADED'); - } - } else { - try { - const hasAuthCode = await authClient?.isReturningFromAuthServer(); - if (!hasAuthCode) { - devLogger('no auth code detected...'); - } else { - const token = !didCancel - ? await authClient?.getAccessToken() - : null; - token && localStorage.removeItem(APP_FROM_URL); - // authentication happens at the backend where the above token is used - // to retrieve user profile - const profile = await authenticate(token?.token?.value); - if (!didCancel && profile) { - setUser(profile); - } - } - } catch (err) { - console.error(err); - } finally { - setAuthStatus('LOADED'); - } - } - }; - - loadUser(); - return () => { - didCancel = true; - }; - }, [authClient]); - - ... - - const value = { - authStatus, - user, - }; - - return {children}; - }; - - export { AuthContext, AuthProvider }; - ``` - -2. When someone tries to access protected/private routes they will be redirected to the login page. Before we do this we save the current location they were trying to access in the history state. This logic is encapsulated in the `RequireAuth` wrapper component. Use it to protect routes that require authentication. - - ```tsx title="src/components/RequireAuth.tsx" - const RequireAuth = ({ children }: { children: JSX.Element }) => { - let { user, authStatus } = useAuth(); - let location = useLocation(); - - if (authStatus !== 'LOADED') { - return null; - } - - if (!user) { - // Redirect them to the /login page, but save the current location they were - // trying to go to when they were redirected. This allows us to send them - // along to that page after they login, which is a nicer user experience - // than dropping them off on the home page. - return ; - } - - return children; - }; - - export default RequireAuth; - ``` - - We then use the `from` state in the `redirectUrl` to construct the `oAuthClient` inside `AuthProvider`. - - ```ts title="src/lib/AuthProvider.tsx" - let location = useLocation(); - let from = - location.state?.from?.pathname || - localStorage.getItem(APP_FROM_URL) || - '/profile'; - - const redirectUrl = process.env.REACT_APP_APP_URL + from; - - const authClient = useOAuthClient({ redirectUrl }); - ``` - -3. `signIn` and `signOut` methods can be implemented as follows: - - ```tsx title="src/lib/AuthProvider.tsx" - const signIn = async () => { - // store the 'from' url before redirecting ... we need this to correctly initialize - // the oauthClient after getting redirected back from SSO Provider. - localStorage.setItem(APP_FROM_URL, from); - // Initiate the login flow - await authClient?.fetchAuthorizationCode({ - tenant, - product: 'saml-demo.boxyhq.com', - }); - }; - - const signOut = async (callback: VoidFunction) => { - authClient?.reset(); - setUser(null); - callback(); - }; - - const value = { - signIn, - signOut, - }; - - return ( - {children} - ); - ``` - -### Make Authentication Request - -Let's add a page to begin the authenticate flow. This page initiates (by calling `signIn` from the `AuthContext`) the SAML SSO flow by redirecting the users to their configured Identity Provider (via Jackson). - -The user will be redirected to the IdP when clicking the "Continue with SAML SSO" button. - -```js title="src/pages/Login.tsx" -import React from 'react'; -import { Navigate, useLocation } from 'react-router-dom'; -import useAuth from '../hooks/useAuth'; - -const Login = () => { - let location = useLocation(); - - let from = location.state?.from?.pathname || '/profile'; - - const { signIn, setTenant, authStatus, user } = useAuth(); - - if (authStatus !== 'LOADED') { - return null; - } - - if (authStatus === 'LOADED' && user) { - return ; - } - - return ( -
-
-

Log in to App

-
-
-
- - - typeof setTenant === 'function' && setTenant(e.target.value) - } - /> - -
-
-
-
-
- ); -}; - -export default Login; -``` - -### Fetch User Profile - -Once the `accessToken` has been fetched, the React app can use it to retrieve the user profile from the Identity Provider. - -Typically you would use your backend service (Eg: Express.js) to call the SAML Jackson API to fetch the user profile using the `accessToken`. - -Here are the express.js routes that return the user profile either on login or by parsing the JWT from the client-side cookie. - -```js -app.get('/api/authenticate', async function (req, res, next) { - const accessToken = req.query.access_token; - - if (!accessToken) { - throw new Error('Access token not found.'); - } - - const response = await fetch( - `${jacksonUrl}/api/oauth/userinfo?access_token=${accessToken}`, - { - method: 'GET', - } - ); - - const profile = await response.json(); - - // Once the user has been retrieved from the Identity Provider, - // you may determine if the user exists in your application and authenticate the user. - // If the user does not exist in your application, you will typically create a new record in your database to represent the user. - - const token = jsonwebtoken.sign( - { - id: profile.id, - email: profile.email, - firstName: profile.firstName, - lastName: profile.lastName, - }, - jwtSecret - ); - - res.cookie('sso-token', token, { httpOnly: true }); - res.json(profile); -}); - -app.get('/api/profile', async function (req, res, next) { - const token = req.cookies['sso-token']; - - if (!token) { - return res - .status(401) - .json({ data: null, error: { message: 'Missing JWT' } }); - } - - // You may fetch the user profile from your database using the user id. - - const payload = jsonwebtoken.verify(token, jwtSecret); - - return res.json({ data: payload, error: null }); -}); -``` - -The profile will look something like this: - -```json -{ - "id":"", - "email": "jackson@coolstartup.com", - "firstName": "SAML", - "lastName": "Jackson", - "requested": { - "tenant": "", - "product": "", - "client_id": "", - "state": "" - }, - "raw": { - ... - } -} -``` - -In the React app, we call the `getProfileByJWT` if an access_token is already in possession or we call the `authenticate` when returning back from SSO provider with the authorization code. - -```ts title="src/lib/backend.ts" -const apiUrl = process.env.REACT_APP_API_URL; - -export const authenticate = async (token: string | undefined) => { - if (!token) { - throw new Error('Access token not found.'); - } - - const response = await fetch( - `${apiUrl}/api/authenticate?access_token=${token}`, - { - method: 'GET', - credentials: 'include', - } - ); - if (response.ok) { - return await response.json(); - } - return null; -}; - -export const getProfileByJWT = async () => { - const response = await fetch(`${apiUrl}/api/profile`, { - method: 'GET', - credentials: 'include', - }); - - return await response.json(); -}; -``` - -## Ready to go - -That's it, your react app is ready for Single Sign-On. 🎉 - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/frameworks/remix.md b/guides/jackson/frameworks/remix.md deleted file mode 100644 index ecf0391..0000000 --- a/guides/jackson/frameworks/remix.md +++ /dev/null @@ -1,552 +0,0 @@ ---- -title: Add SAML SSO to Remix App with BoxyHQ -description: Add SAML SSO to Remix App with BoxyHQ -sidebar_label: Remix ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Add SAML SSO to Remix App - -Let's look at how to authenticate users in a remix app using Enterprise Single-Sign-On (SSO). - -If you wish to dive straight into the source, Checkout: https://github.com/boxyhq/jackson-remix-auth - -:::info -This guide shows how to embed Single Sign-On (SSO) feature using Jackson, and thereby does not require you to host Jackson separately. -::: - -## Getting Started - -### Create remix app - -```bash -npx create-remix@latest -``` - -You can go with the Remix App Server as the deployment target. Feel free to choose either 'Typescript' or "Javascript". All the code samples in this guide are in typescript. - -### Install the dependencies - -```bash -npm i remix-auth @boxyhq/remix-auth-sso -``` - -[`remix-auth`](https://github.com/sergiodxa/remix-auth) is a complete open-source authentication solution for Remix applications. [`@boxyhq/remix-auth-sso`](https://github.com/boxyhq/remix-auth-sso) provides a remix-auth strategy to interact with the SSO Service provider. - -## Set up remix-auth - -First, we need an `Authenticator` instance from `remix-auth`. `Authenticator` exposes the API for login and logout. - -### Create sessionStorage for `Authenticator` - -app/sessions.server.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/sessions.server.ts - -> **NOTE: We will be relying on cookie-based sessions See: [createCookieSessionStorage](https://remix.run/docs/en/v1/api/remix#createcookiesessionstorage) from remix. ** - -```typescript -import { createCookieSessionStorage } from 'remix'; - -const sessionStorage = createCookieSessionStorage({ - cookie: { - name: '__session', - httpOnly: true, - path: '/', - sameSite: 'lax', - secrets: process.env.COOKIE_SECRETS!.split(','), - secure: process.env.NODE_ENV === 'production', - }, -}); - -const { getSession, commitSession, destroySession } = sessionStorage; -const JACKSON_ERROR_COOKIE_KEY = 'jackson_error'; - -export default sessionStorage; -export { getSession, commitSession, destroySession, JACKSON_ERROR_COOKIE_KEY }; -``` - -### Create the `Authenticator` instance - -app/auth.server.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/auth.server.ts - -> **NOTE: We haven't initialised the strategy use yet. That will be done in following sections** - -```typescript -import { Authenticator } from 'remix-auth'; -import { - BoxyHQSSOStrategy, - type BoxyHQSSOProfile, -} from '@boxyhq/remix-auth-sso'; -import invariant from 'tiny-invariant'; -import sessionStorage from './sessions.server'; - -let auth: Authenticator; -declare global { - var __auth: Authenticator | undefined; -} - -function createAuthenticator() { - const auth = new Authenticator(sessionStorage); - - // Strategy use for the hosted saml service provider goes here - - // Strategy use for the embedded saml service provider goes here - - return auth; -} - -if (process.env.NODE_ENV === 'production') { - auth = createAuthenticator(); -} else { - // In development we don't want to recreate the Authenticator for every change - if (!global.__auth) { - global.__auth = createAuthenticator(); - } - auth = global.__auth; -} - -export { auth }; -``` - -## Set up Jackson SSO feature - -We'll be using SAML Jackson npm to setup some API routes ([resource routes](https://remix.run/docs/en/v1/guides/resource-routes) in remix terminology). - -### Install jackson - -Install `@boxyhq/saml-jackson` first: - -```bash -npm i @boxyhq/saml-jackson -``` - -Before you proceed,set up a [database](../../../docs/jackson/deploy/service#database) for jackson. Refer to [db environment variables](../../../docs/jackson/deploy/env-variables#database-configuration) for the npm library options. - -### Setup `JacksonProvider` - -app/auth.jackson.server.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/auth.jackson.server.ts - -> **NOTE: [clientSecretVerifier](../../../docs/jackson/deploy/env-variables#client_secret_verifier) set below will be matched against client_secret coming from Authenticator  ** - -```typescript - const opts = { - ... - db: { - engine: "sql", - url: "postgresql://postgres:postgres@localhost:5432/postgres", - type: "postgres", - }, - clientSecretVerifier: process.env.CLIENT_SECRET_VERIFIER - ... - } - - ... - - async function JacksonProvider({ - appBaseUrl, - }: { - appBaseUrl: string; - }): Promise<{ - connectionAPIController: IConnectionAPIController; - oauthController: IOAuthController; - }> { - const _opts = { ...opts, externalUrl: appBaseUrl, samlAudience: appBaseUrl }; - // this is needed because in development we don't want to restart - // the server with every change, but we want to make sure we don't - // create a new connection to the DB with every change either. - if (process.env.NODE_ENV === "production") { - const controllers = await jackson(_opts); - connectionAPIController = controllers.connectionAPIController; - oauthController = controllers.oauthController; - } else { - if (!global.__connectionAPIController && !global.__oauthController) { - const controllers = await jackson(_opts); - global.__connectionAPIController = controllers.connectionAPIController; - global.__oauthController = controllers.oauthController; - } - connectionAPIController = global.__connectionAPIController; - oauthController = global.__oauthController; - } - - return { connectionAPIController, oauthController }; - } - - ... - -``` - -### Resource routes to handle OAuth 2.0 and SSO Connections - -Next, create the api files for [OAuth 2.0 flow](../../../docs/jackson/sso-flow/#3-oauth-20-flow) and [SSO Connection](../../../docs/jackson/sso-flow/#2-sso-connection-api): - -```bash -app/routes $ mkdir api && cd api -routes/api $ touch oauth.\$slug.ts v1.connections.ts -``` - -oauth.$slug.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/api/oauth.%24slug.ts - -```typescript -... - -// Handles GET /api/oauth/authorize, GET /api/oauth/userinfo -export const loader: LoaderFunction = async ({ params, request }) => { - - ... // Some validation logic - const operation = params.slug; - const url = new URL(request.url); - - const { oauthController } = await JacksonProvider({ - appBaseUrl: url.origin, - }); - - // rightmost query param will win in case of multiple ones with same name - const queryParams = Object.fromEntries(url.searchParams.entries()); - - switch (operation) { - case "authorize": { - ... - try { - const { redirect_url, authorize_form } = - await oauthController.authorize( - queryParams as unknown as OAuthReqBody - ); - ... - } catch (err: any) { - ... // error handling, redirect to /error page - } - } - case "oidc": { - try { - const { redirect_url } = await oauthController.oidcAuthzResponse( - queryParams as unknown as OIDCAuthzResponsePayload - ); - if (redirect_url) { - return redirect(redirect_url, 302); - } - } catch (err: any) { - ... // error handling, redirect to /error page - } - } - case "userinfo": { - ... // token validation - try { - const profile = await oauthController.userInfo(token); - return json(profile); - } catch (error: any) { - ... // error handling - } - } - } -}; - -// Handles POST /api/oauth/saml, POST /api/oauth/token -export const action: ActionFunction = async ({ params, request }) => { - - ... // Some validation logic - const operation = params.slug; - const url = new URL(request.url); - - const { oauthController } = await JacksonProvider({ - appBaseUrl: url.origin, - }); - switch (operation) { - case "saml": { - try { - const { redirect_url } = await oauthController.samlResponse(body); - return redirect(redirect_url, 302); - } catch (err: any) { - ... // error handling - } - } - case "token": { - try { - const tokenRes = await oauthController.token(body); - return json(tokenRes); - } catch (error: any) { - ... // error handling - } - } - } -}; -``` - -v1.connections.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/api/v1.connections.ts - -```typescript - export const loader: LoaderFunction = async ({ request }) => { - const url = new URL(request.url); - const queryParams = Object.fromEntries( - url.searchParams.entries() - ) as unknown as { clientID?: string; tenant?: string; product?: string }; - ...// Validate apiKey - const { connectionAPIController } = await JacksonProvider({ appBaseUrl: url.origin }); - - try { - return json(await connectionAPIController.getConnections(queryParams)); - } catch (error: any) { - ... // error handling - } - }; - - export const action: ActionFunction = async ({ request }) => { - const url = new URL(request.url); - const contentType = request.headers.get("Content-Type"); - ... // Validate body,apiKey - const { connectionAPIController } = await JacksonProvider({ appBaseUrl: url.origin }); - - try { - switch (request.method) { - case "POST": - return json(await connectionAPIController.createSAMLConnection(body)); - case "PATCH": - await connectionAPIController.updateSAMLConnection(body); - return new Response(null, { status: 204 }); - case "DELETE": - await connectionAPIController.deleteConnections(body); - return new Response(null, { status: 204 }); - } - } catch (error: any) { - ... // error handling - } - }; -``` - -### Initialise BoxyHQSSOStrategy - -Use the strategy with the `Authenticator` as shown below. The `clientID/Secret` values are expected to be set dynamically from the client side. For now set them to the value `dummy`. - -Point the `issuer` to the app url. - -auth.server.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/auth.server.ts - -> **BOXYHQSSO_ISSUER in env is set to point to the app url: http://localhost:3366 or the actual url once hosted. Take a look at [.env.example](https://github.com/boxyhq/jackson-remix-auth/blob/main/.env.example) file  ** - -```typescript -invariant(process.env.BASE_URL, 'Expected BASE_URL to be set in env'); -invariant( - process.env.BOXYHQSSO_ISSUER, - 'Expected BOXYHQSSO_ISSUER to be set in env' -); - -const BASE_URL = process.env.BASE_URL; -const BOXYHQSSO_ISSUER = process.env.BOXYHQSSO_ISSUER; -// Strategy use for the embedded sso service provider goes here -auth.use( - new BoxyHQSSOStrategy( - { - issuer: BOXYHQSSO_ISSUER, //same as the APP URL - clientID: 'dummy', - clientSecret: process.env.CLIENT_SECRET_VERIFIER || 'dummy', - callbackURL: new URL('/auth/sso/embed/callback', BASE_URL).toString(), - }, - async ({ profile }) => { - return profile; - } - ), - 'boxyhq-sso-embed' -); -``` - -### Routes to handle login and callback from IdP - -We need 2 routes: - -~> [/auth/sso/embed](https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/auth.sso.embed.tsx) - Action handler for login -~> [/auth/sso/embed/callback](https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/auth.sso.embed.callback.tsx) - After successful authorization, user is redirected here with the authorization code. The `code` is then exchanged to get the `token` and further the user profile. - -Create the following files under `app/routes`: - -app/routes/auth.sso.embed.tsx: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/auth.sso.embed.tsx - -```tsx -... -export const action: ActionFunction = async ({ request }) => { - const formData = await request.formData(); - const email = formData.get("email"); - const product = formData.get("product"); - - ... // Add some validation logic - - // extracting the tenant from email is one way to set it - const tenant = email.split("@")[1]; - - return await auth.authenticate("boxyhq-sso-embed", request, { - successRedirect: "/private", - failureRedirect: "/login", - context: { - clientID: `tenant=${tenant}&product=${product}`, - clientSecret: process.env.CLIENT_SECRET_VERIFIER || "dummy", - }, - }); -}; -``` - -app/routes/auth.sso.embed.callback.tsx: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/auth.sso.embed.callback.tsx - -```tsx -... -export const loader: LoaderFunction = async ({ request, params }) => { - return auth.authenticate("boxyhq-sso-embed", request, { - successRedirect: "/private", - failureRedirect: "/login", - }); -}; -``` - -## Add an SSO Connection - -[Add a SAML SSO connection](../../../docs/jackson/sso-flow/#21-add-connection) for [mocksaml.com](https://mocksaml.com). You can start the app and call the connection API as shown below: - -
-Below adds a SAML SSO connection for https://mocksaml.com -
-curl --location --request POST 'http://localhost:3366/api/v1/connections'
---header 'Authorization: Api-Key __JACKSON_API_KEY__'
---header 'Content-Type: application/x-www-form-urlencoded'
---data-urlencode 'encodedRawMetadata=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxFbnRpdHlEZXNjcmlwdG9yIHhtbG5zOm1kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEiIGVudGl0eUlEPSJodHRwczovL3NhbWwuZXhhbXBsZS5jb20vZW50aXR5aWQiIHZhbGlkVW50aWw9IjIwMjYtMDYtMjJUMTg6Mzk6NTMuMDAwWiI+CiAgPElEUFNTT0Rlc2NyaXB0b3IgV2FudEF1dGhuUmVxdWVzdHNTaWduZWQ9ImZhbHNlIiBwcm90b2NvbFN1cHBvcnRFbnVtZXJhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj4KICAgIDxLZXlEZXNjcmlwdG9yIHVzZT0ic2lnbmluZyI+CiAgICAgIDxLZXlJbmZvIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KICAgICAgICA8WDUwOURhdGE+CiAgICAgICAgICA8WDUwOUNlcnRpZmljYXRlPk1JSUM0akNDQWNvQ0NRQzMzd255YlQ1UVpEQU5CZ2txaGtpRzl3MEJBUXNGQURBeU1Rc3dDUVlEVlFRR0V3SlYKU3pFUE1BMEdBMVVFQ2d3R1FtOTRlVWhSTVJJd0VBWURWUVFEREFsTmIyTnJJRk5CVFV3d0lCY05Nakl3TWpJNApNakUwTmpNNFdoZ1BNekF5TVRBM01ERXlNVFEyTXpoYU1ESXhDekFKQmdOVkJBWVRBbFZMTVE4d0RRWURWUVFLCkRBWkNiM2g1U0ZFeEVqQVFCZ05WQkFNTUNVMXZZMnNnVTBGTlREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFEQ0NBUW9DZ2dFQkFMR2ZZZXR0TXNjdDFUNnRWVXdUdWROSkg1UG5iOUdHbmtYaTlady9lNng0NUREMApSdVJPTmJGbEoyVDRSakFFL3VHK0FqWHhYUThvMlNaZmI5K0dnbUNIdVRKRk5nSG9aMW5GVlhDbWIvSGc4SHBkCjR2T0FHWG5kaXhhUmVPaXEzRUg1WHZwTWpNa0ozKzgrOVZZTXpNWk9qa2dRdEFxTzM2ZUFGRmZOS1g3ZFRqM1YKcHdMa3Z6Ni9LRkNxOE9Bd1krQVVpNGVabTVKNTdEMzFHempId2ZqSDlXVGVYME15bmRtbk5CMXFWNzVxUVIzYgoyL1c1c0dIUnYrOUFhcmdnSmtGK3B0VWtYb0x0VkE1MXdjZlltNmhJTHB0cGRlNUZRQzhSV1kxWXJzd0JXQUVaCk5meXJSNEplU3dlRWxOSGc0TlZPczRUd0dqT1B3V0dxelRmZ1RsRUNBd0VBQVRBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FRRUFBWVJsWWZsU1hBV29acEZmd05pQ1FWRTVkOXpaMERQek5kV2hBeWJYY1R5TWYwejVtRGY2RldCVwo1R3lvaTl1M0VNRURuekxjSk5rd0pBQWMzOUFwYTRJMi90bWwrSnkyOWRrOGJUeVg2bTkzbmdtQ2dkTGg1WmE0CmtodVUzQU0zTDYzZzdWZXhDdU83a3dramgvK0xxZGNJWHNWR082WERmdTJRT3MxWHBlOXpJekxwd20vUk5ZZVgKVWpiU2o1Y2UvamVrcEF3N3F5VlZMNHhPeWg4QXRVVzFlazN3SXcxTUp2RWdFUHQwZDE2b3NoV0pwb1MxT1Q4TApyLzIyU3ZZRW8zRW1TR2RUVkdnazN4M3MrQTBxV0FxVGN5anI3UTRzL0dLWVJGZm9tR3d6MFRaNEl3MVpOOTlNCm0wZW8yVVNsU1JUVmw3UUhSVHVpdVNUaEhwTEtRUT09CjwvWDUwOUNlcnRpZmljYXRlPgogICAgICAgIDwvWDUwOURhdGE+CiAgICAgIDwvS2V5SW5mbz4KICAgIDwvS2V5RGVzY3JpcHRvcj4KICAgIDxOYW1lSURGb3JtYXQ+dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXNzPC9OYW1lSURGb3JtYXQ+CiAgICA8U2luZ2xlU2lnbk9uU2VydmljZSBCaW5kaW5nPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCIgTG9jYXRpb249Imh0dHBzOi8vbW9ja3NhbWwuY29tL2FwaS9zYW1sL3NzbyIvPgogICAgPFNpbmdsZVNpZ25PblNlcnZpY2UgQmluZGluZz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUE9TVCIgTG9jYXRpb249Imh0dHBzOi8vbW9ja3NhbWwuY29tL2FwaS9zYW1sL3NzbyIvPgogIDwvSURQU1NPRGVzY3JpcHRvcj4KPC9FbnRpdHlEZXNjcmlwdG9yPg=='
---data-urlencode 'defaultRedirectUrl=http://localhost:3366'
---data-urlencode 'redirectUrl=["http://localhost:3366/*"]'
---data-urlencode 'tenant=boxyhq.com'
---data-urlencode 'product=saml-demo.boxyhq.com'
---data-urlencode 'name=demo-config'
---data-urlencode 'description=Demo SAML config'
-
-
- -## App routes - -### Login/Logout - -For the `Login` page we need a form that can accept email (for deriving tenant) and product. We also change the form action for the `embedded SAML provider` button. - -**login.tsx: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/login.tsx  ** - -```tsx - export const loader: LoaderFunction = async ({ request }) => { - // check if authenticated then redirect to /private - await auth.isAuthenticated(request, { successRedirect: "/private" }); - // return form error data from session - } - - export default function Login() { - return ( - ... -
- ... // input fields for email and product - - -
- ... - ) -``` - -**logout.ts: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/logout.ts  ** - -```typescript -export const loader: LoaderFunction = async ({ request }) => { - await auth.logout(request, { redirectTo: '/login' }); -}; -``` - -### Private - -This page renders the logged-in user profile. - -**private.tsx: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/private.tsx  ** - -```tsx -export const loader: LoaderFunction = async ({ request }) => { - const profile = await auth.isAuthenticated(request, { - failureRedirect: '/login', - }); - - return json({ profile }); -}; - -export default function Private() { - const { profile } = useLoaderData(); - return ( - <> -

Raw profile

-
-        {JSON.stringify(profile, null, 2)}
-      
- - ); -} -``` - -### Error page - -For errors occuring in the SAML flow (/api/oauth/authorize and /api/oauth/saml), the user get's [redirected](https://github.com/boxyhq/jackson-remix-auth/blob/e75cb4a9c340b088749ec63d6932f2f4b206a07d/app/routes/api/oauth.%24slug.ts#L63) to an error page. - -Create one at `/error`: - -**error.tsx: https://github.com/boxyhq/jackson-remix-auth/blob/main/app/routes/error.tsx  ** - -```tsx -export const loader: LoaderFunction = async ({ request }) => { - const session = await getSession(request.headers.get('Cookie')); - const { statusCode, message } = session.get(JACKSON_ERROR_COOKIE_KEY) || { - statusCode: null, - message: '', - }; - return json({ statusCode, message }); -}; - -export default function Error() { - const { statusCode, message } = useLoaderData(); - - let statusText = ''; - if (typeof statusCode === 'number') { - if (statusCode >= 400 && statusCode <= 499) { - statusText = 'client-side error'; - } - if (statusCode >= 500 && statusCode <= 599) { - statusText = 'server error'; - } - } - - if (statusCode === null) { - return null; - } - - return ( -
-
- - - -

{statusCode}

-

{statusText}

-

SAML error:

-

{message}

-
-
- ); -} -``` - -## Ready to go - -That's it, your remix app is ready for Single Sign-On. 🎉 - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/integrations/auth0.md b/guides/jackson/integrations/auth0.md deleted file mode 100644 index 066a280..0000000 --- a/guides/jackson/integrations/auth0.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: BoxyHQ SAML as Auth0 Social provider -sidebar_label: Auth0 ---- - -# Auth0 - -[Auth0](https://auth0.com) doesn't need any introduction, it is one of the most popular Auth products out there. After the Okta acquisition though there's been pressure on Auth0 to focus on the Enterprise segment and unfortunately this has meant that as a startup you only get three Enterprise SSO connections (SAML or OIDC) for your apps before they try and get you onto a very expensive plan. - -As an early-stage startup this makes Enterprise SSO integration unaffordable, this is why we have created a seamless way to continue using Auth0 for auth but plug-in BoxyHQ for Enterprise SSO directly from Auth0. Your user management stays entirely in Auth0 but using BoxyHQ's OAuth 2.0 skin you can make Enterprise SAML or OIDC logins available to your customers. - -Visit our [GitHub repo](https://github.com/boxyhq/jackson-examples/tree/main/apps/auth0-user-store) to see the source code for the Auth0 integration. - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/integrations/bubble.md b/guides/jackson/integrations/bubble.md deleted file mode 100644 index cb83f66..0000000 --- a/guides/jackson/integrations/bubble.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: BoxyHQ SAML SSO Bubble Plugin -sidebar_label: Bubble.io ---- - -# SAML SSO Bubble Plugin - -This guide will help you setup the BoxyHQ SAML SSO Bubble Plugin to add SAML SSO authentication to your Bubble application. - -There is no easy way to add SAML SSO authentication to a Bubble application. This plugin provides a way to add SAML SSO authentication to your Bubble application with minimal effort. - -This plugin contains API calls and Actions for connecting a Bubble.io application with the BoxyHQ SAML Jackson instance for SSO authentication. - -Please note that you need a self-hosted instance of SAML Jackson to use this plugin. BoxyHQ does not provide a hosted instance of SAML Jackson at this time. - -Please follow the instructions in the [SAML Jackson Deployment Guides](https://boxyhq.com/guides/jackson#deployment-guides) to setup your SAML Jackson instance. - -Try the [Example Bubble App](https://boxyhq-saml-sso.bubbleapps.io/version-test) to see the plugin in action. - -## Install the plugin - -Here are the quick steps to install the plugin from the Bubble editor: - -- Go to your application's Plugins tab from left navigation. -- Click on the **Add plugins** button from the top right corner. -- Search for **BoxyHQ SAML SSO** and click on the **Install** button. - -## Configure the plugin - -Next step is to configure the plugin. Make sure you add the following values in the plugin settings: - -- `BoxyHQ Instance URL`: The URL of your SAML Jackson instance. - -- `Callback URL`: The URL where the user will be redirected after successful authentication with the IdP. This URL should be the same as the URL you have configured while adding the SAML connection in SAML Jackson. - -- `Client Secret Verifier`: This is optional. If you have configured a client secret verifier in SAML Jackson, you can add it here. If you have not configured a client secret verifier, you can leave this field blank. - -![Configure the plugin](/img/bubble-io/step-1.png) - -Now you are ready to setup Workflows in your application to use the plugin. - -## Plugin Actions - -The plugin consists of the following Actions: - -### Get Authorization URL - -This action returns the URL to initiate the SAML SSO authentication flow. After successful authentication with the IdP, the user will be redirected to the `Callback URL` which you can configure in the plugin settings. - -### Fetch User Profile - -This action returns the user profile of the authenticated user. This action should be used after the user is redirected to the `Callback URL` after successful authentication with the IdP. - -## Setup Workflows - -Go to your application's **Workflows** tab from left navigation. You need to add 2 workflows to your application to use the plugin: - -### Login Workflow - -This workflow will be triggered when the user clicks on SAML SSO login button on your application. - -Choose **BoxyHQ - Get Authorization URL** from the list of Actions. - -![BoxyHQ - Get Authorization URL Action](/img/bubble-io/step-2.png) - -Add the following values in the Action: - -- `tenant`: A multi-tenant enterprise app must attach SSO connections to a tenant identifier. For example, an app can use any of the following as its tenant identifier: `domain`, `organization id`, `team id` or other unique identifier. This value will be used to fetch the SAML connection from SAML Jackson. For example: `boxyhq`. - -- `product`: The unique identifier of the your application. This vaue can be static if you are using a single product with SAML Jackson. For example: `my-bubble-app`. - -- `state`: A random string that will be used to verify the state of the request. This value will be passed back to your application in the `Callback URL`. You can use this value to verify the authenticity of the request. - -![BoxyHQ - Get Authorization URL Action](/img/bubble-io/step-3.png) - -This action will return `Authorization URL` which you can use to redirect the user to the IdP for authentication. - -![BoxyHQ - Get Authorization URL Action](/img/bubble-io/step-4.png) - -### SSO Callback Workflow - -This workflow will be triggered when the user is redirected back to your application after successful authentication with the IdP. - -Make sure you have added a new page in your application and configured the `Callback URL` in the plugin settings to point to this page. For example: `https://my-bubble-app.com/sso-callback`. - -The callback URL will contain the following query parameters: - -- `code`: The authorization code that can be used to fetch the user profile from SAML Jackson. -- `state`: The state value that was passed in the `Login Workflow`. - -Here is an example of the callback URL: `https://my-bubble-app.com/sso-callback?code=52d7d591ba2c2e6efa4a8595edf9ac718b3658a7&state=random-state` - -:::info -You can verify the authenticity of the request by comparing the `state` value in the query parameters with the `state` value that was passed in the `Login Workflow`. If the values of the `state` match, you can proceed to fetch the user profile from SAML Jackson. - -This verification is out of scope of this plugin. You can skip this step if you don't want to verify the authenticity of the request. However, it is recommended to verify the authenticity of the request. -::: - -Let's add the following Actions to the `SSO Callback Workflow`: - -#### Action: BoxyHQ - Fetch User Profile - -Choose **BoxyHQ - Fetch User Profile** from the list of Actions. - -Add the following values in the Action: - -`code`: The authorization code that was passed in the query parameters. You can use the dynamic value `Get data from page URL` to fetch the value of the `code` query parameter. - -The Action will return the following values: - -- `profile id` - The unique identifier of the user in IdP. -- `profile email` - The email address of the user. -- `profile first name` - The first name of the user. -- `profile last name` - The last name of the user. -- `requested tenant` - The tenant identifier that was passed in the `Login Workflow`. -- `requested product` - The product identifier that was passed in the `Login Workflow`. -- `profile raw attributes` - The raw attributes that was returned by the IdP. This value will be a JSON string. - -![BoxyHQ - Fetch User Profile Action](/img/bubble-io/step-5.png) - -#### Action: Create an user account for someone else - -You can use the **Create an user account for someone else** Action to create a new user account in your application. This Action will create a new user account in your application if the user does not already exist. If the user already exists, it will update the user account with the new values. - -Make sure you checked the **Return the user if the account already exists** checkbox in the Action. - -You can configure the values as per your requirements. - -![BoxyHQ - Get Authorization URL Action](/img/bubble-io/step-6.png) - -#### Action: Assign a temp password to a user - -Bubble requires a password to be set for a user to login to the application. To overcome this limitation, we can set a temporary password for the user account and use that password to login to the application. You can choose the **Assign a temp password to a user** Action to set a temporary password for the user account. - -#### Action: Log the user in - -You can use the **Log the user in** Action to login the user to your application. - -Add the following values in the Action: - -- `Email`: The email address of the user. You can use the dynamic value `profile email` to fetch the email address from the `Fetch User Profile` Action. -- `Password`: The temporary password that was set for the user account. You can use the dynamic value `temp password` to fetch the temporary password from the `Assign a temp password to a user` Action. - -#### Action: Redirect to a page - -You can use the **Redirect to a page** Action to redirect the user to an authenticated page in your application. - -## Next Steps - -Please reach out to our team for any questions or help with the setup. We are happy to help! diff --git a/guides/jackson/integrations/firebase.md b/guides/jackson/integrations/firebase.md deleted file mode 100644 index 67d1991..0000000 --- a/guides/jackson/integrations/firebase.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: BoxyHQ SAML with Firebase user store -sidebar_label: Firebase ---- - -# Firebase - -[Firebase](https://firebase.google.com/) is Google's Backend-as-a-Service that can scale quickly to support millions of users. Originally developed as a realtime database, Firebase now helps us solve common app development challenges like authentication, storage and messaging to name a few. - -With our Enterprise SSO integration, you can have your users managed as part of the Firebase user store. The Enterprise SAML or OIDC identities of your customer can then be authorised to access other services like CloudStorage. - -Visit our [GitHub repo](https://github.com/boxyhq/jackson-examples/tree/main/apps/firebase-user-store) to see the source code for the Firebase integration. - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/integrations/nextauth.md b/guides/jackson/integrations/nextauth.md deleted file mode 100644 index bdae52a..0000000 --- a/guides/jackson/integrations/nextauth.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: BoxyHQ SAML as NextAuth OAuth provider -sidebar_label: NextAuth ---- - -# NextAuth - -[NextAuth](https://next-auth.js.org/) is a complete open source authentication solution for Next.js applications. - -NextAuth supports SAML Jackson as an OAuth Provider. - -Follow [this documentation](https://next-auth.js.org/providers/boxyhq-saml) to learn about how to use SAML Jackson with NextAuth. - -Visit our [GitHub repo](https://github.com/boxyhq/jackson-examples/tree/main/apps/next-auth) to see the source code for the NextAuth SAML SSO integration. - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/integrations/supertokens.md b/guides/jackson/integrations/supertokens.md deleted file mode 100644 index e8c9e84..0000000 --- a/guides/jackson/integrations/supertokens.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: SuperTokens -sidebar_label: SuperTokens ---- - -# SuperTokens - -[SuperTokens](https://supertokens.com/) is an open core alternative to proprietary login providers like Auth0 or AWS Cognito. - -SuperTokens allows you to use SAML Jackson as a custom OAuth provider. - -Follow [this documentation](https://supertokens.com/docs/thirdpartyemailpassword/common-customizations/saml/with-boxyhq/integration-steps) to learn about how to use SAML Jackson with SuperTokens. - -Visit our [GitHub repo](https://github.com/supertokens/jackson-supertokens-express) to see the source code for the SuperTokens SAML SSO integration. We also have a [Next.js + Supertokens + Jackson](https://github.com/nadilas/jackson-next-supertokens) integration for you to draw inspiration from. - -## Next steps - -- Got a question? [Ask here](https://discord.gg/uyb7pYt4Pa) diff --git a/guides/jackson/login-with-saml-sso.md b/guides/jackson/login-with-saml-sso.md deleted file mode 100644 index edce0ec..0000000 --- a/guides/jackson/login-with-saml-sso.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: UI Best Practices for Log in with SAML Single Sign-On -description: UI Best Practices for Log in with SAML Single Sign-On -sidebar_label: Log in with SAML SSO ---- - -# Log in with SAML Single Sign-On - -Let's see how enterprise apps have implemented the SAML SSO into their authentication flow. - -## Service Provider Initiated SSO - -You can use several approaches while implementing your app's SP-initiated SAML SSO login. - -- Dedicated page for SAML SSO -- Dynamic password fields -- Subdomain for tenants -- Separate the email and password fields - -### Dedicated page for SAML SSO - -With this approach, you would put a button on your login page for `Login with SAML SSO`. Users are taken to the SAML SSO page when they click the button. - -**Postman** takes this approach to enable SAML SSO for their enterprise users. - - - - - -The user flow would be something similar to the one below. - -- Users visit the login page. -- Click the button "Login with SAML SSO" -- The app redirects the user to the SAML SSO page. -- The user enters their email address or tenant ID. -- The app examines the domain or tenant ID to see if SSO is enabled. -- If SSO is enabled, the app redirects the user to their IdP. - -### Dynamic password fields - -This approach hides the password field if SSO is enabled for a domain. - -You can see this approach on the **Dropbox** login form. - - - - - -The user flow would be something similar to the one below. - -- Users visit the login page. -- The user enters their email address. -- The app examines the domain to see if SSO is enabled. -- If SSO is enabled, the app hides the password field from the login form. -- The user submits the login form. -- The app redirects the user to their IdP. - -### Subdomain for tenants - -One approach you can take is to configure a subdomain for each tenant. First, display a form to enter the tenant ID, and then the application redirects users to the subdomain page to show the available authentication mechanism enabled for the tenant. - -You can see this approach on the **Freshchat or Freshworks** login form. - - - -

- -

- -The user flow would be something similar to the one below. - -- Users visit the login page. -- The user enters their tenant name. -- The app examines the tenant's existence and redirects the user to the tenant's subdomain page. -- The subdomain page display a login form with the authentication mechanisms enabled for the tenant. -- If SSO is enabled, the user can choose "Login with SAML SSO". - -### Separate the email and password fields - -This approach splits the login process into multiple stages. First, the login form displays an email field without a password field. Next, a user enters their email address, and the application checks to see which authentication mechanism is enabled for the current user. - -**Box** uses this approach for its authentication flow. - - - -The user flow would be something similar to the one below. - -- Users visit the login page. -- The user enters their email address and submit the login form. -- The app examines the email address to see if SSO is enabled. -- If SSO is enabled, the app redirects the users to their IdP instead of taking them to a password flow. diff --git a/guides/jackson/overview.mdx b/guides/jackson/overview.mdx deleted file mode 100644 index 5e49a47..0000000 --- a/guides/jackson/overview.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Enterprise SSO Guide -hide_table_of_contents: true -slug: /jackson ---- - -# Enterprise SSO Guide - -The documentation is divided into 3 sections. - -import GuideSection from '../../src/components/GuideSection.js'; -const frameworks = [ - { - name: 'AdonisJS', - href: '/guides/jackson/frameworks/adonis', - }, - { - name: 'Express.js', - href: '/guides/jackson/frameworks/express', - }, - { - name: 'Next.js', - href: '/guides/jackson/frameworks/nextjs', - }, - { - name: 'React', - href: '/guides/jackson/frameworks/react', - }, - { - name: 'Remix', - href: '/guides/jackson/frameworks/remix', - }, - { - name: 'Laravel', - href: '/guides/jackson/frameworks/laravel', - }, - { - name: 'Ruby on Rails', - href: '/guides/jackson/frameworks/rails', - }, -]; -const integrations = [ - { - name: 'Auth0', - href: '/guides/jackson/integrations/auth0', - }, - { - name: 'Firebase', - href: '/guides/jackson/integrations/firebase', - }, - { - name: 'NextAuth', - href: '/guides/jackson/integrations/nextauth', - }, - { - name: 'SuperTokens', - href: '/guides/jackson/integrations/supertokens', - }, - { - name: 'Bubble.io', - href: '/guides/jackson/integrations/bubble', - }, -]; -const deployments = [ - { - name: 'Heroku', - href: '/guides/jackson/deployments/heroku', - }, - { - name: 'Vercel', - href: '/guides/jackson/deployments/vercel', - }, - { - name: 'mogenius', - href: '/guides/jackson/deployments/mogenius', - }, -]; - -## Deployment Guides - -If you want to self host SAML Jackson, the recommended approach is to use one of the recommended one click installation options. - -
-
- -
-
- -## Framework Guides - -Step-by-step guides to quickly integrate SAML SSO into your application. - -
-
- -
-
- -## Integrations Guides - -SAML Jackson works with a large number of Open source tools. - -
-
- -
-
diff --git a/package.json b/package.json index 0d84c68..a93aa98 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "docusaurus": "docusaurus", - "dev": "docusaurus start --port 2699", + "dev": "docusaurus start --port 3000", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", diff --git a/sidebars.js b/sidebars.js index c83f71c..889a90e 100644 --- a/sidebars.js +++ b/sidebars.js @@ -4,200 +4,6 @@ module.exports = { type: 'doc', id: 'index', label: 'Docs', - }, - { - type: 'category', - label: 'Enterprise SSO', - collapsible: true, - link: { type: 'doc', id: 'jackson/overview' }, - items: [ - { - type: 'category', - label: 'Deploy', - items: [ - 'jackson/deploy/index', - 'jackson/deploy/service', - 'jackson/deploy/npm-library', - 'jackson/deploy/env-variables', - 'jackson/deploy/pre-loaded-connections', - ], - }, - { - type: 'category', - label: 'Configure your SSO provider', - link: { type: 'doc', id: 'jackson/sso-providers/index' }, - items: [ - 'jackson/sso-providers/generic-saml', - 'jackson/sso-providers/azure', - 'jackson/sso-providers/microsoft-adfs', - 'jackson/sso-providers/okta', - 'jackson/sso-providers/auth0', - 'jackson/sso-providers/google', - 'jackson/sso-providers/onelogin', - 'jackson/sso-providers/pingone', - 'jackson/sso-providers/jumpcloud', - 'jackson/sso-providers/rippling', - 'jackson/sso-providers/generic-oidc', - ], - }, - { - type: 'category', - label: 'Single Sign-on (SSO) Flow', - link: { type: 'doc', id: 'jackson/sso-flow/index' }, - items: ['jackson/sso-flow/example-flow'], - }, - 'jackson/examples', - 'jackson/observability', - 'jackson/sbom', - 'jackson/container-signing', - 'jackson/security', - 'jackson/upgrade', - 'jackson/local-development', - 'jackson/saml-federation/index', - 'jackson/events', - ], - }, - { - type: 'category', - label: 'Directory Sync', - collapsible: true, - link: { type: 'doc', id: 'directory-sync/overview' }, - items: [ - 'directory-sync/getting-started', - 'directory-sync/api-reference', - 'directory-sync/examples', - 'directory-sync/webhooks', - 'directory-sync/events', - { - type: 'category', - label: 'Providers', - collapsible: true, - link: { type: 'doc', id: 'directory-sync/providers/index' }, - items: [ - 'directory-sync/providers/azure', - 'directory-sync/providers/okta', - 'directory-sync/providers/onelogin', - 'directory-sync/providers/jumpcloud', - ], - }, - ], - }, - { - type: 'category', - label: 'Audit Logs', - collapsible: true, - link: { type: 'doc', id: 'retraced/overview' }, - items: [ - { - type: 'category', - label: 'Getting Started', - link: { type: 'doc', id: 'retraced/getting-started/retraced-basics' }, - items: [ - 'retraced/getting-started/embedded-viewer', - 'retraced/getting-started/first-audit-event', - 'retraced/getting-started/renaming-properties', - 'retraced/getting-started/searching-for-events', - 'retraced/getting-started/time-synchronization', - ], - }, - { - type: 'category', - label: 'Self Hosting', - link: { type: 'doc', id: 'retraced/self-host/index' }, - items: [ - 'retraced/self-host/env-variables', - 'retraced/self-host/local', - 'retraced/self-host/docker', - 'retraced/self-host/digitalocean', - 'retraced/self-host/aws', - 'retraced/self-host/kubernetes', - 'retraced/self-host/skaffold', - ], - }, - { - type: 'category', - label: 'Architecture', - link: { type: 'doc', id: 'retraced/architecture/index' }, - items: [ - 'retraced/architecture/immutability-guarantee', - 'retraced/architecture/hashing-formula', - ], - }, - { - type: 'category', - label: 'How to Audit Log', - link: { type: 'doc', id: 'retraced/how-to-audit-log/index' }, - items: [ - 'retraced/how-to-audit-log/actions', - 'retraced/how-to-audit-log/actors', - 'retraced/how-to-audit-log/exportable', - 'retraced/how-to-audit-log/immutable', - 'retraced/how-to-audit-log/searchable', - 'retraced/how-to-audit-log/segments', - 'retraced/how-to-audit-log/targets', - 'retraced/how-to-audit-log/time-synced', - ], - }, - { - type: 'category', - label: 'SDKs', - link: { type: 'doc', id: 'retraced/sdks/available-sdks' }, - items: ['retraced/sdks/golang', 'retraced/sdks/nodejs'], - }, - { - type: 'category', - label: 'APIs', - link: { type: 'doc', id: 'retraced/apis/overview' }, - items: [ - 'retraced/apis/publisher-api', - 'retraced/apis/enterprise-api', - 'retraced/apis/admin-api', - 'retraced/apis/graphql', - ], - }, - { - type: 'category', - label: 'Exposing Events', - link: { type: 'doc', id: 'retraced/exposing-retraced-data/overview' }, - items: [ - 'retraced/exposing-retraced-data/viewer', - 'retraced/exposing-retraced-data/enterprise-api', - ], - }, - { - type: 'category', - label: 'Advanced Retraced', - link: { type: 'doc', id: 'retraced/advanced/index' }, - items: [ - 'retraced/advanced/display-templates', - 'retraced/advanced/template-comparators', - 'retraced/advanced/tracking-application-versions', - 'retraced/advanced/automated-audit-events', - ], - }, - 'retraced/sbom', - 'retraced/container-signing', - ], - }, - { - type: 'category', - label: 'Admin Portal', - collapsible: true, - link: { type: 'doc', id: 'admin-portal/overview' }, - items: [ - 'admin-portal/enterprise-sso', - 'admin-portal/directory-sync', - 'admin-portal/audit-logs', - { - type: 'category', - label: 'Setup Link', - link: { type: 'doc', id: 'admin-portal/setup-links/index' }, - items: [ - 'admin-portal/setup-links/jackson', - 'admin-portal/setup-links/directory-sync', - ], - }, - ], - }, + } ], }; diff --git a/sidebars_guides.js b/sidebars_guides.js deleted file mode 100644 index 9fdebf8..0000000 --- a/sidebars_guides.js +++ /dev/null @@ -1,70 +0,0 @@ -module.exports = { - GuidesSidebar: [ - 'index', - { - type: 'category', - label: 'Enterprise SSO', - collapsible: true, - collapsed: true, - link: { type: 'doc', id: 'jackson/overview' }, - items: [ - 'jackson/configuring-saml-sso', - 'jackson/login-with-saml-sso', - { - type: 'category', - label: 'Deployment Guides', - collapsed: false, - items: [ - 'jackson/deployments/heroku', - 'jackson/deployments/vercel', - 'jackson/deployments/mogenius', - ], - }, - { - type: 'category', - label: 'Framework Guides', - collapsed: false, - items: [ - 'jackson/frameworks/adonis', - 'jackson/frameworks/express', - 'jackson/frameworks/nextjs', - 'jackson/frameworks/react', - 'jackson/frameworks/remix', - 'jackson/frameworks/laravel', - 'jackson/frameworks/rails', - ], - }, - { - type: 'category', - label: 'Integrations Guides', - collapsed: false, - items: [ - 'jackson/integrations/auth0', - 'jackson/integrations/firebase', - 'jackson/integrations/nextauth', - 'jackson/integrations/supertokens', - 'jackson/integrations/bubble', - ], - }, - ], - }, - { - type: 'category', - label: 'Directory Sync', - collapsible: true, - collapsed: true, - link: { type: 'doc', id: 'directory-sync/overview' }, - items: [ - { - type: 'category', - label: 'Framework Guides', - collapsed: true, - items: [ - 'directory-sync/frameworks/nextjs', - 'directory-sync/frameworks/express', - ], - }, - ], - }, - ], -}; diff --git a/src/components/BenefitsSection.js b/src/components/BenefitsSection.js deleted file mode 100644 index 26ecbe2..0000000 --- a/src/components/BenefitsSection.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; - -import SvgIcon from './SvgIcon'; -import SectionLayout from './SectionLayout'; - -const BenefitsSection = ({ benefits, title, description }) => { - return ( - -
- {benefits.map(({ title, description, icon }, idx) => ( -
-
-
-
-
-
-
- -
-
-

{title}

-

{description}

-
-
-
-
-
- ))} -
-
- ); -}; - -export default BenefitsSection; diff --git a/src/components/Card.js b/src/components/Card.js deleted file mode 100644 index 9485206..0000000 --- a/src/components/Card.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; - -import SvgIcon from './SvgIcon'; - -const Card = ({ idx, icon, title, description, url, btnText, colClass }) => { - return ( -
-
-
-
-
-
-
- -
-
-
-
-
-

- {title} -

-

- {description} -

-
-
- - {btnText} - -
-
-
-
- ); -}; - -export default Card; diff --git a/src/components/CustomersSection.js b/src/components/CustomersSection.js deleted file mode 100644 index 8946ad3..0000000 --- a/src/components/CustomersSection.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; - -import SvgIcon from './SvgIcon'; -import SectionLayout from './SectionLayout'; - -const customersList = [ - { - url: 'https://cal.com', - logo: require('../../static/img/customers/cal.svg').default, - quote: `It let our team focus on what we do best (democratizing scheduling for everyone) without getting distracted by the needs of our enterprise customers. Did I mention it's open-source and free?`, - }, - { - url: 'https://supertokens.com', - logo: require('../../static/img/customers/supertokens.svg').default, - quote: `We at SuperTokens needed to provide SAML login to our users, and instead of building it from scratch, we found the perfect open source project - BoxyHQ!`, - }, - { - url: 'https://www.salita.no', - logo: require('../../static/img/customers/salita.svg').default, - quote: `BoxyHQ helped us implement single sign-on for our government customers in record time, it was exactly what we were looking for. Absolute pleasure working with Deepak and the BoxyHQ team.`, - }, - { - url: 'https://www.unosecur.com', - logo: require('../../static/img/customers/unosecur.svg').default, - quote: `With BoxyHQ, we can focus on building our core product without worrying too much about the enterprise readiness features. The integration was seamless.`, - }, -]; - -const CustomersSection = () => { - return ( - -
- {customersList.map(({ quote, logo, url }, idx) => ( -
-
-
- -

- {quote} -

-
-
-
- ))} -
-
- ); -}; - -export default CustomersSection; diff --git a/src/components/DeveloperCommunitySection.js b/src/components/DeveloperCommunitySection.js deleted file mode 100644 index 0a45e9f..0000000 --- a/src/components/DeveloperCommunitySection.js +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; - -import SectionLayout from './SectionLayout'; - -const DeveloperCommunitySection = () => { - return ( - -
- - Follow on Twitter - - - Star on GitHub - - - Join Discord - -
-
- ); -}; - -export default DeveloperCommunitySection; diff --git a/src/components/FeatureSection.js b/src/components/FeatureSection.js deleted file mode 100644 index 3e17bcb..0000000 --- a/src/components/FeatureSection.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; - -import SvgIcon from './SvgIcon'; - -const FeatureSection = ({ - title, - image, - btnText, - btnLink, - direction = 'left', - children, -}) => { - return ( -
-
-
-
-
-
-
-

{title}

- {children ?
{children}
: null} - - {btnText} - -
-
-
-
-
-
-
- -
-
-
-
-
-
- ); -}; - -export default FeatureSection; diff --git a/src/components/GuideSection.js b/src/components/GuideSection.js deleted file mode 100644 index 6e4fb2b..0000000 --- a/src/components/GuideSection.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; -import ArrowIcon from '../../static/img/arrow.svg'; - -export default function GuideSection({ items }) { - return ( - <> - {items.map((item) => ( -
- -
- -

{item.name}

-
- -
- ))} - - ); -} diff --git a/src/components/HeroSection.js b/src/components/HeroSection.js deleted file mode 100644 index 17a8fe2..0000000 --- a/src/components/HeroSection.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; - -const HeroSection = ({ title, description, image, buttons, icon = null }) => { - const Icon = icon; - - return ( -
-
-
-
-
- {Icon && } -

{title}

-
-

{description}

-
- {buttons.map(({ href, title, className, onClick }, idx) => - onClick ? ( - - {title} - - ) : ( - - {title} - - ) - )} -
-
-
-
-
-
- -
-
-
-
-
- ); -}; - -export default HeroSection; diff --git a/src/components/HubSpotForm.js b/src/components/HubSpotForm.js deleted file mode 100644 index 3e5d944..0000000 --- a/src/components/HubSpotForm.js +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useEffect } from 'react'; - -const HubSpotForm = ({ region, portalId, formId }) => { - useEffect(() => { - const script = document.createElement('script'); - - script.src = 'https://js.hsforms.net/forms/shell.js'; - document.body.appendChild(script); - - script.addEventListener('load', () => { - if (window.hbspt) { - window.hbspt.forms.create({ - region, - portalId, - formId, - target: '#hubspotForm', - }); - } - }); - }, []); - - return ( -
-
Loading...
-
- ); -}; - -export const HubSpotPricingContactForm = ({ formId }) => { - if (!formId) return null; - - return ; -}; diff --git a/src/components/HubSpotFormSaaS.js b/src/components/HubSpotFormSaaS.js deleted file mode 100644 index a112f5f..0000000 --- a/src/components/HubSpotFormSaaS.js +++ /dev/null @@ -1,34 +0,0 @@ -import React, { useEffect } from 'react'; - -const HubSpotFormSaas = ({ region, portalId, formId }) => { - useEffect(() => { - const script = document.createElement('script'); - - script.src = 'https://js.hsforms.net/forms/embed/v2.js'; - document.body.appendChild(script); - - script.addEventListener('load', () => { - if (window.hbspt) { - window.hbspt.forms.create({ - region, - portalId, - formId, - target: '#hubspotForm', - }); - } - }); - }, []); - - return ( -
-
Loading...
-
- ); -}; - -export const HubSpotSaasContactForm = ({ formId }) => { - if (!formId) return null; - - return ; -}; - diff --git a/src/components/InvestorsSection.js b/src/components/InvestorsSection.js deleted file mode 100644 index 693fe8b..0000000 --- a/src/components/InvestorsSection.js +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; - -import SectionLayout from './SectionLayout'; - -const InvestorsList = [ - { - url: 'https://oss.capital', - logo: 'img/investors/ossc-logo.svg', - }, - { - url: 'https://nautacapital.com', - logo: 'img/investors/nauta-logo.png', - }, - { - url: 'https://mmc.vc', - logo: 'img/investors/mmc-logo.png', - }, - { - url: 'https://wayra.com', - logo: 'img/investors/wayra-logo.png', - }, -]; - -const InvestorsSection = () => { - return ( - -
- {InvestorsList.map(({ url, logo }, idx) => ( -
-
-
- - - -
-
-
- ))} -
-
- ); -}; - -export default InvestorsSection; diff --git a/src/components/Modal.js b/src/components/Modal.js deleted file mode 100644 index 98f11c4..0000000 --- a/src/components/Modal.js +++ /dev/null @@ -1,51 +0,0 @@ -import React from 'react'; -import ReactModal from 'react-modal'; - -const reactModalStyles = { - overlay: { - position: 'fixed', - top: '80px', - backgroundColor: 'rgb(78 78 78 / 75%)', - display: 'flex', - justifyContent: 'center', - }, - content: { - position: 'absolute', - border: '1px solid #ccc', - background: '#fff', - overflow: 'auto', - WebkitOverflowScrolling: 'touch', - borderRadius: '4px', - outline: 'none', - padding: '30px', - margin: 'auto', - }, -}; - -export const Modal = ({ children, title, opened, setOpened }) => { - return ( - -
-

- {title} -

- - {children} -
-
- ); -}; diff --git a/src/components/NewsSection.js b/src/components/NewsSection.js deleted file mode 100644 index 0d65122..0000000 --- a/src/components/NewsSection.js +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; - -import SvgIcon from './SvgIcon'; -import SectionLayout from './SectionLayout'; - -const NewsList = [ - { - title: 'BoxyHQ brings ‘enterprise readiness’ to any SaaS app', - url: 'https://venturebeat.com/2022/02/23/boxyhq-brings-enterprise-readiness-to-any-saas-app/', - logo: require('../../static/img/news/vb-logo.svg').default, - }, - { - title: - 'This tech startup helps SaaS companies make their products enterprise-ready', - url: 'https://yourstory.com/2022/03/boxyhq-tech-startup-helps-saas-companies-add-features-enterprise', - logo: require('../../static/img/news/yourstory-logo.svg').default, - }, -]; - -const NewsSection = () => { - return ( - -
- {NewsList.map(({ title, url, logo }, idx) => ( -
-
-
- -
-

{title}

-
-
- ))} -
-
- ); -}; - -export default NewsSection; diff --git a/src/components/Pricing/ContactUs.js b/src/components/Pricing/ContactUs.js deleted file mode 100644 index ba31153..0000000 --- a/src/components/Pricing/ContactUs.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; - -export const ContactUsBtn = ({ setOpened, setFormId, formId }) => { - return ( - { - setFormId(formId); - setOpened(true); - }} - className="button--link cursor" - > - Contact us - - ); -}; diff --git a/src/components/Pricing/Icons.js b/src/components/Pricing/Icons.js deleted file mode 100644 index ab62dc5..0000000 --- a/src/components/Pricing/Icons.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; - -export const IconYes = () => { - return ( - - - - ); -}; - -export const IconNo = () => { - return ( - - - - ); -}; diff --git a/src/components/Pricing/PricingSectionDesktop.js b/src/components/Pricing/PricingSectionDesktop.js deleted file mode 100644 index 9a3251f..0000000 --- a/src/components/Pricing/PricingSectionDesktop.js +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; - -import { pricingPlans } from './pricingPlans'; -import { TextToComponent } from './TextToComponent'; - -export const PricingSectionDesktop = ({ setOpened, setFormId }) => { - return ( -
- - - - - - - - - - - - {pricingPlans.map((pricingPlan) => { - return ( - - - - - - - - - {pricingPlan.lineBreak && ( - - - - )} - - ); - })} - -
Self-HostedSelf-Hosted PremiumSaaS (hosted by us)Enterprise
- {pricingPlan.feature} - - - - - - - - -
-
- ); -}; diff --git a/src/components/Pricing/PricingSectionMobile.js b/src/components/Pricing/PricingSectionMobile.js deleted file mode 100644 index 04cb56c..0000000 --- a/src/components/Pricing/PricingSectionMobile.js +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; - -import { pricingPlans } from './pricingPlans'; -import { TextToComponent } from './TextToComponent'; - -export const PricingSectionMobile = ({ setOpened, setFormId }) => { - return ( -
- - - - -
- ); -}; - -const PricingTableMobile = ({ title, tier, setOpened, setFormId }) => { - return ( - - - - - - - - {pricingPlans.map((pricingPlan) => ( - - - - - ))} - -
- {title} -
- {pricingPlan.feature} - - -
- ); -}; diff --git a/src/components/Pricing/TextToComponent.js b/src/components/Pricing/TextToComponent.js deleted file mode 100644 index 995e8ee..0000000 --- a/src/components/Pricing/TextToComponent.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; - -import { IconNo, IconYes } from './Icons'; -import { ContactUsBtn } from './ContactUs'; - -export const TextToComponent = ({ text, setOpened, setFormId }) => { - const parts = text.split(':'); - - const componentsMap = { - yes: , - no: , - contactUs: ( - - ), - }; - - return componentsMap[parts[0]] || {parts[0]}; -}; diff --git a/src/components/Pricing/pricingPlans.js b/src/components/Pricing/pricingPlans.js deleted file mode 100644 index de6fd46..0000000 --- a/src/components/Pricing/pricingPlans.js +++ /dev/null @@ -1,112 +0,0 @@ -export const pricingPlans = [ - { - feature: 'Premium features', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'yes', - saas: 'yes', - enterprise: 'yes', - }, - }, - { - feature: 'Admin Portal', - tiers: { - 'self-hosted': 'yes', - 'self-hosted-premium': 'yes', - saas: 'yes', - enterprise: 'yes', - }, - }, - { - feature: 'Discord Support', - tiers: { - 'self-hosted': 'yes', - 'self-hosted-premium': 'yes', - saas: 'yes', - enterprise: 'yes', - }, - }, - { - feature: 'Email and chat Support', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'yes', - saas: 'yes', - enterprise: 'yes', - }, - }, - { - feature: 'Phone support', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'yes', - saas: 'yes', - enterprise: 'yes', - }, - }, - { - feature: 'Custom deployment', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'yes', - saas: 'no', - enterprise: 'yes', - }, - }, - { - feature: 'Custom SLAs', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'no', - saas: 'no', - enterprise: 'yes', - }, - }, - { - feature: 'Dedicated infrastructure capacity', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'no', - saas: 'no', - enterprise: 'yes', - }, - }, - { - feature: 'Custom terms & contract', - tiers: { - 'self-hosted': 'no', - 'self-hosted-premium': 'no', - saas: 'no', - enterprise: 'yes', - }, - lineBreak: true, - }, - { - feature: 'Enterprise SSO & Directory Sync', - tiers: { - 'self-hosted': 'Free forever', - 'self-hosted-premium': - '$49 per SSO or Directory Sync connection (per month)', - saas: '$49 per SSO or Directory Sync connection (per month)', - enterprise: 'contactUs:435f5b51-f9ea-4f96-aac3-0c6e6d8a07b4', - }, - }, - { - feature: 'Audit logs', - tiers: { - 'self-hosted': 'Free forever', - 'self-hosted-premium': 'contactUs:3c3888d4-3f37-470a-8c7d-d7641f32fd4c', - saas: 'contactUs:7852e20a-1f97-42fc-b7ee-a1d71b331811', - enterprise: 'contactUs:57862df6-4456-4e0e-b9d0-aece2b23656f', - }, - }, - { - feature: 'Privacy Vault', - tiers: { - 'self-hosted': 'Free forever', - 'self-hosted-premium': 'contactUs:577e36d6-a5d6-4326-a179-d69c9d9ad520', - saas: 'contactUs:58302448-78e7-4250-8b12-8d84b4113c72', - enterprise: 'contactUs:24968c9d-ba22-492a-9aab-6f4350174d27', - }, - }, -]; diff --git a/src/components/ProductsSection.js b/src/components/ProductsSection.js deleted file mode 100644 index 2536b7d..0000000 --- a/src/components/ProductsSection.js +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; - -import Card from './Card'; -import SectionLayout from './SectionLayout'; - -const products = [ - { - title: 'Enterprise SSO', - description: - 'Add single sign on authentication into your product. Supports most identity providers via SAML 2.0', - url: '/enterprise-sso', - icon: require('../../static/img/products/saml-jackson/logo.svg').default, - }, - { - title: 'Directory Sync', - description: - 'Add Directory Sync support into your product to provision and de-provision users.', - url: '/directory-sync', - icon: require('../../static/img/products/dsync/logo.svg').default, - }, - { - title: 'Audit Logs', - description: - 'Add audit logs into your product with ease. Allow your customers to send security related events to their SIEM.', - url: 'audit-logs', - icon: require('../../static/img/products/audit-logs/logo.svg').default, - }, - { - title: 'Privacy Vault', - description: - 'Protect your customers sensitive data by safely encrypting it in a Privacy vault. Add policies to govern access to the protected data.', - url: 'privacy-vault', - icon: require('../../static/img/products/privacy-vault/logo.svg').default, - }, -]; - -const ProductsSection = () => { - return ( - -
- {products - .slice(0, 2) - .map(({ title, description, url, icon, btnText }, idx) => ( - - ))} -
-
- {products - .slice(2) - .map(({ title, description, url, icon, btnText }, idx) => ( - - ))} -
-
- ); -}; - -export default ProductsSection; diff --git a/src/components/Profile.js b/src/components/Profile.js deleted file mode 100644 index 05bda66..0000000 --- a/src/components/Profile.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import styles from './Profile.module.css'; - -export default function Profile({ - img, - name, - bio, - subtitle, - github, - linkedin, - twitter, -}) { - return ( -
-
-
- -
-
-
-
-

{name}

- {bio} -
- {subtitle} -
-

- - {github ? 'GitHub' : 'LinkedIn'} - {' '} - ·{' '} - - Twitter - -

-
-
-
-
-
- ); -} diff --git a/src/components/Profile.module.css b/src/components/Profile.module.css deleted file mode 100644 index c76b3ff..0000000 --- a/src/components/Profile.module.css +++ /dev/null @@ -1,8 +0,0 @@ -/* stylelint-disable docusaurus/copyright-header */ - -.center { - display: block; - margin-left: auto; - margin-right: auto; - width: 50%; -} diff --git a/src/components/SectionLayout.js b/src/components/SectionLayout.js deleted file mode 100644 index 9458c62..0000000 --- a/src/components/SectionLayout.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; - -const SectionLayout = ({ title, description, children, style, titleStyle }) => { - return ( -
-
-

- {title} -

- {description && ( -

- {description} -

- )} -
{children}
-
-
- ); -}; - -export default SectionLayout; diff --git a/src/components/SvgFeature.js b/src/components/SvgFeature.js deleted file mode 100644 index 2c03b67..0000000 --- a/src/components/SvgFeature.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './SvgFeature.module.css'; - -export default function SvgFeature({ - Svg, - png, - quote, - url, - colSize, - quotes, - title, - loading, -}) { - return ( -
- {Svg ? ( -
- - - -
- ) : png ? ( -
- - - -
- ) : null} - {quotes ? ( -
-

{quote}

-
- ) : null} -
-

- {url ? ( - - {title} - - ) : ( - title - )} -

-
-
- ); -} diff --git a/src/components/SvgFeature.module.css b/src/components/SvgFeature.module.css deleted file mode 100644 index 0adf848..0000000 --- a/src/components/SvgFeature.module.css +++ /dev/null @@ -1,14 +0,0 @@ -/* stylelint-disable docusaurus/copyright-header */ - -.svgFeature { - height: 50px; - width: 150px; -} - -.pngFeature { - width: 150px; -} - -.pFeature { - color: #444950; -} \ No newline at end of file diff --git a/src/components/SvgIcon.js b/src/components/SvgIcon.js deleted file mode 100644 index 901dac2..0000000 --- a/src/components/SvgIcon.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; - -const SvgIcon = ({ icon, url, size, className }) => { - const Icon = icon; - - return url ? ( - - - - ) : ( - - ); -}; - -export default SvgIcon; diff --git a/src/components/TitleHeader.js b/src/components/TitleHeader.js deleted file mode 100644 index 0fe9056..0000000 --- a/src/components/TitleHeader.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; - -export default function TitleHeader({ title }) { - return ( -
-

{title}

-
- ); -} diff --git a/src/css/custom.css b/src/css/custom.css index b653209..3680da6 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -7,7 +7,7 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: #25c2a0; + --ifm-color-primary: #466aff; --ifm-color-primary-dark: rgb(33, 175, 144); --ifm-color-primary-darker: rgb(31, 165, 136); --ifm-color-primary-darkest: rgb(26, 136, 112); @@ -15,194 +15,129 @@ --ifm-color-primary-lighter: rgb(102, 212, 189); --ifm-color-primary-lightest: rgb(146, 224, 208); --ifm-code-font-size: 95%; - --ifm-navbar-height: 5rem; - - --aa-input-border-color-rgb: 190, 195, 201 !important; - --aa-selected-color-rgb: 141, 148, 158 !important; - --aa-muted-color-rgb: 37, 194, 160 !important; - --aa-primary-color-rgb: 37, 194, 160 !important; } - -body[data-theme='dark'] { - --aa-input-border-color-rgb: 190, 195, 201 !important; - --aa-background-color-rgb: 27, 27, 29 !important; - --aa-selected-color-rgb: 190, 195, 201 !important; - --aa-muted-color-rgb: 37, 194, 160 !important; - --aa-primary-color-rgb: 37, 194, 160 !important; +.navbar{ + background-color: rgba(27, 36, 64, 1); +} +.navbar__link--active,a:hover,.menu__link--active{ + color: rgba(70, 106, 255, 1)!important; +} +.navbar__link{ + color: #fff; +} +.table-of-contents__link--active{ + color: #466aff; +} +html[data-theme=light] .menu{ + background-image:linear-gradient(180deg,#f3f5f8 0%,#ffffff 100%); + box-shadow:8px 6px 18px rgba(171, 202, 255, 0.24) inset; + margin-bottom: 0px!important; } - .docusaurus-highlight-code-line { - background-color: rgb(72, 77, 91); + background-color: rgba(0, 0, 0, 0.1); display: block; margin: 0 calc(-1 * var(--ifm-pre-padding)); padding: 0 var(--ifm-pre-padding); } -.navbar__brand { - height: 3.5rem; +html[data-theme='dark'] .docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.3); } - -/* GitHub */ -.header-github-link:hover { - opacity: 0.6; +.footer{ + height: 473px; + position: relative; + background: #1e1e1e; } - -.header-github-link:before { - content: ''; - width: 24px; - height: 24px; +.container{ + height: 100%; display: flex; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; + flex-direction: column; + justify-content: space-around; } - -html[data-theme='dark'] .header-github-link:before { - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; -} - -.card { - border: 1px solid #333; - box-shadow: none; - border-radius: 5px; - text-decoration: none !important; - color: var(--ifm-color-content); -} - -.markdown h1:first-child { - --ifm-h1-font-size: 2.3rem; -} - -/* v2 CSS */ - -.intro__buttons { - display: flex; - flex-wrap: wrap; - gap: 1rem; -} - -.page__section { - border-top: 1px solid var(--ifm-color-emphasis-200); - width: 100%; - padding: 40px 10px 40px; -} - -.red { - border: 1px solid red; -} - -.section__header { - font-size: 30px; - margin: 0%; -} - -.card__description { - font-size: 14px; -} - -.card { - border: 1px solid #e3dbdb !important; -} - -.hero__title { - font-size: 2.25rem; - margin: 0%; -} - -.hero__subtitle { - font-size: 1.25rem; -} - -.hero__image { - display: none; - justify-content: center; -} - -.product__dropdown__link { - display: flex; - align-items: center; - column-gap: 5px; -} - -.center { - display: flex; - justify-content: center; - flex-wrap: wrap; -} - -.cursor { - cursor: pointer; -} - -/* Pricing page */ - -.pricing__table { - width: 100%; - display: inline-table !important; - table-layout: fixed; - margin-top: 20px; - border: 1px solid #f1f3f5; -} - -.pricing__table td, -.pricing__table th { - padding: 10px; - text-align: center; - border: 1px solid #f1f3f5; - border-left: 0px; - border-right: 0px; -} - -.pricing__table tr, -.pricing__table tr:nth-child(2n) { - background: none; -} - -.pricing__section__desktop { - display: none; -} - -.pricing__table .highlight { - background: rgb(37 194 160 / 31%); -} - -.modal__close__btn { +.footer__bottom .margin-bottom--sm{ position: absolute; - top: 10px; - right: 10px; - border: none; - background: transparent; - font-size: 25px; - cursor: pointer; + margin-top: -150px; + top:50% } - -/* Override "react-model" container width */ -.ReactModal__Content { - width: 80%; +.footer__links .footer__title{ + height: 25px; + font-size: 18px; + font-weight: 600; + color: #fff; + line-height: 25px; + margin-bottom: 20px; } - -/* Mobile view */ - -@media screen and (min-width: 996px) { - .row.is-multiline .col { - margin-top: var(--ifm-spacing-horizontal) !important; - margin-bottom: var(--ifm-spacing-horizontal) !important; - } - - .hero__image { - display: flex; - } - - .pricing__section__desktop { - display: block; - } - - .pricing__section__mobile { - display: none; - } - - .ReactModal__Content { - width: 500px; - height: 550px; - } +.footer__links .footer__col:last-child .footer__items:last-child{ + display: flex; + flex-wrap: wrap; } +.footer__links .footer__col:last-child .footer__items:last-child .footer__item{ + width: 50%; +} +.footer__links .footer__col:last-child .footer__items:last-child .footer__item:nth-child(2){ + background-image: url(../../static/img/gitlink-qq.png); + background-size: 100% 100%; + height: 90px; + width: 90px; + background-color: #fff; + border-radius: 4px; + position: relative; +} +.footer__links .footer__col:last-child .footer__items:last-child .footer__item:nth-child(3){ + background-image: url(../../static/img/gongzhong.png); + background-size: 100% 100%; + height: 90px; + width: 90px; + background-color: #fff; + border-radius: 4px; + position: relative; + margin-left: 34px; +} +.footer__links .footer__col:last-child .footer__items:last-child .footer__item:nth-child(2) a, +.footer__links .footer__col:last-child .footer__items:last-child .footer__item:nth-child(3) a{ + position: absolute; + top: 95px; + left: 50%; + margin-left: -17px; +} +.footer__links .footer__col:last-child .footer__items:last-child .footer__item:first-child{ + width: 100%; +} +.container .footer__links{ + margin-left: 420px; +} +.container .footer__links .footer__col .footer__item{ + color: #bdc2d1; + font-size: 14px; + font-weight: 400; + line-height: 20px; + height: 20px; + margin-bottom: 15px; +} +.footer__bottom .margin-bottom--sm img{ + width: 300px; + max-width: unset; +} +.container .footer__copyright{ + position: absolute; + width: 100%; + left: 0px; + font-size: 12px; + font-weight: 400; + color: #bdc2d1; + line-height: 28px; + padding: 15px 0; + text-align: center; + background-color: #1b212c; +} +.container .footer__copyright p{ + margin-bottom: 0px!important; +} +.aa-Form{ + width: unset; + flex:1; +} +.widget{ + display: none!important; + opacity: 0; +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/_index.js similarity index 97% rename from src/pages/index.js rename to src/pages/_index.js index 670f1ce..6008f30 100644 --- a/src/pages/index.js +++ b/src/pages/_index.js @@ -37,8 +37,8 @@ const IndexPage = () => { ]} /> - - + {/* + */}
@@ -139,9 +139,9 @@ const IndexPage = () => {

- + {/* - + */} ); }; diff --git a/src/pages/audit-logs.js b/src/pages/audit-logs.js deleted file mode 100644 index c3036b5..0000000 --- a/src/pages/audit-logs.js +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; - -import HeroSection from '../components/HeroSection'; -import FeatureSection from '../components/FeatureSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; - -const title = 'Audit Logs'; -const description = - 'With BoxyHQ’s Audit Logs we have created the easiest way for you to integrate compliant audit logs into your application'; -const ProductIcon = - require('../../static/img/products/audit-logs/logo.svg').default; - -const Icon1 = - require('../../static/img/products/audit-logs/cloud_docs.svg').default; - -const Icon2 = - require('../../static/img/products/audit-logs/reviewed_docs.svg').default; - -const Icon3 = - require('../../static/img/products/audit-logs/export_files.svg').default; - -const AuditLogs = () => { - return ( - - - - -

- With Audit Logs by BoxyHQ, you provide enterprise customers with the - ability to record and search events that happen on your application. - With our simple integration, you can become compliant fast and save - your team from building complex solutions from scratch. -

-
- - -

- For all companies but in particular large companies, the ability to - monitor the flow of data and be alerted to any breaches is essential. - Audit logs help to pinpoint any misuse of information and ensure that - data policies are followed. Many larger enterprise customers will - demand this as a requirement if you plan to sell to them. -

-
- - -

- Our out-the-box solution is designed not only to make you compliant - but give your customers all the functionality and safety they need - - exportable, immutable, time synced and searchable audit logs. -

-
- - - - -
- ); -}; - -export default AuditLogs; diff --git a/src/pages/boxyhq-vs-workos.js b/src/pages/boxyhq-vs-workos.js deleted file mode 100644 index b502c2e..0000000 --- a/src/pages/boxyhq-vs-workos.js +++ /dev/null @@ -1,227 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; - -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; -import SectionLayout from '../components/SectionLayout'; -import { IconNo, IconYes } from '../components/Pricing/Icons'; - -const title = 'BoxyHQ vs WorkOS'; -const description = - 'BoxyHQ is a flexible, secure, open-source alternative to WorkOS that brings enterprise readiness capabilities to your SaaS applications. It integrates with your tech stack no matter how bespoke.'; - -const AuditLogs = () => { - return ( - -
-
-
-
-
-

{title}

-
-

{description}

-
-
-
-
- - {/* Section 1 */} -
-
-
-
-
-
-
-
-

Your product, your rules

-

- Make your app enterprise-ready, with just a few lines of - code. Through its open-source approach, BoxyHQ’s users - are free to make any customizations and changes to their - features, while also avoiding vendor lock-in. -

-
-
-
-
-
-
-
-
-
-
-

Resource efficient

-

- Instead of paying thousands of dollars for the large - number of connections that your app will have, use - BoxyHQ's free open-source solution. Allocate resources - to your core value proposition and maximize the benefits - for your customers. -

-
-
-
-
-
-
-
-
- - {/* Section 2 */} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BoxyHQWorkOS
LicenseOpen SourceProprietary
Enterprise SSO - - - -
Directory Sync - - - -
Audit Logs - - - -
Data Privacy Vault - - - -
Admin Portal - - - -
Custom deployment - - - -
Self-Hosted & SaaSSaaS
-
- - {/* Section 3 */} - -
-
-
-
-
-
-
-
    -
  • -
    - Contribute to BoxyHQ and build your own - integrations and customizations -
    -
  • -
  • -
    - Check BoxyHQ’s GitHub repositories -
    -
  • -
  • -
    - Interested in Developer Security? Join - our Discord community -
    -
  • -
-
-
-
-
-
-
-
-
- - -
- ); -}; - -export default AuditLogs; diff --git a/src/pages/directory-sync.js b/src/pages/directory-sync.js deleted file mode 100644 index ec11677..0000000 --- a/src/pages/directory-sync.js +++ /dev/null @@ -1,97 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; - -import HeroSection from '../components/HeroSection'; -import FeatureSection from '../components/FeatureSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; - -const title = 'Directory Sync'; -const description = - 'One simple integration to automate user and group provisioning. Supports SCIM 2.0 protocol for most major providers'; - -const ProductIcon = require('../../static/img/products/dsync/logo.svg').default; - -const Icon1 = - require('../../static/img/products/dsync/meet_the_team.svg').default; - -const Icon2 = - require('../../static/img/products/dsync/data_points.svg').default; - -const DSync = () => { - return ( - - - - -

- Enterprise customers already use directories to manage user access. By - allowing them to use their active directory in your product you enable - them to have higher security standards and centrally manage their - user's access lifecycle. With Directory Sync by BoxyHQ, you can enable - this with our simple API. -

-
- - -

-

- With our simple integration, you can enable directory sync in your - application in days instead of months and seamlessly connect to - almost any directory service. With our API you can: -

-

- Custom Mapping -

- Easily fetch in the attributes that you need to use and map them - against the data you need. -

- Bespoke requests -

- Fetch and manipulate data from different entities as you need. -

- Streamline Data -

- Access data and integrate it seamlessly so you can standardize it - across the board -

-

-
- - - - -
- ); -}; - -export default DSync; diff --git a/src/pages/enterprise-readiness.js b/src/pages/enterprise-readiness.js deleted file mode 100644 index faf5b52..0000000 --- a/src/pages/enterprise-readiness.js +++ /dev/null @@ -1,136 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; - -import NewsSection from '../components/NewsSection'; -import HeroSection from '../components/HeroSection'; -import ProductsSection from '../components/ProductsSection'; -import InvestorsSection from '../components/InvestorsSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; - -const title = 'BoxyHQ for Startups'; -const description = - 'Enterprise readiness for B2B SaaS startups, straight out of the box'; - -const EnterpriseReadiness = () => { - return ( - - - - - - -
-
-
-
-
-
-
-
-

- Become Enterprise Ready -

-
-
-

- As a startup you need to build fast, test and make sure - your solution achieves product-market fit. But if you - are planning to sell to enterprises you will need to - implement security and compliance features that could be - expensive and time consuming. -

-

- Here is a good guide on what becoming enterprise ready - means:{' '} - - EnterpriseReady - Build SaaS features enterprises love - -

-
-
- - Book a free enterprise-readiness session - -
-
-
-
-
-
-
-
-
-
-

- Build or buy? -

-
-
-

- Save time and money with BoxyHQ's free open-source - solution. Available under an Apache 2.0 license, our - solutions make it easy for developers to collaborate and - innovate, without the need for custom building or - expensive fees. -

-

- Our solutions run in your environment, giving you full - control. We simply provide the building blocks to help - you succeed. -

-
-
- - Contact Us - -
-
-
-
-
-
-
-
- - - - -
- ); -}; - -export default EnterpriseReadiness; diff --git a/src/pages/enterprise-sso.js b/src/pages/enterprise-sso.js deleted file mode 100644 index 6bdb5c7..0000000 --- a/src/pages/enterprise-sso.js +++ /dev/null @@ -1,169 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -import HeroSection from '../components/HeroSection'; -import FeatureSection from '../components/FeatureSection'; -import BenefitsSection from '../components/BenefitsSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; -import SectionLayout from '../components/SectionLayout'; - -const title = 'Quickly integrate Enterprise SSO'; -const description = - 'Save hundreds of development hours by easily integrating SSO into your SaaS app. Our solution supports SAML & OIDC.'; - -const ProductIcon = - require('../../static/img/products/saml-jackson/logo.svg').default; - -const Icon1 = - require('../../static/img/products/saml-jackson/connected_world.svg').default; - -const Icon2 = - require('../../static/img/products/saml-jackson/time_management.svg').default; - -const Icon3 = - require('../../static/img/products/saml-jackson/building.svg').default; - -const benefits = [ - { - title: 'Improved Security', - description: `By deploying SAML SSO, you can enable your customers to manage - access control on their own systems. This helps prevent password sharing, - ensures that staff have the correct access, and allows them to easily grant - and revoke access from a central location.`, - icon: require('../../static/img/products/icons/security.svg').default, - }, - { - title: 'Enhanced user experience', - description: `Improving the login experience is crucial for providing a good - user experience. By allowing your customers to log in to your product via - their IdP dashboard with a single click, you can significantly improve their - experience with your product.`, - icon: require('../../static/img/products/icons/futuristic_interface.svg') - .default, - }, - { - title: 'Reduced costs', - description: `In addition to the cost savings of using an out-of-the-box - solution instead of building a custom version, implementing SAML can also - save you money by eliminating the need to maintain account information - across multiple services. With SAML, this is all managed by the IdP.`, - icon: require('../../static/img/products/icons/savings.svg').default, - }, -]; - -const EnterpriseSSO = () => { - return ( - - - - -
-
-
- - - Without BoxyHQ - - - With BoxyHQ - - -
-
-
-
- - -

- Our open-source solution makes it easy to deploy Enterprise SSO with a - simple integration that connects to all Identity Providers. You can - integrate with our product using just a few lines of code. -

-

- Since our solution is self-hosted, you maintain complete control over - your data. -

-
- - -

- Creating a custom SAML or OpenID Connect integration for each IdP can - be very time-consuming and require a significant amount of resources. - This can lead to months of development time spent building custom - integrations for each IdP your customers use. -

-

- Our SSO solution allows you to go from the first line of code to - deployment in just a few days, saving you time and effort. Plus, we - offer custom integration support to help you every step of the way.{' '} -

-
- - -

- Most enterprises already use an IdP, so they prefer solution providers - with an Enterprise SSO integration. This is because they are already - using SAML or OpenID Connect for access management and security, so - anything outside of this workflow will be inconvenient for them. -

-
- - - - - - -
- ); -}; - -export default EnterpriseSSO; diff --git a/src/pages/oss-friends.js b/src/pages/oss-friends.js deleted file mode 100644 index 536a85e..0000000 --- a/src/pages/oss-friends.js +++ /dev/null @@ -1,155 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; -import TitleHeader from '../components/TitleHeader'; - -const title = 'Our Open-source Friends'; -const description = 'Open-source projects and tools for an open world.'; - -const friends = [ - { - name: 'Cal.com', - description: - 'Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.', - href: 'https://cal.com', - }, - { - name: 'Crowd.dev', - description: - 'Centralize community, product, and customer data to understand which companies are engaging with your open source project.', - href: 'https://www.crowd.dev', - }, - { - name: 'Documenso', - description: - 'The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.', - href: 'https://documenso.com', - }, - { - name: 'Erxes', - description: - 'The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences ​​that work for all types of business.', - href: 'https://erxes.io', - }, - { - name: 'Formbricks', - description: - 'Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.', - href: 'https://formbricks.com', - }, - { - name: 'GitWonk', - description: - 'GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.', - href: 'https://gitwonk.com', - }, - { - name: 'Hanko', - description: - 'Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.', - href: 'https://www.hanko.io', - }, - { - name: 'HTMX', - description: - 'HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.', - href: 'https://htmx.org', - }, - { - name: 'Infisical', - description: - 'Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.', - href: 'https://infisical.com', - }, - { - name: 'Novu', - description: - 'The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.', - href: 'https://novu.co', - }, - { - name: 'OpenBB', - description: - 'Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.', - href: 'https://openbb.co', - }, - { - name: 'Sniffnet', - description: - 'Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.', - href: 'https://www.sniffnet.net', - }, - { - name: 'Typebot', - description: - 'Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.', - href: 'https://typebot.io', - }, - { - name: 'Webiny', - description: - 'Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.', - href: 'https://www.webiny.com', - }, - { - name: 'Webstudio', - description: 'Webstudio is an open source alternative to Webflow', - href: 'https://webstudio.is', - }, -]; - -const OSSFriends = () => { - return ( - -
- -
-
- {friends.length > 0 && - Array.from({ length: Math.ceil(friends.length / 3) }, (_, i) => ( -
- {friends.slice(i * 3, (i + 1) * 3).map((friend) => ( -
-
-
-
-
-

- {friend.name} -

-
-
- {friend.description} -
-
- - Learn More - -
-
-
-
-
- ))} -
- ))} -
-
-
-
- ); -}; - -export default OSSFriends; diff --git a/src/pages/pledge.js b/src/pages/pledge.js deleted file mode 100644 index 1bb6b92..0000000 --- a/src/pages/pledge.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import TitleHeader from '../components/TitleHeader'; - -const title = 'BoxyHQ pledges to keep our core open-source code open'; -const description = 'BoxyHQ pledges to keep our core open-source code open'; - -function Team() { - return ( - -
- -

- As long-time users and contributors to the open-source ecosystem, we - want to do the right thing for the community. That means we will make - sure that our core open-source code stays open. We will also strive to - use open standards where possible. We want to collaborate with the - community to build towards our vision to make security, compliance and - privacy easy for developers so they can focus on their core product - while being compliant. -

-

- BoxyHQ will need to have a viable way of making money soon since we - are a commercial company at the end of the day. But we’d like to do - this without having to do things that alienate our community, like - removing or blocking previously free and open features. We will - separate the Enterprise features from the open features with - intentionality, transparency and community inclusion in our - decision-making logic – focused on building Enterprise products that - are built to address complex, production-sensitive requirements, and - keeping the vast majority of end-user empowering capabilities in the - upstream open-source project. We will also do our best to be - transparent about which features are free and open source, and which - are not. -

-

- Of course, open-source code sometimes becomes obsolete. So, it can - stay open source but not viable. If we ever need to stop maintaining a - release of our open-source code, we will work with the community to - transition it to another maintainer. But in any case, we won’t stop - maintaining our open-source code without giving the community - reasonable notice of the transition. And we will do our best to - maintain backward compatibility for our enterprise features for a - reasonable lifespan. -

-

- We hope this pledge will give you peace of mind when using our - technologies. We do not want to put you at risk of becoming locked in - with us. We instead want you to happily and thoughtfully choose to - join our community, contribute to our projects, use our technologies, - and also buy from us in the future because of the value we provide and - not out of compulsion because you were left with no other choice. -

-

Sincerely,

-

The BoxyHQ Team

- -

- - * Inspired by{' '} - Ferymon - -

- - * Thanks to JJ and Heather from OSS Capital for reviewing drafts of - this post - -

-
-
- ); -} -export default Team; diff --git a/src/pages/pricing.js b/src/pages/pricing.js deleted file mode 100644 index e1b9146..0000000 --- a/src/pages/pricing.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useState } from 'react'; -import Layout from '@theme/Layout'; - -import { Modal } from '../components/Modal'; -import { HubSpotPricingContactForm } from '../components/HubSpotForm'; -import { PricingSectionDesktop } from '../components/Pricing/PricingSectionDesktop'; -import { PricingSectionMobile } from '../components/Pricing/PricingSectionMobile'; - -const title = 'Pricing for teams and companies of all sizes'; -const description = - 'BoxyHQ is proudly open-source and all of our solutions are available to self-host for free.'; - -const Pricing = () => { - const [opened, setOpened] = useState(false); - const [formId, setFormId] = useState(''); - - return ( - -
-

{title}

-

- {description} -

- - -
- - - -
- ); -}; - -export default Pricing; diff --git a/src/pages/privacy-vault.js b/src/pages/privacy-vault.js deleted file mode 100644 index f137b08..0000000 --- a/src/pages/privacy-vault.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; - -import HeroSection from '../components/HeroSection'; -import FeatureSection from '../components/FeatureSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; -import SectionLayout from '../components/SectionLayout'; - -const title = 'Data Privacy Vault'; -const description = - "Protect your customer's data and your customer's trust with an open-source solution that keeps your data safe."; - -const ProductIcon = - require('../../static/img/products/privacy-vault/logo.svg').default; - -const Icon1 = - require('../../static/img/products/privacy-vault/hacker_mind.svg').default; - -const Icon2 = - require('../../static/img/products/privacy-vault/security.svg').default; - -const PrivacyVault = () => { - return ( - - - - -

- Companies like yours are collecting more and more sensitive data these - days and with cybercrime at an all-time high, customers are more - worried than ever about how their data is secured. GDPR was a big step - in how customers' data is collected and used, but safeguarding this - data is ultimately what your customers are most worried about. -

-
- - -
-
-
-
-

- Taking the best practices from companies like Google, Apple - and Facebook who have internally built privacy data vaults, - BoxyHQ offers an open-source solution to centralize, isolate - and govern all the sensitive data you collect. -

-

With our Privacy Vault you can:

-
    -
  • - Identify and store all sensitive data from their application - database and move it to the vault -
  • -
  • - Replace the sensitive data in their application database - with opaque tokens that can then be exchanged with the - actual data from the vault at the point it's really needed -
  • -
  • - Gain control over where the sensitive data goes and who has - access to it and for how long -
  • -
  • - Create access policies that adhere to data regulations and - geographic regulations -
  • -
  • - Be equipped with the ability to respond to DSRs (Data - Subject Requests) from customers -
  • -
  • Create Healthcare, Fintech or generic PII vaults
  • -
-
-
-
-
-
- - -

- By using a privacy vault even if you were attacked the hacker would - only gain access to opaque identifiers. The hacker would have then to - attach both your vault and your key store to successfully decrypt the - opaque tokens they possess. -

-

- Apart from this, you get full governance over who has access to the - sensitive data and for how long, this simplifies all sorts of - compliance certifications and regulations like GDPR, PCI, HIPAA, ISO - 27001, SOC2, etc. -

-
- - - - -
- ); -}; - -export default PrivacyVault; diff --git a/src/pages/privacy.html.js b/src/pages/privacy.html.js deleted file mode 100644 index 89723dd..0000000 --- a/src/pages/privacy.html.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import { useColorMode } from '@docusaurus/theme-common'; - -const title = ''; -const description = 'Privacy & Cookies Policy'; - -const IFrame = () => { - const { colorMode } = useColorMode(); - - return ( - - ); -}; - -function Privacy() { - if (typeof window !== 'undefined') { - window.addEventListener( - 'message', - (event) => { - if (event.data) { - const { message, contentHeight } = event.data; - if (message === 'Updating content height') { - var _doc = document.getElementById('privacy-policy-iframe'); - if (!_doc) return false; - _doc.style.height = contentHeight; - } - } - }, - false - ); - } - - return ( - -
- -
-
- ); -} -export default Privacy; diff --git a/src/pages/saas-registration.js b/src/pages/saas-registration.js deleted file mode 100644 index 4871a71..0000000 --- a/src/pages/saas-registration.js +++ /dev/null @@ -1,180 +0,0 @@ -import React, { useState } from 'react'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import clsx from 'clsx'; -import { Modal } from '../components/Modal'; -import { HubSpotSaasContactForm } from '../components/HubSpotFormSaaS'; -import NewsSection from '../components/NewsSection'; -import HeroSection from '../components/HeroSection'; -import InvestorsSection from '../components/InvestorsSection'; -import CustomersSection from '../components/CustomersSection'; -import DeveloperCommunitySection from '../components/DeveloperCommunitySection'; -import SectionLayout from '../components/SectionLayout'; - -const title = 'BoxyHQ for Startups'; -const description = 'SaaS Signup'; - -const SaasRegistration = () => { - const [opened, setOpened] = useState(false); - const [formId, setFormId] = useState('05572d01-d7b6-4a83-b654-2e6135b95bd'); - - return ( - - { - setFormId(formId); - setOpened(true); - }, - className: 'button--primary', - }, - ]} - /> - - -
-
-
-
-
    -
  • - Reduce time to market: Build and ship - enterprise-grade products -
  • -
  • - Cost Savings: Save money optimizing development costs -
  • -
  • - Develop secure applications: Our APIs integrate - security best practices into your development process -
  • -
  • - Enhanced Efficiency: With an intuitive interface and - powerful features, businesses can automate tasks, optimize - workflows, and maximize efficiency -
  • -
  • - Full Support: BoxyHQ is committed to providing - exceptional support to its customers, ensuring a smooth - onboarding process and continued assistance throughout their - journey -
  • -
  • - Advanced Security: BoxyHQ prioritizes data security, - employing robust measures to safeguard sensitive information - and ensure peace of mind -
  • -
  • - Seamless Integrations: Integrate with the most - popular SSO providers such as Okta, Azure AD, Auth0, Google - and more -
  • -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-

- Special Offer -

-
-
-

- To celebrate the launch, we are offering an exclusive - opportunity to join the waitlist for the SaaS platform - and enjoy a remarkable 50% off the first year's - subscription. By signing up before August 1, businesses - can take advantage of this limited-time offer and unlock - the full potential of our solution. -

-
- -
-
-
-
-
-
-
-
-
-

- Join the Pre-Launch Waitlist -

-
-
-

- To secure your spot and claim this irresistible offer, - interested businesses are encouraged to fill out the - form. Simply provide your Name, Email, Product of - interest, and potential date of implementation. Don't - miss out on this opportunity to transform your business! -

-
- -
-
-
-
-
-
-
- - - - - - - - - -
- ); -}; - -export default SaasRegistration; diff --git a/src/pages/team.js b/src/pages/team.js deleted file mode 100644 index d28fa94..0000000 --- a/src/pages/team.js +++ /dev/null @@ -1,91 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import Profile from '../components/Profile'; -import TitleHeader from '../components/TitleHeader'; - -const title = 'Team'; -const description = - 'At BoxyHQ we are a diverse team of individuals from all over the world who share a passion for building a simpler and more open way to be enterprise-ready.'; - -function Team() { - return ( - -
- -
-
- - - -
- - - -
-
- -
-
- - -
- - -
-
- -
-
- -
- - -
-
-
-
- ); -} -export default Team; diff --git a/static/img/Issue/imageIssue1.png b/static/img/Issue/imageIssue1.png new file mode 100644 index 0000000..a976ec9 Binary files /dev/null and b/static/img/Issue/imageIssue1.png differ diff --git a/static/img/Issue/imageIssue2.png b/static/img/Issue/imageIssue2.png new file mode 100644 index 0000000..ed564aa Binary files /dev/null and b/static/img/Issue/imageIssue2.png differ diff --git a/static/img/Issue/imageIssue3.png b/static/img/Issue/imageIssue3.png new file mode 100644 index 0000000..25c9062 Binary files /dev/null and b/static/img/Issue/imageIssue3.png differ diff --git a/static/img/Issue/imageIssue4.png b/static/img/Issue/imageIssue4.png new file mode 100644 index 0000000..4447767 Binary files /dev/null and b/static/img/Issue/imageIssue4.png differ diff --git a/static/img/Issue/imageIssue5.png b/static/img/Issue/imageIssue5.png new file mode 100644 index 0000000..6e771c3 Binary files /dev/null and b/static/img/Issue/imageIssue5.png differ diff --git a/static/img/Org/imageOrg1.png b/static/img/Org/imageOrg1.png new file mode 100644 index 0000000..a852d8b Binary files /dev/null and b/static/img/Org/imageOrg1.png differ diff --git a/static/img/Org/imageOrg10.png b/static/img/Org/imageOrg10.png new file mode 100644 index 0000000..228e1fb Binary files /dev/null and b/static/img/Org/imageOrg10.png differ diff --git a/static/img/Org/imageOrg11.png b/static/img/Org/imageOrg11.png new file mode 100644 index 0000000..9fc91da Binary files /dev/null and b/static/img/Org/imageOrg11.png differ diff --git a/static/img/Org/imageOrg12.png b/static/img/Org/imageOrg12.png new file mode 100644 index 0000000..1cb8f31 Binary files /dev/null and b/static/img/Org/imageOrg12.png differ diff --git a/static/img/Org/imageOrg13.png b/static/img/Org/imageOrg13.png new file mode 100644 index 0000000..55170cd Binary files /dev/null and b/static/img/Org/imageOrg13.png differ diff --git a/static/img/Org/imageOrg2.png b/static/img/Org/imageOrg2.png new file mode 100644 index 0000000..b89939e Binary files /dev/null and b/static/img/Org/imageOrg2.png differ diff --git a/static/img/Org/imageOrg3.png b/static/img/Org/imageOrg3.png new file mode 100644 index 0000000..876a1d5 Binary files /dev/null and b/static/img/Org/imageOrg3.png differ diff --git a/static/img/Org/imageOrg4.png b/static/img/Org/imageOrg4.png new file mode 100644 index 0000000..1b216b6 Binary files /dev/null and b/static/img/Org/imageOrg4.png differ diff --git a/static/img/Org/imageOrg5.png b/static/img/Org/imageOrg5.png new file mode 100644 index 0000000..768a963 Binary files /dev/null and b/static/img/Org/imageOrg5.png differ diff --git a/static/img/Org/imageOrg6.png b/static/img/Org/imageOrg6.png new file mode 100644 index 0000000..5d284c2 Binary files /dev/null and b/static/img/Org/imageOrg6.png differ diff --git a/static/img/Org/imageOrg7.png b/static/img/Org/imageOrg7.png new file mode 100644 index 0000000..a947ea6 Binary files /dev/null and b/static/img/Org/imageOrg7.png differ diff --git a/static/img/Org/imageOrg8.png b/static/img/Org/imageOrg8.png new file mode 100644 index 0000000..463ad91 Binary files /dev/null and b/static/img/Org/imageOrg8.png differ diff --git a/static/img/Org/imageOrg9.png b/static/img/Org/imageOrg9.png new file mode 100644 index 0000000..9753d84 Binary files /dev/null and b/static/img/Org/imageOrg9.png differ diff --git a/static/img/PR/imagePR1.png b/static/img/PR/imagePR1.png new file mode 100644 index 0000000..48a38b8 Binary files /dev/null and b/static/img/PR/imagePR1.png differ diff --git a/static/img/PR/imagePR10.png b/static/img/PR/imagePR10.png new file mode 100644 index 0000000..95c83de Binary files /dev/null and b/static/img/PR/imagePR10.png differ diff --git a/static/img/PR/imagePR11.png b/static/img/PR/imagePR11.png new file mode 100644 index 0000000..b69b43f Binary files /dev/null and b/static/img/PR/imagePR11.png differ diff --git a/static/img/PR/imagePR12.png b/static/img/PR/imagePR12.png new file mode 100644 index 0000000..03762cc Binary files /dev/null and b/static/img/PR/imagePR12.png differ diff --git a/static/img/PR/imagePR13.png b/static/img/PR/imagePR13.png new file mode 100644 index 0000000..1de38d0 Binary files /dev/null and b/static/img/PR/imagePR13.png differ diff --git a/static/img/PR/imagePR14.png b/static/img/PR/imagePR14.png new file mode 100644 index 0000000..f8a2ae7 Binary files /dev/null and b/static/img/PR/imagePR14.png differ diff --git a/static/img/PR/imagePR15.png b/static/img/PR/imagePR15.png new file mode 100644 index 0000000..445b8e0 Binary files /dev/null and b/static/img/PR/imagePR15.png differ diff --git a/static/img/PR/imagePR2.png b/static/img/PR/imagePR2.png new file mode 100644 index 0000000..5ff7705 Binary files /dev/null and b/static/img/PR/imagePR2.png differ diff --git a/static/img/PR/imagePR3.png b/static/img/PR/imagePR3.png new file mode 100644 index 0000000..7b57eae Binary files /dev/null and b/static/img/PR/imagePR3.png differ diff --git a/static/img/PR/imagePR4.png b/static/img/PR/imagePR4.png new file mode 100644 index 0000000..4c40359 Binary files /dev/null and b/static/img/PR/imagePR4.png differ diff --git a/static/img/PR/imagePR5.png b/static/img/PR/imagePR5.png new file mode 100644 index 0000000..eee1815 Binary files /dev/null and b/static/img/PR/imagePR5.png differ diff --git a/static/img/PR/imagePR6.png b/static/img/PR/imagePR6.png new file mode 100644 index 0000000..b0f9d27 Binary files /dev/null and b/static/img/PR/imagePR6.png differ diff --git a/static/img/PR/imagePR7.png b/static/img/PR/imagePR7.png new file mode 100644 index 0000000..b9f1ffb Binary files /dev/null and b/static/img/PR/imagePR7.png differ diff --git a/static/img/PR/imagePR8.png b/static/img/PR/imagePR8.png new file mode 100644 index 0000000..880b36d Binary files /dev/null and b/static/img/PR/imagePR8.png differ diff --git a/static/img/PR/imagePR9.png b/static/img/PR/imagePR9.png new file mode 100644 index 0000000..982e98c Binary files /dev/null and b/static/img/PR/imagePR9.png differ diff --git a/static/img/arrow.svg b/static/img/arrow.svg deleted file mode 100644 index 1450460..0000000 --- a/static/img/arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/audit-logs/audit-logs-architecture.png b/static/img/audit-logs/audit-logs-architecture.png deleted file mode 100644 index 5e9e14f..0000000 Binary files a/static/img/audit-logs/audit-logs-architecture.png and /dev/null differ diff --git a/static/img/blog/SSO-tax.png b/static/img/blog/SSO-tax.png deleted file mode 100644 index 98410cc..0000000 Binary files a/static/img/blog/SSO-tax.png and /dev/null differ diff --git a/static/img/blog/add-saml-sso-to-node-express-app/add-saml-config-form.png b/static/img/blog/add-saml-sso-to-node-express-app/add-saml-config-form.png deleted file mode 100644 index a04cc52..0000000 Binary files a/static/img/blog/add-saml-sso-to-node-express-app/add-saml-config-form.png and /dev/null differ diff --git a/static/img/blog/add-saml-sso-to-node-express-app/express-dashboard.png b/static/img/blog/add-saml-sso-to-node-express-app/express-dashboard.png deleted file mode 100644 index 1d793ec..0000000 Binary files a/static/img/blog/add-saml-sso-to-node-express-app/express-dashboard.png and /dev/null differ diff --git a/static/img/blog/audit-logs-widget.png b/static/img/blog/audit-logs-widget.png deleted file mode 100644 index 7f1dc27..0000000 Binary files a/static/img/blog/audit-logs-widget.png and /dev/null differ diff --git a/static/img/blog/bubble-plugin.png b/static/img/blog/bubble-plugin.png deleted file mode 100644 index 0d9c3ae..0000000 Binary files a/static/img/blog/bubble-plugin.png and /dev/null differ diff --git a/static/img/blog/bubble-small.jpg b/static/img/blog/bubble-small.jpg deleted file mode 100644 index f4f5c55..0000000 Binary files a/static/img/blog/bubble-small.jpg and /dev/null differ diff --git a/static/img/blog/christine-roy-ir5MHI6rPg0-unsplash.jpg b/static/img/blog/christine-roy-ir5MHI6rPg0-unsplash.jpg deleted file mode 100644 index ac8b7c3..0000000 Binary files a/static/img/blog/christine-roy-ir5MHI6rPg0-unsplash.jpg and /dev/null differ diff --git a/static/img/blog/clickhouse-config.png b/static/img/blog/clickhouse-config.png deleted file mode 100644 index fb4c71b..0000000 Binary files a/static/img/blog/clickhouse-config.png and /dev/null differ diff --git a/static/img/blog/devsecops.png b/static/img/blog/devsecops.png deleted file mode 100644 index 2fdcab9..0000000 Binary files a/static/img/blog/devsecops.png and /dev/null differ diff --git a/static/img/blog/directory-sync-flow.png b/static/img/blog/directory-sync-flow.png deleted file mode 100644 index ff92546..0000000 Binary files a/static/img/blog/directory-sync-flow.png and /dev/null differ diff --git a/static/img/blog/dontbuild/security-risks-meme.jpeg b/static/img/blog/dontbuild/security-risks-meme.jpeg deleted file mode 100644 index 5a62333..0000000 Binary files a/static/img/blog/dontbuild/security-risks-meme.jpeg and /dev/null differ diff --git a/static/img/blog/enterprise-ready-saas.jpg b/static/img/blog/enterprise-ready-saas.jpg deleted file mode 100644 index 77f8af3..0000000 Binary files a/static/img/blog/enterprise-ready-saas.jpg and /dev/null differ diff --git a/static/img/blog/fluentbit-clickhouse.png b/static/img/blog/fluentbit-clickhouse.png deleted file mode 100644 index 46b166d..0000000 Binary files a/static/img/blog/fluentbit-clickhouse.png and /dev/null differ diff --git a/static/img/blog/fluentbit-config.png b/static/img/blog/fluentbit-config.png deleted file mode 100644 index 17e0925..0000000 Binary files a/static/img/blog/fluentbit-config.png and /dev/null differ diff --git a/static/img/blog/jay-wennington-BdeMttZx6Fs-unsplash.jpg b/static/img/blog/jay-wennington-BdeMttZx6Fs-unsplash.jpg deleted file mode 100644 index 92eac1d..0000000 Binary files a/static/img/blog/jay-wennington-BdeMttZx6Fs-unsplash.jpg and /dev/null differ diff --git a/static/img/blog/lowcode-graph.png b/static/img/blog/lowcode-graph.png deleted file mode 100644 index a05c75c..0000000 Binary files a/static/img/blog/lowcode-graph.png and /dev/null differ diff --git a/static/img/blog/matrix-finger.jpg b/static/img/blog/matrix-finger.jpg deleted file mode 100644 index 01d671c..0000000 Binary files a/static/img/blog/matrix-finger.jpg and /dev/null differ diff --git a/static/img/blog/mulyadi-dDlvuSKUDZM-unsplash.jpg b/static/img/blog/mulyadi-dDlvuSKUDZM-unsplash.jpg deleted file mode 100644 index f6db2f9..0000000 Binary files a/static/img/blog/mulyadi-dDlvuSKUDZM-unsplash.jpg and /dev/null differ diff --git a/static/img/blog/results-ingester.png b/static/img/blog/results-ingester.png deleted file mode 100644 index 1e44bd8..0000000 Binary files a/static/img/blog/results-ingester.png and /dev/null differ diff --git a/static/img/blog/results-query.png b/static/img/blog/results-query.png deleted file mode 100644 index 5665f33..0000000 Binary files a/static/img/blog/results-query.png and /dev/null differ diff --git a/static/img/blog/security-lock.jpg b/static/img/blog/security-lock.jpg deleted file mode 100644 index f9e15a0..0000000 Binary files a/static/img/blog/security-lock.jpg and /dev/null differ diff --git a/static/img/blog/security-sucks-meme.jpeg b/static/img/blog/security-sucks-meme.jpeg deleted file mode 100644 index 0c6738a..0000000 Binary files a/static/img/blog/security-sucks-meme.jpeg and /dev/null differ diff --git a/static/img/blog/shame-vs-fame.png b/static/img/blog/shame-vs-fame.png deleted file mode 100644 index 248b3c6..0000000 Binary files a/static/img/blog/shame-vs-fame.png and /dev/null differ diff --git a/static/img/blog/ssk-landing-page.png b/static/img/blog/ssk-landing-page.png deleted file mode 100644 index 53c36fb..0000000 Binary files a/static/img/blog/ssk-landing-page.png and /dev/null differ diff --git a/static/img/blog/sso-tax-list.png b/static/img/blog/sso-tax-list.png deleted file mode 100644 index c235501..0000000 Binary files a/static/img/blog/sso-tax-list.png and /dev/null differ diff --git a/static/img/blog/sso/with-boxyhq.png b/static/img/blog/sso/with-boxyhq.png deleted file mode 100644 index 6bb490c..0000000 Binary files a/static/img/blog/sso/with-boxyhq.png and /dev/null differ diff --git a/static/img/blog/sso/with-saml.png b/static/img/blog/sso/with-saml.png deleted file mode 100644 index b1cbdcf..0000000 Binary files a/static/img/blog/sso/with-saml.png and /dev/null differ diff --git a/static/img/blog/sso/without-boxyhq.png b/static/img/blog/sso/without-boxyhq.png deleted file mode 100644 index 448cc19..0000000 Binary files a/static/img/blog/sso/without-boxyhq.png and /dev/null differ diff --git a/static/img/blog/sso/without-saml.png b/static/img/blog/sso/without-saml.png deleted file mode 100644 index cc82247..0000000 Binary files a/static/img/blog/sso/without-saml.png and /dev/null differ diff --git a/static/img/blog/testimonial-kubeworkz.png b/static/img/blog/testimonial-kubeworkz.png deleted file mode 100644 index a4e4500..0000000 Binary files a/static/img/blog/testimonial-kubeworkz.png and /dev/null differ diff --git a/static/img/blog/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg b/static/img/blog/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg deleted file mode 100644 index 8765961..0000000 Binary files a/static/img/blog/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg and /dev/null differ diff --git a/static/img/bot/botconfig1.png b/static/img/bot/botconfig1.png new file mode 100644 index 0000000..75d3aa8 Binary files /dev/null and b/static/img/bot/botconfig1.png differ diff --git a/static/img/bot/botconfig2.png b/static/img/bot/botconfig2.png new file mode 100644 index 0000000..e932702 Binary files /dev/null and b/static/img/bot/botconfig2.png differ diff --git a/static/img/bot/botconfig3.png b/static/img/bot/botconfig3.png new file mode 100644 index 0000000..d368eff Binary files /dev/null and b/static/img/bot/botconfig3.png differ diff --git a/static/img/bot/botcreate1.png b/static/img/bot/botcreate1.png new file mode 100644 index 0000000..1383604 Binary files /dev/null and b/static/img/bot/botcreate1.png differ diff --git a/static/img/bot/botcreate2.png b/static/img/bot/botcreate2.png new file mode 100644 index 0000000..533e03e Binary files /dev/null and b/static/img/bot/botcreate2.png differ diff --git a/static/img/bot/botcreate3.png b/static/img/bot/botcreate3.png new file mode 100644 index 0000000..4165b5b Binary files /dev/null and b/static/img/bot/botcreate3.png differ diff --git a/static/img/bot/botinstall1.png b/static/img/bot/botinstall1.png new file mode 100644 index 0000000..4e7a881 Binary files /dev/null and b/static/img/bot/botinstall1.png differ diff --git a/static/img/bot/botinstall2.png b/static/img/bot/botinstall2.png new file mode 100644 index 0000000..e257d9e Binary files /dev/null and b/static/img/bot/botinstall2.png differ diff --git a/static/img/bot/botinstall3.png b/static/img/bot/botinstall3.png new file mode 100644 index 0000000..687fbcb Binary files /dev/null and b/static/img/bot/botinstall3.png differ diff --git a/static/img/bot/botmarket1.png b/static/img/bot/botmarket1.png new file mode 100644 index 0000000..111f71f Binary files /dev/null and b/static/img/bot/botmarket1.png differ diff --git a/static/img/bot/botmarket2.png b/static/img/bot/botmarket2.png new file mode 100644 index 0000000..ee495e9 Binary files /dev/null and b/static/img/bot/botmarket2.png differ diff --git a/static/img/botinstall1.png b/static/img/botinstall1.png new file mode 100644 index 0000000..4e7a881 Binary files /dev/null and b/static/img/botinstall1.png differ diff --git a/static/img/bubble-io/step-1.png b/static/img/bubble-io/step-1.png deleted file mode 100644 index 74da929..0000000 Binary files a/static/img/bubble-io/step-1.png and /dev/null differ diff --git a/static/img/bubble-io/step-2.png b/static/img/bubble-io/step-2.png deleted file mode 100644 index 3e9bfc0..0000000 Binary files a/static/img/bubble-io/step-2.png and /dev/null differ diff --git a/static/img/bubble-io/step-3.png b/static/img/bubble-io/step-3.png deleted file mode 100644 index 6d0bf99..0000000 Binary files a/static/img/bubble-io/step-3.png and /dev/null differ diff --git a/static/img/bubble-io/step-4.png b/static/img/bubble-io/step-4.png deleted file mode 100644 index 5605186..0000000 Binary files a/static/img/bubble-io/step-4.png and /dev/null differ diff --git a/static/img/bubble-io/step-5.png b/static/img/bubble-io/step-5.png deleted file mode 100644 index 3fa452d..0000000 Binary files a/static/img/bubble-io/step-5.png and /dev/null differ diff --git a/static/img/bubble-io/step-6.png b/static/img/bubble-io/step-6.png deleted file mode 100644 index 858d5ec..0000000 Binary files a/static/img/bubble-io/step-6.png and /dev/null differ diff --git a/static/img/ccf_gitlink.png b/static/img/ccf_gitlink.png new file mode 100644 index 0000000..46e8b4d Binary files /dev/null and b/static/img/ccf_gitlink.png differ diff --git a/static/img/customers/cal.svg b/static/img/customers/cal.svg deleted file mode 100644 index cec89ac..0000000 --- a/static/img/customers/cal.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/customers/salita.svg b/static/img/customers/salita.svg deleted file mode 100644 index f6d5035..0000000 --- a/static/img/customers/salita.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/static/img/customers/supertokens.svg b/static/img/customers/supertokens.svg deleted file mode 100644 index 5546f02..0000000 --- a/static/img/customers/supertokens.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/customers/unosecur.svg b/static/img/customers/unosecur.svg deleted file mode 100644 index 4d5782c..0000000 --- a/static/img/customers/unosecur.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/img/default-blog-post-banner.png b/static/img/default-blog-post-banner.png deleted file mode 100644 index 5bee430..0000000 Binary files a/static/img/default-blog-post-banner.png and /dev/null differ diff --git a/static/img/di_san_fang/WebIDE/Blame详细信息.png b/static/img/di_san_fang/WebIDE/Blame详细信息.png new file mode 100644 index 0000000..e7b1ff8 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/Blame详细信息.png differ diff --git a/static/img/di_san_fang/WebIDE/Graph.png b/static/img/di_san_fang/WebIDE/Graph.png new file mode 100644 index 0000000..c1f6efe Binary files /dev/null and b/static/img/di_san_fang/WebIDE/Graph.png differ diff --git a/static/img/di_san_fang/WebIDE/IDE模式的代码评审.png b/static/img/di_san_fang/WebIDE/IDE模式的代码评审.png new file mode 100644 index 0000000..80a7560 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/IDE模式的代码评审.png differ diff --git a/static/img/di_san_fang/WebIDE/JS语言服务提示.png b/static/img/di_san_fang/WebIDE/JS语言服务提示.png new file mode 100644 index 0000000..8ca5254 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/JS语言服务提示.png differ diff --git a/static/img/di_san_fang/WebIDE/Python代码运行.png b/static/img/di_san_fang/WebIDE/Python代码运行.png new file mode 100644 index 0000000..ba6314c Binary files /dev/null and b/static/img/di_san_fang/WebIDE/Python代码运行.png differ diff --git a/static/img/di_san_fang/WebIDE/WebIDE入口.png b/static/img/di_san_fang/WebIDE/WebIDE入口.png new file mode 100644 index 0000000..8ed6843 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/WebIDE入口.png differ diff --git a/static/img/di_san_fang/WebIDE/WebSCM.png b/static/img/di_san_fang/WebIDE/WebSCM.png new file mode 100644 index 0000000..b9725ee Binary files /dev/null and b/static/img/di_san_fang/WebIDE/WebSCM.png differ diff --git a/static/img/di_san_fang/WebIDE/python查看引用.png b/static/img/di_san_fang/WebIDE/python查看引用.png new file mode 100644 index 0000000..bcbfa21 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/python查看引用.png differ diff --git a/static/img/di_san_fang/WebIDE/代码引用.png b/static/img/di_san_fang/WebIDE/代码引用.png new file mode 100644 index 0000000..92d9f4f Binary files /dev/null and b/static/img/di_san_fang/WebIDE/代码引用.png differ diff --git a/static/img/di_san_fang/WebIDE/代码评审.png b/static/img/di_san_fang/WebIDE/代码评审.png new file mode 100644 index 0000000..89c6d88 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/代码评审.png differ diff --git a/static/img/di_san_fang/WebIDE/分支新建.png b/static/img/di_san_fang/WebIDE/分支新建.png new file mode 100644 index 0000000..6a0042f Binary files /dev/null and b/static/img/di_san_fang/WebIDE/分支新建.png differ diff --git a/static/img/di_san_fang/WebIDE/前端代码.png b/static/img/di_san_fang/WebIDE/前端代码.png new file mode 100644 index 0000000..28b1161 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/前端代码.png differ diff --git a/static/img/di_san_fang/WebIDE/多选行高亮.png b/static/img/di_san_fang/WebIDE/多选行高亮.png new file mode 100644 index 0000000..fcde8ae Binary files /dev/null and b/static/img/di_san_fang/WebIDE/多选行高亮.png differ diff --git a/static/img/di_san_fang/WebIDE/当前代码.png b/static/img/di_san_fang/WebIDE/当前代码.png new file mode 100644 index 0000000..11c4255 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/当前代码.png differ diff --git a/static/img/di_san_fang/WebIDE/文件搜索.png b/static/img/di_san_fang/WebIDE/文件搜索.png new file mode 100644 index 0000000..cda9348 Binary files /dev/null and b/static/img/di_san_fang/WebIDE/文件搜索.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/代码分析入口.png b/static/img/di_san_fang/重晴鸟代码溯源/代码分析入口.png new file mode 100644 index 0000000..5dae13b Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/代码分析入口.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/代码分析协议签订.png b/static/img/di_san_fang/重晴鸟代码溯源/代码分析协议签订.png new file mode 100644 index 0000000..09c3459 Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/代码分析协议签订.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/代码分析检测.png b/static/img/di_san_fang/重晴鸟代码溯源/代码分析检测.png new file mode 100644 index 0000000..b312af9 Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/代码分析检测.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/分支选择.png b/static/img/di_san_fang/重晴鸟代码溯源/分支选择.png new file mode 100644 index 0000000..59ae393 Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/分支选择.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/列表展示.png b/static/img/di_san_fang/重晴鸟代码溯源/列表展示.png new file mode 100644 index 0000000..c6d83d7 Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/列表展示.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/用户操作流程.png b/static/img/di_san_fang/重晴鸟代码溯源/用户操作流程.png new file mode 100644 index 0000000..406a255 Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/用户操作流程.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/结果展示.png b/static/img/di_san_fang/重晴鸟代码溯源/结果展示.png new file mode 100644 index 0000000..45246da Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/结果展示.png differ diff --git a/static/img/di_san_fang/重晴鸟代码溯源/项目导航.png b/static/img/di_san_fang/重晴鸟代码溯源/项目导航.png new file mode 100644 index 0000000..c8264ea Binary files /dev/null and b/static/img/di_san_fang/重晴鸟代码溯源/项目导航.png differ diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png new file mode 100644 index 0000000..f458149 Binary files /dev/null and b/static/img/docusaurus.png differ diff --git a/static/img/dsync/admin/create-directory.png b/static/img/dsync/admin/create-directory.png deleted file mode 100644 index 523a1f0..0000000 Binary files a/static/img/dsync/admin/create-directory.png and /dev/null differ diff --git a/static/img/dsync/admin/directories.png b/static/img/dsync/admin/directories.png deleted file mode 100644 index ddac473..0000000 Binary files a/static/img/dsync/admin/directories.png and /dev/null differ diff --git a/static/img/dsync/admin/groups.png b/static/img/dsync/admin/groups.png deleted file mode 100644 index fcfd18e..0000000 Binary files a/static/img/dsync/admin/groups.png and /dev/null differ diff --git a/static/img/dsync/admin/logs.png b/static/img/dsync/admin/logs.png deleted file mode 100644 index e3f7180..0000000 Binary files a/static/img/dsync/admin/logs.png and /dev/null differ diff --git a/static/img/dsync/admin/update-directory.png b/static/img/dsync/admin/update-directory.png deleted file mode 100644 index 4bbbba2..0000000 Binary files a/static/img/dsync/admin/update-directory.png and /dev/null differ diff --git a/static/img/dsync/admin/users.png b/static/img/dsync/admin/users.png deleted file mode 100644 index 8dbeac3..0000000 Binary files a/static/img/dsync/admin/users.png and /dev/null differ diff --git a/static/img/dsync/directory-sync-flow.png b/static/img/dsync/directory-sync-flow.png deleted file mode 100644 index 2dda5ac..0000000 Binary files a/static/img/dsync/directory-sync-flow.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/1.png b/static/img/dsync/providers/azure/1.png deleted file mode 100644 index 866236f..0000000 Binary files a/static/img/dsync/providers/azure/1.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/10.png b/static/img/dsync/providers/azure/10.png deleted file mode 100644 index 8501455..0000000 Binary files a/static/img/dsync/providers/azure/10.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/11.png b/static/img/dsync/providers/azure/11.png deleted file mode 100644 index 60936da..0000000 Binary files a/static/img/dsync/providers/azure/11.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/12.png b/static/img/dsync/providers/azure/12.png deleted file mode 100644 index 73bcd2f..0000000 Binary files a/static/img/dsync/providers/azure/12.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/2.png b/static/img/dsync/providers/azure/2.png deleted file mode 100644 index e81fd29..0000000 Binary files a/static/img/dsync/providers/azure/2.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/3.png b/static/img/dsync/providers/azure/3.png deleted file mode 100644 index 20e51bd..0000000 Binary files a/static/img/dsync/providers/azure/3.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/4.png b/static/img/dsync/providers/azure/4.png deleted file mode 100644 index 5381c2d..0000000 Binary files a/static/img/dsync/providers/azure/4.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/5.png b/static/img/dsync/providers/azure/5.png deleted file mode 100644 index 08ba74a..0000000 Binary files a/static/img/dsync/providers/azure/5.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/7.png b/static/img/dsync/providers/azure/7.png deleted file mode 100644 index fd3c784..0000000 Binary files a/static/img/dsync/providers/azure/7.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/8.png b/static/img/dsync/providers/azure/8.png deleted file mode 100644 index 9ea320a..0000000 Binary files a/static/img/dsync/providers/azure/8.png and /dev/null differ diff --git a/static/img/dsync/providers/azure/9.png b/static/img/dsync/providers/azure/9.png deleted file mode 100644 index 8501455..0000000 Binary files a/static/img/dsync/providers/azure/9.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/1.png b/static/img/dsync/providers/jumpcloud/1.png deleted file mode 100644 index 563f851..0000000 Binary files a/static/img/dsync/providers/jumpcloud/1.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/2.png b/static/img/dsync/providers/jumpcloud/2.png deleted file mode 100644 index 6e4c6b7..0000000 Binary files a/static/img/dsync/providers/jumpcloud/2.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/3.png b/static/img/dsync/providers/jumpcloud/3.png deleted file mode 100644 index 2e4b67a..0000000 Binary files a/static/img/dsync/providers/jumpcloud/3.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/4.png b/static/img/dsync/providers/jumpcloud/4.png deleted file mode 100644 index b5fce79..0000000 Binary files a/static/img/dsync/providers/jumpcloud/4.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/5.png b/static/img/dsync/providers/jumpcloud/5.png deleted file mode 100644 index 8bf83ab..0000000 Binary files a/static/img/dsync/providers/jumpcloud/5.png and /dev/null differ diff --git a/static/img/dsync/providers/jumpcloud/6.png b/static/img/dsync/providers/jumpcloud/6.png deleted file mode 100644 index 8f06217..0000000 Binary files a/static/img/dsync/providers/jumpcloud/6.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/1.png b/static/img/dsync/providers/okta/1.png deleted file mode 100644 index 26ce8de..0000000 Binary files a/static/img/dsync/providers/okta/1.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/10.png b/static/img/dsync/providers/okta/10.png deleted file mode 100644 index bccfe72..0000000 Binary files a/static/img/dsync/providers/okta/10.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/11.png b/static/img/dsync/providers/okta/11.png deleted file mode 100644 index 916586a..0000000 Binary files a/static/img/dsync/providers/okta/11.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/12.png b/static/img/dsync/providers/okta/12.png deleted file mode 100644 index 1b18113..0000000 Binary files a/static/img/dsync/providers/okta/12.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/2.png b/static/img/dsync/providers/okta/2.png deleted file mode 100644 index 17e93c2..0000000 Binary files a/static/img/dsync/providers/okta/2.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/3.png b/static/img/dsync/providers/okta/3.png deleted file mode 100644 index 7475707..0000000 Binary files a/static/img/dsync/providers/okta/3.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/4.png b/static/img/dsync/providers/okta/4.png deleted file mode 100644 index f0d149e..0000000 Binary files a/static/img/dsync/providers/okta/4.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/5.png b/static/img/dsync/providers/okta/5.png deleted file mode 100644 index 75018d5..0000000 Binary files a/static/img/dsync/providers/okta/5.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/6.png b/static/img/dsync/providers/okta/6.png deleted file mode 100644 index e461aea..0000000 Binary files a/static/img/dsync/providers/okta/6.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/7.png b/static/img/dsync/providers/okta/7.png deleted file mode 100644 index 0c7a8d7..0000000 Binary files a/static/img/dsync/providers/okta/7.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/8.png b/static/img/dsync/providers/okta/8.png deleted file mode 100644 index b59a7f6..0000000 Binary files a/static/img/dsync/providers/okta/8.png and /dev/null differ diff --git a/static/img/dsync/providers/okta/9.png b/static/img/dsync/providers/okta/9.png deleted file mode 100644 index 83fbba6..0000000 Binary files a/static/img/dsync/providers/okta/9.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/1.png b/static/img/dsync/providers/onelogin/1.png deleted file mode 100644 index 3cbcbb8..0000000 Binary files a/static/img/dsync/providers/onelogin/1.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/10.png b/static/img/dsync/providers/onelogin/10.png deleted file mode 100644 index 90e14ee..0000000 Binary files a/static/img/dsync/providers/onelogin/10.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/11.png b/static/img/dsync/providers/onelogin/11.png deleted file mode 100644 index 670e8fd..0000000 Binary files a/static/img/dsync/providers/onelogin/11.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/12.png b/static/img/dsync/providers/onelogin/12.png deleted file mode 100644 index 249832d..0000000 Binary files a/static/img/dsync/providers/onelogin/12.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/13.png b/static/img/dsync/providers/onelogin/13.png deleted file mode 100644 index 6ba8b85..0000000 Binary files a/static/img/dsync/providers/onelogin/13.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/14.png b/static/img/dsync/providers/onelogin/14.png deleted file mode 100644 index 7244e83..0000000 Binary files a/static/img/dsync/providers/onelogin/14.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/15.png b/static/img/dsync/providers/onelogin/15.png deleted file mode 100644 index 4efa7b4..0000000 Binary files a/static/img/dsync/providers/onelogin/15.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/16.png b/static/img/dsync/providers/onelogin/16.png deleted file mode 100644 index 02c02a9..0000000 Binary files a/static/img/dsync/providers/onelogin/16.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/17.png b/static/img/dsync/providers/onelogin/17.png deleted file mode 100644 index 5585564..0000000 Binary files a/static/img/dsync/providers/onelogin/17.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/18.png b/static/img/dsync/providers/onelogin/18.png deleted file mode 100644 index c2a97eb..0000000 Binary files a/static/img/dsync/providers/onelogin/18.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/2.png b/static/img/dsync/providers/onelogin/2.png deleted file mode 100644 index 58fabaa..0000000 Binary files a/static/img/dsync/providers/onelogin/2.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/3.png b/static/img/dsync/providers/onelogin/3.png deleted file mode 100644 index 86a4201..0000000 Binary files a/static/img/dsync/providers/onelogin/3.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/4.png b/static/img/dsync/providers/onelogin/4.png deleted file mode 100644 index 35d3f25..0000000 Binary files a/static/img/dsync/providers/onelogin/4.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/5.png b/static/img/dsync/providers/onelogin/5.png deleted file mode 100644 index 8497b70..0000000 Binary files a/static/img/dsync/providers/onelogin/5.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/6.png b/static/img/dsync/providers/onelogin/6.png deleted file mode 100644 index 2a9df44..0000000 Binary files a/static/img/dsync/providers/onelogin/6.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/7.png b/static/img/dsync/providers/onelogin/7.png deleted file mode 100644 index 72a53fc..0000000 Binary files a/static/img/dsync/providers/onelogin/7.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/8.png b/static/img/dsync/providers/onelogin/8.png deleted file mode 100644 index 0a5b60c..0000000 Binary files a/static/img/dsync/providers/onelogin/8.png and /dev/null differ diff --git a/static/img/dsync/providers/onelogin/9.png b/static/img/dsync/providers/onelogin/9.png deleted file mode 100644 index 6a44181..0000000 Binary files a/static/img/dsync/providers/onelogin/9.png and /dev/null differ diff --git a/static/img/dynamic-antd-theme.png b/static/img/dynamic-antd-theme.png new file mode 100644 index 0000000..b8ea8c8 Binary files /dev/null and b/static/img/dynamic-antd-theme.png differ diff --git a/static/img/engine/code_workflow1.jpg b/static/img/engine/code_workflow1.jpg new file mode 100644 index 0000000..4a8b3c2 Binary files /dev/null and b/static/img/engine/code_workflow1.jpg differ diff --git a/static/img/engine/code_workflow2.png b/static/img/engine/code_workflow2.png new file mode 100644 index 0000000..07af173 Binary files /dev/null and b/static/img/engine/code_workflow2.png differ diff --git a/static/img/engine/engine_intro.jpg b/static/img/engine/engine_intro.jpg new file mode 100644 index 0000000..954f1cd Binary files /dev/null and b/static/img/engine/engine_intro.jpg differ diff --git a/static/img/engine/parameter1.png b/static/img/engine/parameter1.png new file mode 100644 index 0000000..d8b6a66 Binary files /dev/null and b/static/img/engine/parameter1.png differ diff --git a/static/img/engine/parameter2.png b/static/img/engine/parameter2.png new file mode 100644 index 0000000..72dfc31 Binary files /dev/null and b/static/img/engine/parameter2.png differ diff --git a/static/img/engine/result.png b/static/img/engine/result.png new file mode 100644 index 0000000..71a8e02 Binary files /dev/null and b/static/img/engine/result.png differ diff --git a/static/img/engine/secret1.png b/static/img/engine/secret1.png new file mode 100644 index 0000000..b4d850e Binary files /dev/null and b/static/img/engine/secret1.png differ diff --git a/static/img/engine/secret2.png b/static/img/engine/secret2.png new file mode 100644 index 0000000..208bfb6 Binary files /dev/null and b/static/img/engine/secret2.png differ diff --git a/static/img/engine/vis_workflow1.png b/static/img/engine/vis_workflow1.png new file mode 100644 index 0000000..abc964d Binary files /dev/null and b/static/img/engine/vis_workflow1.png differ diff --git a/static/img/engine/vis_workflow2.png b/static/img/engine/vis_workflow2.png new file mode 100644 index 0000000..ba3f9b2 Binary files /dev/null and b/static/img/engine/vis_workflow2.png differ diff --git a/static/img/engine/vis_workflow3.png b/static/img/engine/vis_workflow3.png new file mode 100644 index 0000000..b2b4704 Binary files /dev/null and b/static/img/engine/vis_workflow3.png differ diff --git a/static/img/engine/vis_workflow4.png b/static/img/engine/vis_workflow4.png new file mode 100644 index 0000000..8e8e63e Binary files /dev/null and b/static/img/engine/vis_workflow4.png differ diff --git a/static/img/engine/vis_workflow5.png b/static/img/engine/vis_workflow5.png new file mode 100644 index 0000000..bdcec1e Binary files /dev/null and b/static/img/engine/vis_workflow5.png differ diff --git a/static/img/engine/vis_workflow6.png b/static/img/engine/vis_workflow6.png new file mode 100644 index 0000000..57d51c7 Binary files /dev/null and b/static/img/engine/vis_workflow6.png differ diff --git a/static/img/engine/vis_workflow7.png b/static/img/engine/vis_workflow7.png new file mode 100644 index 0000000..09d9bf1 Binary files /dev/null and b/static/img/engine/vis_workflow7.png differ diff --git a/static/img/engine/vis_workflow8.png b/static/img/engine/vis_workflow8.png new file mode 100644 index 0000000..c7c5f29 Binary files /dev/null and b/static/img/engine/vis_workflow8.png differ diff --git a/static/img/enterprise-sso-arch.png b/static/img/enterprise-sso-arch.png deleted file mode 100644 index f2d602d..0000000 Binary files a/static/img/enterprise-sso-arch.png and /dev/null differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico index 9c119ca..c01d54b 100644 Binary files a/static/img/favicon.ico and b/static/img/favicon.ico differ diff --git a/static/img/feat-audit.svg b/static/img/feat-audit.svg deleted file mode 100644 index d9509ed..0000000 --- a/static/img/feat-audit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/feat-coming.svg b/static/img/feat-coming.svg deleted file mode 100644 index 55455b8..0000000 --- a/static/img/feat-coming.svg +++ /dev/null @@ -1 +0,0 @@ -under construction \ No newline at end of file diff --git a/static/img/feat-dsync.svg b/static/img/feat-dsync.svg deleted file mode 100644 index 7dcd6ce..0000000 --- a/static/img/feat-dsync.svg +++ /dev/null @@ -1 +0,0 @@ -synchronize \ No newline at end of file diff --git a/static/img/feat-rbac.svg b/static/img/feat-rbac.svg deleted file mode 100644 index 0b1bd42..0000000 --- a/static/img/feat-rbac.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/feat-saas.svg b/static/img/feat-saas.svg deleted file mode 100644 index 695372f..0000000 --- a/static/img/feat-saas.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/feat-sso.svg b/static/img/feat-sso.svg deleted file mode 100644 index 327e4a4..0000000 --- a/static/img/feat-sso.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/feat-vault.svg b/static/img/feat-vault.svg deleted file mode 100644 index cccf43a..0000000 --- a/static/img/feat-vault.svg +++ /dev/null @@ -1 +0,0 @@ -security \ No newline at end of file diff --git a/static/img/gitlink-qq.png b/static/img/gitlink-qq.png new file mode 100644 index 0000000..bc243e4 Binary files /dev/null and b/static/img/gitlink-qq.png differ diff --git a/static/img/gitlink.png b/static/img/gitlink.png new file mode 100644 index 0000000..4326948 Binary files /dev/null and b/static/img/gitlink.png differ diff --git a/static/img/gongzhong.png b/static/img/gongzhong.png new file mode 100644 index 0000000..4553490 Binary files /dev/null and b/static/img/gongzhong.png differ diff --git a/static/img/home-buildingblocks.svg b/static/img/home-buildingblocks.svg deleted file mode 100644 index d42bd14..0000000 --- a/static/img/home-buildingblocks.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/home-hero.svg b/static/img/home-hero.svg deleted file mode 100644 index 386c3e3..0000000 --- a/static/img/home-hero.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/icon.ico b/static/img/icon.ico new file mode 100644 index 0000000..ad428fa Binary files /dev/null and b/static/img/icon.ico differ diff --git a/static/img/imageOrg1.png b/static/img/imageOrg1.png new file mode 100644 index 0000000..a852d8b Binary files /dev/null and b/static/img/imageOrg1.png differ diff --git a/static/img/investors/mmc-logo.png b/static/img/investors/mmc-logo.png deleted file mode 100644 index 2efe4ea..0000000 Binary files a/static/img/investors/mmc-logo.png and /dev/null differ diff --git a/static/img/investors/nauta-logo.png b/static/img/investors/nauta-logo.png deleted file mode 100644 index d524423..0000000 Binary files a/static/img/investors/nauta-logo.png and /dev/null differ diff --git a/static/img/investors/ossc-logo.svg b/static/img/investors/ossc-logo.svg deleted file mode 100644 index 13f25bd..0000000 --- a/static/img/investors/ossc-logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/img/investors/wayra-logo.png b/static/img/investors/wayra-logo.png deleted file mode 100644 index 698e97d..0000000 Binary files a/static/img/investors/wayra-logo.png and /dev/null differ diff --git a/static/img/jackson-architecture.png b/static/img/jackson-architecture.png deleted file mode 100644 index 6acd3fb..0000000 Binary files a/static/img/jackson-architecture.png and /dev/null differ diff --git a/static/img/logo-dark.png b/static/img/logo-dark.png deleted file mode 100644 index f62bdc3..0000000 Binary files a/static/img/logo-dark.png and /dev/null differ diff --git a/static/img/logo-large-white-bkg.png b/static/img/logo-large-white-bkg.png deleted file mode 100644 index 4ff58d6..0000000 Binary files a/static/img/logo-large-white-bkg.png and /dev/null differ diff --git a/static/img/logo-large.png b/static/img/logo-large.png deleted file mode 100644 index d60db8a..0000000 Binary files a/static/img/logo-large.png and /dev/null differ diff --git a/static/img/logo.png b/static/img/logo.png index e8d092e..e1447e6 100644 Binary files a/static/img/logo.png and b/static/img/logo.png differ diff --git a/static/img/logo.svg b/static/img/logo.svg new file mode 100644 index 0000000..03f4faa --- /dev/null +++ b/static/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/mini-dynamic-antd-theme.png b/static/img/mini-dynamic-antd-theme.png new file mode 100644 index 0000000..e8b1ea9 Binary files /dev/null and b/static/img/mini-dynamic-antd-theme.png differ diff --git a/static/img/news/vb-logo.svg b/static/img/news/vb-logo.svg deleted file mode 100644 index a8a9c01..0000000 --- a/static/img/news/vb-logo.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/static/img/news/yourstory-logo.svg b/static/img/news/yourstory-logo.svg deleted file mode 100644 index 9eb5503..0000000 --- a/static/img/news/yourstory-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/next-antd-scaffold.jpg b/static/img/next-antd-scaffold.jpg new file mode 100644 index 0000000..7ddafc6 Binary files /dev/null and b/static/img/next-antd-scaffold.jpg differ diff --git a/static/img/notice/@notice.png b/static/img/notice/@notice.png new file mode 100644 index 0000000..eb2acbe Binary files /dev/null and b/static/img/notice/@notice.png differ diff --git a/static/img/notice/home_notice.png b/static/img/notice/home_notice.png new file mode 100644 index 0000000..3362842 Binary files /dev/null and b/static/img/notice/home_notice.png differ diff --git a/static/img/notice/home_notice2.png b/static/img/notice/home_notice2.png new file mode 100644 index 0000000..b432f3f Binary files /dev/null and b/static/img/notice/home_notice2.png differ diff --git a/static/img/notice/into_notice.png b/static/img/notice/into_notice.png new file mode 100644 index 0000000..2a5b52b Binary files /dev/null and b/static/img/notice/into_notice.png differ diff --git a/static/img/notice/my_notice.png b/static/img/notice/my_notice.png new file mode 100644 index 0000000..0b79c1b Binary files /dev/null and b/static/img/notice/my_notice.png differ diff --git a/static/img/notice/my_notice2.png b/static/img/notice/my_notice2.png new file mode 100644 index 0000000..1c27f64 Binary files /dev/null and b/static/img/notice/my_notice2.png differ diff --git a/static/img/notice/notice_set.png b/static/img/notice/notice_set.png new file mode 100644 index 0000000..90436ad Binary files /dev/null and b/static/img/notice/notice_set.png differ diff --git a/static/img/products/audit-logs/cloud_docs.svg b/static/img/products/audit-logs/cloud_docs.svg deleted file mode 100644 index 5390df7..0000000 --- a/static/img/products/audit-logs/cloud_docs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/audit-logs/export_files.svg b/static/img/products/audit-logs/export_files.svg deleted file mode 100644 index 7d17de2..0000000 --- a/static/img/products/audit-logs/export_files.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/audit-logs/logo.svg b/static/img/products/audit-logs/logo.svg deleted file mode 100644 index bf4a571..0000000 --- a/static/img/products/audit-logs/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/static/img/products/audit-logs/reviewed_docs.svg b/static/img/products/audit-logs/reviewed_docs.svg deleted file mode 100644 index e69290c..0000000 --- a/static/img/products/audit-logs/reviewed_docs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/dsync/data_points.svg b/static/img/products/dsync/data_points.svg deleted file mode 100644 index 1581f75..0000000 --- a/static/img/products/dsync/data_points.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/dsync/logo.svg b/static/img/products/dsync/logo.svg deleted file mode 100644 index 9186593..0000000 --- a/static/img/products/dsync/logo.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/static/img/products/dsync/meet_the_team.svg b/static/img/products/dsync/meet_the_team.svg deleted file mode 100644 index a54336b..0000000 --- a/static/img/products/dsync/meet_the_team.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/icons/futuristic_interface.svg b/static/img/products/icons/futuristic_interface.svg deleted file mode 100644 index 34d2507..0000000 --- a/static/img/products/icons/futuristic_interface.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/icons/savings.svg b/static/img/products/icons/savings.svg deleted file mode 100644 index 5ae2240..0000000 --- a/static/img/products/icons/savings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/icons/security.svg b/static/img/products/icons/security.svg deleted file mode 100644 index 4566d8f..0000000 --- a/static/img/products/icons/security.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/mock-saml/logo.svg b/static/img/products/mock-saml/logo.svg deleted file mode 100644 index 2825af0..0000000 --- a/static/img/products/mock-saml/logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/products/privacy-vault/hacker_mind.svg b/static/img/products/privacy-vault/hacker_mind.svg deleted file mode 100644 index c8ce042..0000000 --- a/static/img/products/privacy-vault/hacker_mind.svg +++ /dev/null @@ -1 +0,0 @@ -hacker_mind \ No newline at end of file diff --git a/static/img/products/privacy-vault/logo.svg b/static/img/products/privacy-vault/logo.svg deleted file mode 100644 index 2551e9d..0000000 --- a/static/img/products/privacy-vault/logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/img/products/privacy-vault/security.svg b/static/img/products/privacy-vault/security.svg deleted file mode 100644 index 54f7b61..0000000 --- a/static/img/products/privacy-vault/security.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/privacy-vault/vault.svg b/static/img/products/privacy-vault/vault.svg deleted file mode 100644 index fdd93ce..0000000 --- a/static/img/products/privacy-vault/vault.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/saml-jackson/building.svg b/static/img/products/saml-jackson/building.svg deleted file mode 100644 index c4cd389..0000000 --- a/static/img/products/saml-jackson/building.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/products/saml-jackson/connected_world.svg b/static/img/products/saml-jackson/connected_world.svg deleted file mode 100644 index a396a50..0000000 --- a/static/img/products/saml-jackson/connected_world.svg +++ /dev/null @@ -1 +0,0 @@ -connected world \ No newline at end of file diff --git a/static/img/products/saml-jackson/logo.svg b/static/img/products/saml-jackson/logo.svg deleted file mode 100644 index 8ef017b..0000000 --- a/static/img/products/saml-jackson/logo.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/static/img/products/saml-jackson/time_management.svg b/static/img/products/saml-jackson/time_management.svg deleted file mode 100644 index eb9ea2d..0000000 --- a/static/img/products/saml-jackson/time_management.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/quickstart/create_homepage.png b/static/img/quickstart/create_homepage.png new file mode 100644 index 0000000..72dbee4 Binary files /dev/null and b/static/img/quickstart/create_homepage.png differ diff --git a/static/img/quickstart/create_info.png b/static/img/quickstart/create_info.png new file mode 100644 index 0000000..3da491f Binary files /dev/null and b/static/img/quickstart/create_info.png differ diff --git a/static/img/quickstart/create_success.png b/static/img/quickstart/create_success.png new file mode 100644 index 0000000..6e65e63 Binary files /dev/null and b/static/img/quickstart/create_success.png differ diff --git a/static/img/quickstart/first_commit.png b/static/img/quickstart/first_commit.png new file mode 100644 index 0000000..dc0e81b Binary files /dev/null and b/static/img/quickstart/first_commit.png differ diff --git a/static/img/quickstart/first_edit.png b/static/img/quickstart/first_edit.png new file mode 100644 index 0000000..de35d14 Binary files /dev/null and b/static/img/quickstart/first_edit.png differ diff --git a/static/img/quickstart/first_success.png b/static/img/quickstart/first_success.png new file mode 100644 index 0000000..ff65792 Binary files /dev/null and b/static/img/quickstart/first_success.png differ diff --git a/static/img/quickstart/import_homepage.png b/static/img/quickstart/import_homepage.png new file mode 100644 index 0000000..10bb774 Binary files /dev/null and b/static/img/quickstart/import_homepage.png differ diff --git a/static/img/quickstart/import_info.png b/static/img/quickstart/import_info.png new file mode 100644 index 0000000..dcbdf6a Binary files /dev/null and b/static/img/quickstart/import_info.png differ diff --git a/static/img/quickstart/import_success.png b/static/img/quickstart/import_success.png new file mode 100644 index 0000000..f38211a Binary files /dev/null and b/static/img/quickstart/import_success.png differ diff --git a/static/img/quickstart/import_wait.png b/static/img/quickstart/import_wait.png new file mode 100644 index 0000000..739c138 Binary files /dev/null and b/static/img/quickstart/import_wait.png differ diff --git a/static/img/quickstart/register_email.png b/static/img/quickstart/register_email.png new file mode 100644 index 0000000..18500ed Binary files /dev/null and b/static/img/quickstart/register_email.png differ diff --git a/static/img/quickstart/register_homepage.png b/static/img/quickstart/register_homepage.png new file mode 100644 index 0000000..91099f0 Binary files /dev/null and b/static/img/quickstart/register_homepage.png differ diff --git a/static/img/quickstart/register_ownpage.png b/static/img/quickstart/register_ownpage.png new file mode 100644 index 0000000..36a2c5f Binary files /dev/null and b/static/img/quickstart/register_ownpage.png differ diff --git a/static/img/quickstart/register_phone.png b/static/img/quickstart/register_phone.png new file mode 100644 index 0000000..5d6287c Binary files /dev/null and b/static/img/quickstart/register_phone.png differ diff --git a/static/img/quickstart/search_homepage.png b/static/img/quickstart/search_homepage.png new file mode 100644 index 0000000..b611990 Binary files /dev/null and b/static/img/quickstart/search_homepage.png differ diff --git a/static/img/quickstart/search_list.png b/static/img/quickstart/search_list.png new file mode 100644 index 0000000..b86c539 Binary files /dev/null and b/static/img/quickstart/search_list.png differ diff --git a/static/img/quickstart/search_method.png b/static/img/quickstart/search_method.png new file mode 100644 index 0000000..65baf90 Binary files /dev/null and b/static/img/quickstart/search_method.png differ diff --git a/static/img/quickstart/search_method1.png b/static/img/quickstart/search_method1.png new file mode 100644 index 0000000..b3a8985 Binary files /dev/null and b/static/img/quickstart/search_method1.png differ diff --git a/static/img/quickstart/search_method2.png b/static/img/quickstart/search_method2.png new file mode 100644 index 0000000..92b2fb5 Binary files /dev/null and b/static/img/quickstart/search_method2.png differ diff --git a/static/img/quickstart/search_result1.png b/static/img/quickstart/search_result1.png new file mode 100644 index 0000000..d303b34 Binary files /dev/null and b/static/img/quickstart/search_result1.png differ diff --git a/static/img/quickstart/search_result2.png b/static/img/quickstart/search_result2.png new file mode 100644 index 0000000..c61169e Binary files /dev/null and b/static/img/quickstart/search_result2.png differ diff --git a/static/img/saml-federation/admin/create-saml-federation-app.png b/static/img/saml-federation/admin/create-saml-federation-app.png deleted file mode 100644 index 4064d17..0000000 Binary files a/static/img/saml-federation/admin/create-saml-federation-app.png and /dev/null differ diff --git a/static/img/saml-federation/admin/update-saml-federation-app.png b/static/img/saml-federation/admin/update-saml-federation-app.png deleted file mode 100644 index 65200a1..0000000 Binary files a/static/img/saml-federation/admin/update-saml-federation-app.png and /dev/null differ diff --git a/static/img/saml-federation/admin/view-idp-configuration.png b/static/img/saml-federation/admin/view-idp-configuration.png deleted file mode 100644 index 7815281..0000000 Binary files a/static/img/saml-federation/admin/view-idp-configuration.png and /dev/null differ diff --git a/static/img/sso-flow.png b/static/img/sso-flow.png deleted file mode 100644 index 245de9d..0000000 Binary files a/static/img/sso-flow.png and /dev/null differ diff --git a/static/img/sso-providers/adfs/addtrust1.png b/static/img/sso-providers/adfs/addtrust1.png deleted file mode 100644 index 035e316..0000000 Binary files a/static/img/sso-providers/adfs/addtrust1.png and /dev/null differ diff --git a/static/img/sso-providers/adfs/addtrust12.png b/static/img/sso-providers/adfs/addtrust12.png deleted file mode 100644 index efdf499..0000000 Binary files a/static/img/sso-providers/adfs/addtrust12.png and /dev/null differ diff --git a/static/img/sso-providers/adfs/addtrust2.png b/static/img/sso-providers/adfs/addtrust2.png deleted file mode 100644 index 99207de..0000000 Binary files a/static/img/sso-providers/adfs/addtrust2.png and /dev/null differ diff --git a/static/img/sso-providers/adfs/nameid-email.png b/static/img/sso-providers/adfs/nameid-email.png deleted file mode 100644 index ba7e6af..0000000 Binary files a/static/img/sso-providers/adfs/nameid-email.png and /dev/null differ diff --git a/static/img/sso-providers/auth0/1.png b/static/img/sso-providers/auth0/1.png deleted file mode 100644 index 20fd592..0000000 Binary files a/static/img/sso-providers/auth0/1.png and /dev/null differ diff --git a/static/img/sso-providers/auth0/2.png b/static/img/sso-providers/auth0/2.png deleted file mode 100644 index 89a14c2..0000000 Binary files a/static/img/sso-providers/auth0/2.png and /dev/null differ diff --git a/static/img/sso-providers/auth0/3.png b/static/img/sso-providers/auth0/3.png deleted file mode 100644 index 0bafeb6..0000000 Binary files a/static/img/sso-providers/auth0/3.png and /dev/null differ diff --git a/static/img/sso-providers/auth0/4.png b/static/img/sso-providers/auth0/4.png deleted file mode 100644 index bfb2f5e..0000000 Binary files a/static/img/sso-providers/auth0/4.png and /dev/null differ diff --git a/static/img/sso-providers/auth0/5.png b/static/img/sso-providers/auth0/5.png deleted file mode 100644 index 589a57a..0000000 Binary files a/static/img/sso-providers/auth0/5.png and /dev/null differ diff --git a/static/img/sso-providers/azure/1.png b/static/img/sso-providers/azure/1.png deleted file mode 100644 index 07daa28..0000000 Binary files a/static/img/sso-providers/azure/1.png and /dev/null differ diff --git a/static/img/sso-providers/azure/2.png b/static/img/sso-providers/azure/2.png deleted file mode 100644 index 783805c..0000000 Binary files a/static/img/sso-providers/azure/2.png and /dev/null differ diff --git a/static/img/sso-providers/azure/3.png b/static/img/sso-providers/azure/3.png deleted file mode 100644 index cebb147..0000000 Binary files a/static/img/sso-providers/azure/3.png and /dev/null differ diff --git a/static/img/sso-providers/azure/4.png b/static/img/sso-providers/azure/4.png deleted file mode 100644 index 6578ba8..0000000 Binary files a/static/img/sso-providers/azure/4.png and /dev/null differ diff --git a/static/img/sso-providers/azure/5.png b/static/img/sso-providers/azure/5.png deleted file mode 100644 index cf27b46..0000000 Binary files a/static/img/sso-providers/azure/5.png and /dev/null differ diff --git a/static/img/sso-providers/azure/6.png b/static/img/sso-providers/azure/6.png deleted file mode 100644 index d248d86..0000000 Binary files a/static/img/sso-providers/azure/6.png and /dev/null differ diff --git a/static/img/sso-providers/azure/7.png b/static/img/sso-providers/azure/7.png deleted file mode 100644 index d07696f..0000000 Binary files a/static/img/sso-providers/azure/7.png and /dev/null differ diff --git a/static/img/sso-providers/azure/8.png b/static/img/sso-providers/azure/8.png deleted file mode 100644 index afaef3f..0000000 Binary files a/static/img/sso-providers/azure/8.png and /dev/null differ diff --git a/static/img/sso-providers/azure/9.png b/static/img/sso-providers/azure/9.png deleted file mode 100644 index 507750b..0000000 Binary files a/static/img/sso-providers/azure/9.png and /dev/null differ diff --git a/static/img/sso-providers/google/1.png b/static/img/sso-providers/google/1.png deleted file mode 100644 index 561a271..0000000 Binary files a/static/img/sso-providers/google/1.png and /dev/null differ diff --git a/static/img/sso-providers/google/2.png b/static/img/sso-providers/google/2.png deleted file mode 100644 index 12be6dd..0000000 Binary files a/static/img/sso-providers/google/2.png and /dev/null differ diff --git a/static/img/sso-providers/google/3.png b/static/img/sso-providers/google/3.png deleted file mode 100644 index c803978..0000000 Binary files a/static/img/sso-providers/google/3.png and /dev/null differ diff --git a/static/img/sso-providers/google/4.png b/static/img/sso-providers/google/4.png deleted file mode 100644 index 88fe152..0000000 Binary files a/static/img/sso-providers/google/4.png and /dev/null differ diff --git a/static/img/sso-providers/google/5.png b/static/img/sso-providers/google/5.png deleted file mode 100644 index 21bb658..0000000 Binary files a/static/img/sso-providers/google/5.png and /dev/null differ diff --git a/static/img/sso-providers/google/6.png b/static/img/sso-providers/google/6.png deleted file mode 100644 index a43ca76..0000000 Binary files a/static/img/sso-providers/google/6.png and /dev/null differ diff --git a/static/img/sso-providers/google/7.png b/static/img/sso-providers/google/7.png deleted file mode 100644 index 0b2d4c0..0000000 Binary files a/static/img/sso-providers/google/7.png and /dev/null differ diff --git a/static/img/sso-providers/jumpcloud/1.png b/static/img/sso-providers/jumpcloud/1.png deleted file mode 100644 index 50e8bb1..0000000 Binary files a/static/img/sso-providers/jumpcloud/1.png and /dev/null differ diff --git a/static/img/sso-providers/jumpcloud/2.png b/static/img/sso-providers/jumpcloud/2.png deleted file mode 100644 index 444ac98..0000000 Binary files a/static/img/sso-providers/jumpcloud/2.png and /dev/null differ diff --git a/static/img/sso-providers/jumpcloud/3.png b/static/img/sso-providers/jumpcloud/3.png deleted file mode 100644 index 2985aa9..0000000 Binary files a/static/img/sso-providers/jumpcloud/3.png and /dev/null differ diff --git a/static/img/sso-providers/jumpcloud/4.png b/static/img/sso-providers/jumpcloud/4.png deleted file mode 100644 index 9aae3f8..0000000 Binary files a/static/img/sso-providers/jumpcloud/4.png and /dev/null differ diff --git a/static/img/sso-providers/jumpcloud/5.png b/static/img/sso-providers/jumpcloud/5.png deleted file mode 100644 index bfda576..0000000 Binary files a/static/img/sso-providers/jumpcloud/5.png and /dev/null differ diff --git a/static/img/sso-providers/okta/1.png b/static/img/sso-providers/okta/1.png deleted file mode 100644 index 2dac446..0000000 Binary files a/static/img/sso-providers/okta/1.png and /dev/null differ diff --git a/static/img/sso-providers/okta/2.png b/static/img/sso-providers/okta/2.png deleted file mode 100644 index 9785690..0000000 Binary files a/static/img/sso-providers/okta/2.png and /dev/null differ diff --git a/static/img/sso-providers/okta/3.png b/static/img/sso-providers/okta/3.png deleted file mode 100644 index 26e69b1..0000000 Binary files a/static/img/sso-providers/okta/3.png and /dev/null differ diff --git a/static/img/sso-providers/okta/4.png b/static/img/sso-providers/okta/4.png deleted file mode 100644 index 13ed6ac..0000000 Binary files a/static/img/sso-providers/okta/4.png and /dev/null differ diff --git a/static/img/sso-providers/okta/5.png b/static/img/sso-providers/okta/5.png deleted file mode 100644 index 9074eb4..0000000 Binary files a/static/img/sso-providers/okta/5.png and /dev/null differ diff --git a/static/img/sso-providers/okta/6.png b/static/img/sso-providers/okta/6.png deleted file mode 100644 index 66e65ca..0000000 Binary files a/static/img/sso-providers/okta/6.png and /dev/null differ diff --git a/static/img/sso-providers/okta/7.png b/static/img/sso-providers/okta/7.png deleted file mode 100644 index 9f28569..0000000 Binary files a/static/img/sso-providers/okta/7.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/1.png b/static/img/sso-providers/onelogin/1.png deleted file mode 100644 index 313c1a8..0000000 Binary files a/static/img/sso-providers/onelogin/1.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/2.png b/static/img/sso-providers/onelogin/2.png deleted file mode 100644 index bb6eb09..0000000 Binary files a/static/img/sso-providers/onelogin/2.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/3.png b/static/img/sso-providers/onelogin/3.png deleted file mode 100644 index f9dd193..0000000 Binary files a/static/img/sso-providers/onelogin/3.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/4.png b/static/img/sso-providers/onelogin/4.png deleted file mode 100644 index e991777..0000000 Binary files a/static/img/sso-providers/onelogin/4.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/5.png b/static/img/sso-providers/onelogin/5.png deleted file mode 100644 index ef3665e..0000000 Binary files a/static/img/sso-providers/onelogin/5.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/6.png b/static/img/sso-providers/onelogin/6.png deleted file mode 100644 index 83de6ff..0000000 Binary files a/static/img/sso-providers/onelogin/6.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/7.png b/static/img/sso-providers/onelogin/7.png deleted file mode 100644 index 61812ec..0000000 Binary files a/static/img/sso-providers/onelogin/7.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/8.png b/static/img/sso-providers/onelogin/8.png deleted file mode 100644 index fd58237..0000000 Binary files a/static/img/sso-providers/onelogin/8.png and /dev/null differ diff --git a/static/img/sso-providers/onelogin/9.png b/static/img/sso-providers/onelogin/9.png deleted file mode 100644 index 7c14895..0000000 Binary files a/static/img/sso-providers/onelogin/9.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/1.png b/static/img/sso-providers/pingone/1.png deleted file mode 100644 index 602acb8..0000000 Binary files a/static/img/sso-providers/pingone/1.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/2.png b/static/img/sso-providers/pingone/2.png deleted file mode 100644 index dca27d2..0000000 Binary files a/static/img/sso-providers/pingone/2.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/3.png b/static/img/sso-providers/pingone/3.png deleted file mode 100644 index 1efb021..0000000 Binary files a/static/img/sso-providers/pingone/3.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/4.png b/static/img/sso-providers/pingone/4.png deleted file mode 100644 index 3f624cf..0000000 Binary files a/static/img/sso-providers/pingone/4.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/5.png b/static/img/sso-providers/pingone/5.png deleted file mode 100644 index e30a4a3..0000000 Binary files a/static/img/sso-providers/pingone/5.png and /dev/null differ diff --git a/static/img/sso-providers/pingone/6.png b/static/img/sso-providers/pingone/6.png deleted file mode 100644 index 83e1f6f..0000000 Binary files a/static/img/sso-providers/pingone/6.png and /dev/null differ diff --git a/static/img/sso-providers/rippling/1.png b/static/img/sso-providers/rippling/1.png deleted file mode 100644 index e9e9265..0000000 Binary files a/static/img/sso-providers/rippling/1.png and /dev/null differ diff --git a/static/img/sso-providers/rippling/2.png b/static/img/sso-providers/rippling/2.png deleted file mode 100644 index 7b24410..0000000 Binary files a/static/img/sso-providers/rippling/2.png and /dev/null differ diff --git a/static/img/sso-providers/rippling/3.png b/static/img/sso-providers/rippling/3.png deleted file mode 100644 index e086907..0000000 Binary files a/static/img/sso-providers/rippling/3.png and /dev/null differ diff --git a/static/img/sso-providers/rippling/4.png b/static/img/sso-providers/rippling/4.png deleted file mode 100644 index 0a5b50b..0000000 Binary files a/static/img/sso-providers/rippling/4.png and /dev/null differ diff --git a/static/img/sso-providers/rippling/5.png b/static/img/sso-providers/rippling/5.png deleted file mode 100644 index f6497d1..0000000 Binary files a/static/img/sso-providers/rippling/5.png and /dev/null differ diff --git a/static/img/sso/box-1.png b/static/img/sso/box-1.png deleted file mode 100644 index c3c4fe0..0000000 Binary files a/static/img/sso/box-1.png and /dev/null differ diff --git a/static/img/sso/dropbox-1.png b/static/img/sso/dropbox-1.png deleted file mode 100644 index 942018e..0000000 Binary files a/static/img/sso/dropbox-1.png and /dev/null differ diff --git a/static/img/sso/dropbox-2.png b/static/img/sso/dropbox-2.png deleted file mode 100644 index 5814922..0000000 Binary files a/static/img/sso/dropbox-2.png and /dev/null differ diff --git a/static/img/sso/freshchat-1.png b/static/img/sso/freshchat-1.png deleted file mode 100644 index b9e6562..0000000 Binary files a/static/img/sso/freshchat-1.png and /dev/null differ diff --git a/static/img/sso/freshchat-2.png b/static/img/sso/freshchat-2.png deleted file mode 100644 index 4156c45..0000000 Binary files a/static/img/sso/freshchat-2.png and /dev/null differ diff --git a/static/img/sso/postman-1.png b/static/img/sso/postman-1.png deleted file mode 100644 index 59fe2f9..0000000 Binary files a/static/img/sso/postman-1.png and /dev/null differ diff --git a/static/img/sso/postman-2.png b/static/img/sso/postman-2.png deleted file mode 100644 index 1489ef8..0000000 Binary files a/static/img/sso/postman-2.png and /dev/null differ diff --git a/static/img/sso/sentry-metadata.png b/static/img/sso/sentry-metadata.png deleted file mode 100644 index caded37..0000000 Binary files a/static/img/sso/sentry-metadata.png and /dev/null differ diff --git a/static/img/team/aswin.jpg b/static/img/team/aswin.jpg deleted file mode 100644 index ccbd259..0000000 Binary files a/static/img/team/aswin.jpg and /dev/null differ diff --git a/static/img/team/deepak.jpg b/static/img/team/deepak.jpg deleted file mode 100644 index c17d600..0000000 Binary files a/static/img/team/deepak.jpg and /dev/null differ diff --git a/static/img/team/jay.jpg b/static/img/team/jay.jpg deleted file mode 100644 index 18eb02e..0000000 Binary files a/static/img/team/jay.jpg and /dev/null differ diff --git a/static/img/team/kiran.jpg b/static/img/team/kiran.jpg deleted file mode 100644 index 7792ab8..0000000 Binary files a/static/img/team/kiran.jpg and /dev/null differ diff --git a/static/img/team/nathan.jpg b/static/img/team/nathan.jpg deleted file mode 100644 index 61b67a9..0000000 Binary files a/static/img/team/nathan.jpg and /dev/null differ diff --git a/static/img/team/sama.jpg b/static/img/team/sama.jpg deleted file mode 100644 index 9e26a23..0000000 Binary files a/static/img/team/sama.jpg and /dev/null differ diff --git a/static/img/team/utkarsh.jpg b/static/img/team/utkarsh.jpg deleted file mode 100644 index cdfe6e6..0000000 Binary files a/static/img/team/utkarsh.jpg and /dev/null differ diff --git a/static/img/tutorial/brand.png b/static/img/tutorial/brand.png new file mode 100644 index 0000000..e1447e6 Binary files /dev/null and b/static/img/tutorial/brand.png differ diff --git a/static/img/tutorial/docsVersionDropdown.png b/static/img/tutorial/docsVersionDropdown.png new file mode 100644 index 0000000..ff1cbe6 Binary files /dev/null and b/static/img/tutorial/docsVersionDropdown.png differ diff --git a/static/img/tutorial/localeDropdown.png b/static/img/tutorial/localeDropdown.png new file mode 100644 index 0000000..d7163f9 Binary files /dev/null and b/static/img/tutorial/localeDropdown.png differ diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000..431cef2 --- /dev/null +++ b/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000..e417050 --- /dev/null +++ b/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000..a05cc03 --- /dev/null +++ b/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1 @@ +docu_tree \ No newline at end of file diff --git a/static/img/website-preview-image.png b/static/img/website-preview-image.png deleted file mode 100644 index 97b298f..0000000 Binary files a/static/img/website-preview-image.png and /dev/null differ diff --git a/static/img/代码库管理/WebIDE/WebIDEGraph.png b/static/img/代码库管理/WebIDE/WebIDEGraph.png new file mode 100644 index 0000000..3e25d0f Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDEGraph.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDEblame.png b/static/img/代码库管理/WebIDE/WebIDEblame.png new file mode 100644 index 0000000..6e94035 Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDEblame.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDE代码在线运行.png b/static/img/代码库管理/WebIDE/WebIDE代码在线运行.png new file mode 100644 index 0000000..28b1161 Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDE代码在线运行.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDE入口.png b/static/img/代码库管理/WebIDE/WebIDE入口.png new file mode 100644 index 0000000..4108a26 Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDE入口.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDE切换分支.png b/static/img/代码库管理/WebIDE/WebIDE切换分支.png new file mode 100644 index 0000000..fc26977 Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDE切换分支.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDE搜索.png b/static/img/代码库管理/WebIDE/WebIDE搜索.png new file mode 100644 index 0000000..2a1e8ae Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDE搜索.png differ diff --git a/static/img/代码库管理/WebIDE/WebIDE行高亮.png b/static/img/代码库管理/WebIDE/WebIDE行高亮.png new file mode 100644 index 0000000..c04e9c3 Binary files /dev/null and b/static/img/代码库管理/WebIDE/WebIDE行高亮.png differ diff --git a/static/img/代码库管理/Webhook/Webhook入口.png b/static/img/代码库管理/Webhook/Webhook入口.png new file mode 100644 index 0000000..f6e721f Binary files /dev/null and b/static/img/代码库管理/Webhook/Webhook入口.png differ diff --git a/static/img/代码库管理/Webhook/Webhook配置.png b/static/img/代码库管理/Webhook/Webhook配置.png new file mode 100644 index 0000000..52bdff4 Binary files /dev/null and b/static/img/代码库管理/Webhook/Webhook配置.png differ diff --git a/static/img/代码库管理/Webhook/删除webhook.png b/static/img/代码库管理/Webhook/删除webhook.png new file mode 100644 index 0000000..431402b Binary files /dev/null and b/static/img/代码库管理/Webhook/删除webhook.png differ diff --git a/static/img/代码库管理/Webhook/添加Webhook.png b/static/img/代码库管理/Webhook/添加Webhook.png new file mode 100644 index 0000000..b338e3c Binary files /dev/null and b/static/img/代码库管理/Webhook/添加Webhook.png differ diff --git a/static/img/代码库管理/Webhook/编辑Webhook.png b/static/img/代码库管理/Webhook/编辑Webhook.png new file mode 100644 index 0000000..7fba6f5 Binary files /dev/null and b/static/img/代码库管理/Webhook/编辑Webhook.png differ diff --git a/static/img/代码库管理/仓库创建/仓库创建.png b/static/img/代码库管理/仓库创建/仓库创建.png new file mode 100644 index 0000000..3ceba73 Binary files /dev/null and b/static/img/代码库管理/仓库创建/仓库创建.png differ diff --git a/static/img/代码库管理/仓库创建/新建项目.png b/static/img/代码库管理/仓库创建/新建项目.png new file mode 100644 index 0000000..e9c7bc9 Binary files /dev/null and b/static/img/代码库管理/仓库创建/新建项目.png differ diff --git a/static/img/代码库管理/仓库设置/仓库设置.png b/static/img/代码库管理/仓库设置/仓库设置.png new file mode 100644 index 0000000..3163cc7 Binary files /dev/null and b/static/img/代码库管理/仓库设置/仓库设置.png differ diff --git a/static/img/代码库管理/仓库设置/基本设置.png b/static/img/代码库管理/仓库设置/基本设置.png new file mode 100644 index 0000000..eaae927 Binary files /dev/null and b/static/img/代码库管理/仓库设置/基本设置.png differ diff --git a/static/img/代码库管理/成员管理/删除项目成员.png b/static/img/代码库管理/成员管理/删除项目成员.png new file mode 100644 index 0000000..e6bbde7 Binary files /dev/null and b/static/img/代码库管理/成员管理/删除项目成员.png differ diff --git a/static/img/代码库管理/成员管理/成员管理入口.png b/static/img/代码库管理/成员管理/成员管理入口.png new file mode 100644 index 0000000..aedc665 Binary files /dev/null and b/static/img/代码库管理/成员管理/成员管理入口.png differ diff --git a/static/img/代码库管理/成员管理/添加成员.png b/static/img/代码库管理/成员管理/添加成员.png new file mode 100644 index 0000000..c8132d7 Binary files /dev/null and b/static/img/代码库管理/成员管理/添加成员.png differ diff --git a/static/img/代码库管理/成员管理/筛选、搜索项目成员.png b/static/img/代码库管理/成员管理/筛选、搜索项目成员.png new file mode 100644 index 0000000..d325a4d Binary files /dev/null and b/static/img/代码库管理/成员管理/筛选、搜索项目成员.png differ diff --git a/static/img/代码库管理/成员管理/项目成员权限管理.png b/static/img/代码库管理/成员管理/项目成员权限管理.png new file mode 100644 index 0000000..9e3b1dc Binary files /dev/null and b/static/img/代码库管理/成员管理/项目成员权限管理.png differ diff --git a/static/img/代码库管理/标签和发行版管理/修改发行版.png b/static/img/代码库管理/标签和发行版管理/修改发行版.png new file mode 100644 index 0000000..7ea4ffe Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/修改发行版.png differ diff --git a/static/img/代码库管理/标签和发行版管理/删除发行版.png b/static/img/代码库管理/标签和发行版管理/删除发行版.png new file mode 100644 index 0000000..9b4018b Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/删除发行版.png differ diff --git a/static/img/代码库管理/标签和发行版管理/删除标签.png b/static/img/代码库管理/标签和发行版管理/删除标签.png new file mode 100644 index 0000000..88dfb18 Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/删除标签.png differ diff --git a/static/img/代码库管理/标签和发行版管理/发布新版本.png b/static/img/代码库管理/标签和发行版管理/发布新版本.png new file mode 100644 index 0000000..8c77be4 Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/发布新版本.png differ diff --git a/static/img/代码库管理/标签和发行版管理/发行版修改页面.png b/static/img/代码库管理/标签和发行版管理/发行版修改页面.png new file mode 100644 index 0000000..970b153 Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/发行版修改页面.png differ diff --git a/static/img/代码库管理/标签和发行版管理/查看发行版.png b/static/img/代码库管理/标签和发行版管理/查看发行版.png new file mode 100644 index 0000000..3e93db8 Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/查看发行版.png differ diff --git a/static/img/代码库管理/标签和发行版管理/标签和发行版管理入口.png b/static/img/代码库管理/标签和发行版管理/标签和发行版管理入口.png new file mode 100644 index 0000000..7011f06 Binary files /dev/null and b/static/img/代码库管理/标签和发行版管理/标签和发行版管理入口.png differ diff --git a/static/terms.html b/static/terms.html deleted file mode 100644 index 547ebdf..0000000 --- a/static/terms.html +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - - - - - - - - - - - - -
-
Terms and Conditions 1
BoxyHQ Inc
Terms and Conditions
Effective as of August 9, 2021.
This agreement constitutes a binding legal contract between BoxyHQ Inc. (“BoxyHQ
Inc.”) (sometimes referred to as “we”, “us” or “our”) and you, with respect to your
use of https://boxyhq.com and all websites, applications and communications that
post a link to this agreement (collectively, the “Site”)(“Terms and Conditions”).
We reserve our right to change these Terms and Conditions in the future. Except as
explicitly stated otherwise, your continued use of the Site will constitute deemed
acceptance of our updated Terms and Conditions.
1. Site
(a) We may from time to time, at our sole and absolute discretion and without notice
to you, update the Site (or any part of it). We will not be liable to you or any third
party for any modification, variation, interruption, suspension or discontinuation of
the Site.
(b) The Site may provide links to third party websites that are not owned, managed or
controlled by us. You expressly acknowledge and agree that we are not
responsible for the content of those third party websites. You are encouraged to
read that third party’s terms and conditions, privacy policy and any other
document that governs your relationship with that third party.
(c) The Site uses cookies in accordance with our Cookies Policy, which can be found
here: https://boxyhq.com/privacy.
2. Account
-
Terms and Conditions 2
(a) To access certain features on the Site, you may be required to create an account
with us in the form provided by us.
(b) You agree that by registering an account with us that you: ; all information you
provide to us during the registration process is true and accurate to the best of
your belief; you are at least 18 years of age; and you have capacity to enter into
contractual arrangements.
(c) You agree that you are solely responsible for your account and all activities
conducted on your account. You must keep your password and any other login
information private and secure. Your account is registered to you, and you may
not assign, transfer or otherwise dispose of your interest in your account without
our express written permission.
(d) We may, from time to time, provide rules that govern your activities whilst using
your account (“Account Rules”). You expressly acknowledge and agree that you
will abide by these Rules. Should you be in breach of the Account Rules, we may
(at our absolute and sole discretion) restrict, prohibit, suspend or terminate your
account. Should your account be terminated in accordance with this clause, we
are not liable to you, or any third party, for any loss or damage suffered.
(e) You may terminate your account, for any reason, by notifying us. You agree,
however, that by terminating your account, your experience on the Site may be
limited. We are not liable to you, or any third party, for any loss or damage
suffered because of this.
3. Communications
(a) By using the Site and providing your e-mail address, you agree to subscribe to
newsletters, marketing or promotional materials and other information we may
send. You may unsubscribe from these emails at any time.
4. User Submitted Content
(a) The Site may allow you to publish, share, store and otherwise make available
certain information, text, graphics, videos, or other content (“Content”).
(b) We cannot guarantee the accuracy, integrity or quality of Content posted by users
of the Site.
(c) We are not liable for any statements, representations, or Content provided by Site
-
Terms and Conditions 3
users. Any opinions, advice or recommendations expressed therein are those of
the users providing such Content and not those of BoxyHQ Inc..
(d) You represent and warrant that you own or otherwise control the Content you post
on the Site, and that the sharing of your Content on or through the Site does not
violate the privacy rights, publicity rights, copyrights, contract rights or any other
rights of any person or entity.
(e) We take no responsibility and assume no liability for Content you or any third
party posts on or through the Site. However, by posting Content you grant us a
perpetual, worldwide, irrevocable, unrestrictive, non-exclusive royalty-free licence
to use any Content in any manner whatsoever without compensation or attribution
to you.
5. Prohibited Uses
Unless explicitly agreed by us, you acknowledge and agree that you may not use our
Site for the following purposes:
use the Site in any way that violates any applicable local, national or international
law or regulation
impersonate or attempt to impersonate any person or entity
engage in any conduct that restricts or inhibits anyone’s use or enjoyment of the
Site
monitor or copy any of the material on the Site for any unauthorized purpose
without our prior written consent
attempt to gain unauthorized access to, interfere with, damage or disrupt any
parts of the Site
use the Site in any manner that could disable, overburden, damage, or impair the
Site
attempt to interfere with the proper working of the Site in any way whatsoever
6. Fees and Payment
(a) You may be required to purchase or pay a fee to access some features of the
Site. You agree to pay all fees due and payable to us (including all applicable
taxes) at the prices then in effect for your purchases.
(b) You represent and warrant that the information you provide to us is true, correct
-
Terms and Conditions 4
and complete.
(c) Where payments are processed through our Site using third party payment
processors, you also agree to any terms and conditions set by those payment
processors.
7. Free Trial
Where we provide you with a free trial to use the Site, for the duration of the free trial
period, we may at our sole discretion: (i) limit your ability to access certain features;
(ii) limit any technical support to you that may usually be available to paying users;
(iii) without notice to you, stop your free trial.
8. Specifications
(a) We may, from time to time, set certain minimum specifications required to access
our Site to ensure all users have the best possible experience. You are solely
responsible to obtain, keep and maintain all equipment and other software that
meets our minimum specifications to enable you to have the best possible
experience of our Site.
(b) We may from time to time, at our sole discretion and without notice to you, make
variations, modifications, alterations or updates to our Site (“Enhancements”).
These Enhancements may be made to improve our Site to you or to comply with
relevant legal requirements.
(c) We will use reasonable endeavors to notify you of any scheduled disruptions to
our Site, including those due to any Enhancements. However, regardless of
whether a disruption is scheduled or not, we are not liable to you or any third
party for any loss or damage caused by any disruption to our Site.
9. Copyrights and Trademarks
(a) Except as expressly stated otherwise, you acknowledge and agree that the
original content on the Site, and the software, features and functionality
comprising the Site are the exclusive property of BoxyHQ Inc. (the “Materials”)
and its licensors.
(b) You agree you will not copy, reproduce, create derivative works from, transmit or
distribute the Materials in any way without our prior written consent.
10. Limitation of Liability, Indemnities and Warranties
-
Terms and Conditions 5
(a) Except as expressly provided by law, we shall not be liable to you or any third
parties for any loss, damage, expenses or any other liability arising directly or
indirectly from the performance of our services to you. To the fullest extent
permitted by law, all warranties or conditions implied by statute, at law, by trade,
custom or otherwise are excluded.
(b) You acknowledge and agree that you assume sole and entire responsibility for,
and indemnify and hold us harmless from, any and all claims, liabilities, losses,
expenses, responsibilities and damages by reason of any claim, proceedings,
action, liability or injury arising out of or as a result of (i) your conduct in relation to
these Terms and Conditions; (ii) your use of any material, advice or other results
of the services provided to you; (iii) your relations with your clients and/or other
third parties; or (iv) any breach of these Terms and Conditions by you.
11. Term and Termination
(a) These Terms and Conditions will remain in full force and effect while you use the
Site.
(b) We may, without notice to you, immediately stop providing any services to you at
our sole discretion for any reason whatsoever.
(c) Where these Terms and Conditions are terminated in accordance with these
Terms and Conditions, they will terminate without prejudice to any rights either
party may have had against the other prior to termination. Further, all provisions of
which by their nature should survive termination shall survive termination,
including, without limitation: (i) all intellectual property you have granted us under
these Terms and Conditions; and (ii) your obligation to pay any fees due to us at
the time of termination; and (iii) warranty disclaimers, indemnity and limitations of
liability.
12. Assignment
(a) These Terms and Conditions will bind and inure for the benefit of the parties,
including their respective successors, permitted assigns and legal representatives.
(b) We may, without notice to you, immediately stop providing any services to you at
our sole discretion for any reason whatsoever.
(c) Provided your rights are not affected under these Terms and Conditions, we will
be permitted to assign our interest in these Terms and Conditions without prior
notice to you. However, you may not assign, transfer, novate or other dispose of
-
Terms and Conditions 6
your rights and obligations under these Terms and Conditions without our express
written approval (which we may withhold in our sole discretion).
13. Privacy
You acknowledge that you have read and understood the terms of BoxyHQ Inc.’s
Privacy Policy, which can be found here: https://boxyhq.com/privacy. You agree that
we may use your information (including disclosure to third parties) in accordance with
the terms of our Privacy Policy.
14. Non-Waiver
Our failure to exercise, or delay in exercising, our rights under these Terms and
Conditions does not operate as a waiver of that right.
15. Exclusion of Implied Relationships
Nothing in these Terms and Conditions shall be deemed or construed to constitute
any party a partner, agent, representative, employer or employee of another party or
to create any trust or commercial partnership unless specifically otherwise provided.
We do not owe you any duty of good faith under these Terms and Conditions.
16. Severability
If any part of these Terms and Conditions are held to be illegal, invalid, or
unenforceable, then that part shall be deemed deleted and shall not affect the validity
and enforceability of the remaining provisions of these Terms and Conditions.
17. Entire Agreement
These Terms and Conditions constitute the entire agreement between the parties
with respect to the Company’s services and supersede all previous versions of the
Terms and Conditions, understandings, arrangements, agreements, and
communications, whether verbal or written, between the parties.
18. Applicable Law and Jurisdiction
These Terms and Conditions shall be governed by and construed in accordance with
Delaware law. Both parties agree to submit to the jurisdiction of the courts of
-
Terms and Conditions 7
Delaware with respect to any claim or dispute arising out of these Terms and
Conditions.
-
-
- -
- - diff --git a/yarn.lock b/yarn.lock index 17edf77..9cbe89c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,209 +2,195 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz" - integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== +"@algolia/autocomplete-core@1.8.2": + "integrity" "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz" + "version" "1.8.2" dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-core@1.9.4": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.4.tgz" - integrity sha512-sakE1Lks15UXKHkjDyxZ7yT/fGrHrmvlfQ1Fz3m/cqXxBUhBtD5AKuuSpPUW0M/SaTnGSOf/8jJnOcyjznZ1UA== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.4" - "@algolia/autocomplete-shared" "1.9.4" + "@algolia/autocomplete-shared" "1.8.2" "@algolia/autocomplete-js@^1.8.2": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-js/-/autocomplete-js-1.9.4.tgz" - integrity sha512-jyGHMpKrHpFqk6zrQQKTUEDHHSfOpNqiOJEZKXidnbOnTjlvuN+b0kLj5trSjXn2eqy7uQttl0nI81iQZsZX0g== + "integrity" "sha512-GOhycxFybX8ADLPW62KCGuo1czlynPYs/JyP0QnJrFVDY86SX6/tK6EudF8YKmZ6qvcmyhhHu0XHtMUlQiaCig==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.8.2.tgz" + "version" "1.8.2" dependencies: - "@algolia/autocomplete-core" "1.9.4" - "@algolia/autocomplete-preset-algolia" "1.9.4" - "@algolia/autocomplete-shared" "1.9.4" - htm "^3.1.1" - preact "^10.13.2" + "@algolia/autocomplete-core" "1.8.2" + "@algolia/autocomplete-preset-algolia" "1.8.2" + "@algolia/autocomplete-shared" "1.8.2" + "htm" "^3.1.1" + "preact" "^10.0.0" -"@algolia/autocomplete-plugin-algolia-insights@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz" - integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== +"@algolia/autocomplete-preset-algolia@1.8.2": + "integrity" "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz" + "version" "1.8.2" dependencies: - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/autocomplete-shared" "1.8.2" -"@algolia/autocomplete-plugin-algolia-insights@1.9.4": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.4.tgz" - integrity sha512-1ZzFX3wDYWUPPwEWmjEjBlYa4oWaI57ntPIEMVNB+vdPYLy9QCroRsKruCHgmD1+GekAdEj7ayYkDlbB//kdiw== - dependencies: - "@algolia/autocomplete-shared" "1.9.4" - -"@algolia/autocomplete-preset-algolia@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz" - integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== - dependencies: - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-preset-algolia@1.9.4": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.4.tgz" - integrity sha512-YsLWhQBAFj9mSo84jj4ggkT4fsR5kOsqu18wKyAHbJtYW52lFyaMnRB2ohK4DznGEhjSD74kjy1hYuoDd/KeXg== - dependencies: - "@algolia/autocomplete-shared" "1.9.4" - -"@algolia/autocomplete-shared@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz" - integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== - -"@algolia/autocomplete-shared@1.9.4": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.4.tgz" - integrity sha512-4iEdI9K2BXEATYeptL2ZVJPNQ5Zd42WTqjnLPsuJCUwPTnrnpHZEJcmUQYktnMnbgvvVzIByRrRJ1NSLQOno3w== +"@algolia/autocomplete-shared@1.8.2": + "integrity" "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz" + "version" "1.8.2" "@algolia/autocomplete-theme-classic@^1.8.2": - version "1.9.4" - resolved "https://registry.npmmirror.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.9.4.tgz" - integrity sha512-ydeYji3VKIPRFHTnIBVbwocFs9FOKLJnQtYIqmT3z3SVhsceeju2XUD9v3jZRrKb9FVrs1oKQaw0MsessZXMkw== + "integrity" "sha512-WWgmH3b74G8AWVl7F3ViphxH5rd9iiS8D/uUmkn2RT2IjH2fbUghJjY5EGpc4Kn5HhunNhVoFpYdtDaDsEdqPA==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.8.2.tgz" + "version" "1.8.2" -"@algolia/cache-browser-local-storage@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz" - integrity sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw== +"@algolia/cache-browser-local-storage@4.14.2": + "integrity" "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==" + "resolved" "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/cache-common" "4.18.0" + "@algolia/cache-common" "4.14.2" -"@algolia/cache-common@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.18.0.tgz" - integrity sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg== +"@algolia/cache-common@4.14.2": + "integrity" "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" + "resolved" "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz" + "version" "4.14.2" -"@algolia/cache-in-memory@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz" - integrity sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw== +"@algolia/cache-in-memory@4.14.2": + "integrity" "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==" + "resolved" "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/cache-common" "4.18.0" + "@algolia/cache-common" "4.14.2" -"@algolia/client-account@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.18.0.tgz" - integrity sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew== +"@algolia/client-account@4.14.2": + "integrity" "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==" + "resolved" "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-analytics@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz" - integrity sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ== +"@algolia/client-analytics@4.14.2": + "integrity" "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==" + "resolved" "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-common@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.18.0.tgz" - integrity sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg== +"@algolia/client-common@4.14.2": + "integrity" "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==" + "resolved" "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-personalization@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz" - integrity sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A== +"@algolia/client-personalization@4.14.2": + "integrity" "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==" + "resolved" "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-search@4.18.0", "@algolia/client-search@^4.12.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.18.0.tgz" - integrity sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g== +"@algolia/client-search@^4.12.0", "@algolia/client-search@>= 4.5.1 < 6", "@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@4.14.2": + "integrity" "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==" + "resolved" "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" "@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.npmmirror.com/@algolia/events/-/events-4.0.1.tgz" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + "integrity" "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + "resolved" "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" + "version" "4.0.1" -"@algolia/logger-common@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.18.0.tgz" - integrity sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg== +"@algolia/logger-common@4.14.2": + "integrity" "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" + "resolved" "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz" + "version" "4.14.2" -"@algolia/logger-console@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.18.0.tgz" - integrity sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g== +"@algolia/logger-console@4.14.2": + "integrity" "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==" + "resolved" "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/logger-common" "4.18.0" + "@algolia/logger-common" "4.14.2" -"@algolia/requester-browser-xhr@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz" - integrity sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ== +"@algolia/requester-browser-xhr@4.14.2": + "integrity" "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==" + "resolved" "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/requester-common" "4.18.0" + "@algolia/requester-common" "4.14.2" -"@algolia/requester-common@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.18.0.tgz" - integrity sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA== +"@algolia/requester-common@4.14.2": + "integrity" "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" + "resolved" "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz" + "version" "4.14.2" -"@algolia/requester-node-http@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz" - integrity sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ== +"@algolia/requester-node-http@4.14.2": + "integrity" "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==" + "resolved" "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/requester-common" "4.18.0" + "@algolia/requester-common" "4.14.2" -"@algolia/transporter@4.18.0": - version "4.18.0" - resolved "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.18.0.tgz" - integrity sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw== +"@algolia/transporter@4.14.2": + "integrity" "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==" + "resolved" "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/cache-common" "4.18.0" - "@algolia/logger-common" "4.18.0" - "@algolia/requester-common" "4.18.0" + "@algolia/cache-common" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/requester-common" "4.14.2" -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== +"@ampproject/remapping@^2.1.0": + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.5.tgz" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.5.tgz" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": + "integrity" "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz" + "version" "7.20.5" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.4.0-0": + "integrity" "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz" + "version" "7.20.5" + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-module-transforms" "^7.20.2" + "@babel/helpers" "^7.20.5" + "@babel/parser" "^7.20.5" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" "@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.12.9.tgz?cache=0&sync_timestamp=1623708306477&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.12.9.tgz" - integrity sha1-/UUMTsEM27mA4pKLeqeihIRZP8g= + "integrity" "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz" + "version" "7.12.9" dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.12.5" @@ -214,919 +200,867 @@ "@babel/template" "^7.12.7" "@babel/traverse" "^7.12.9" "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.1" + "json5" "^2.1.2" + "lodash" "^4.17.19" + "resolve" "^1.3.2" + "semver" "^5.4.1" + "source-map" "^0.5.0" -"@babel/core@^7.18.6", "@babel/core@^7.19.6": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/core/-/core-7.22.5.tgz" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.20.5": + "integrity" "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.5.tgz" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== - dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.20.5" "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "jsesc" "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.18.6": + "integrity" "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + "integrity" "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": + "integrity" "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" + "@babel/compat-data" "^7.20.0" + "@babel/helper-validator-option" "^7.18.6" + "browserslist" "^4.21.3" + "semver" "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.20.5": + "integrity" "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + "integrity" "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "regexpu-core" "^5.2.1" -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== +"@babel/helper-define-polyfill-provider@^0.3.3": + "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + "version" "0.3.3" dependencies: "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.18.9": + "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + "version" "7.18.9" -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-explode-assignable-expression@^7.18.6": + "integrity" "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" + "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.6" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/types" "^7.22.5" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== +"@babel/helper-hoist-variables@^7.18.6": + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@babel/helper-member-expression-to-functions@^7.18.9": + "integrity" "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.9" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== +"@babel/helper-module-imports@^7.18.6": + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.6" -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": + "integrity" "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" + +"@babel/helper-optimise-call-expression@^7.18.6": + "integrity" "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + "integrity" "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" + "version" "7.20.2" "@babel/helper-plugin-utils@7.10.4": - version "7.10.4" - resolved "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1623280305577&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz" - integrity sha1-L3WoMSadT2d95JmG3/WZJ1M883U= + "integrity" "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" + "version" "7.10.4" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + "integrity" "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": + "integrity" "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz" + "version" "7.19.1" dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": + "integrity" "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.20.2" -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + "integrity" "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== +"@babel/helper-split-export-declaration@^7.18.6": + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.18.6" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.19.4": + "integrity" "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" + "version" "7.19.4" -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + "version" "7.19.1" -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.18.6": + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== +"@babel/helper-wrap-function@^7.18.9": + "integrity" "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.5.tgz" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.20.5": + "integrity" "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz" + "version" "7.20.6" dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.5.tgz" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.18.6": + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/helper-validator-identifier" "^7.18.6" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.5.tgz" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== +"@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.8", "@babel/parser@^7.20.5": + "integrity" "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz" + "version" "7.20.5" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + "integrity" "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + "integrity" "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.20.1": + "integrity" "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz" + "version" "7.20.1" + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + "integrity" "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + "integrity" "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + "integrity" "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + "integrity" "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + "integrity" "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + "integrity" "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + "integrity" "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + "integrity" "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz" + "version" "7.20.2" + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.1" "@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.nlark.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.12.1.tgz?cache=0&sync_timestamp=1624312719049&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.12.1.tgz" - integrity sha1-3vm9A86g+bcig9rA7CLSicdpEGk= + "integrity" "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz" + "version" "7.12.1" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + "integrity" "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== +"@babel/plugin-proposal-optional-chaining@^7.18.9": + "integrity" "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + "integrity" "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + "integrity" "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz" + "version" "7.20.5" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + "integrity" "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.nlark.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.nlark.com/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM= + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.20.0": + "integrity" "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.18.6": + "integrity" "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.nlark.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.12.1.tgz?cache=0&sync_timestamp=1623280326005&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.12.1.tgz" - integrity sha1-nZ01fMgYqnrnk1kXwSV/Z2d6CSY= + "integrity" "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz" + "version" "7.12.1" dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3", "@babel/plugin-syntax-object-rest-spread@7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz?cache=0&sync_timestamp=1623280492352&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.14.5.tgz" - integrity sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw= + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.20.0": + "integrity" "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== +"@babel/plugin-transform-arrow-functions@^7.18.6": + "integrity" "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + "integrity" "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + "integrity" "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.20.2": + "integrity" "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz" + "version" "7.20.5" + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.20.2": + "integrity" "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz" + "version" "7.20.2" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" + "globals" "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + "integrity" "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.20.2": + "integrity" "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz" + "version" "7.20.2" + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + "integrity" "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-duplicate-keys@^7.18.9": + "integrity" "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + "integrity" "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-for-of@^7.18.8": + "integrity" "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + "version" "7.18.8" dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-function-name@^7.18.9": + "integrity" "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== +"@babel/plugin-transform-literals@^7.18.9": + "integrity" "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-member-expression-literals@^7.18.6": + "integrity" "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== +"@babel/plugin-transform-modules-amd@^7.19.6": + "integrity" "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== +"@babel/plugin-transform-modules-commonjs@^7.19.6": + "integrity" "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - globals "^11.1.0" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-simple-access" "^7.19.4" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-modules-systemjs@^7.19.6": + "integrity" "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== +"@babel/plugin-transform-modules-umd@^7.18.6": + "integrity" "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + "integrity" "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-new-target@^7.18.6": + "integrity" "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== +"@babel/plugin-transform-object-super@^7.18.6": + "integrity" "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.1": + "integrity" "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== +"@babel/plugin-transform-property-literals@^7.18.6": + "integrity" "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-constant-elements@^7.18.12": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz" - integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== + "integrity" "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== +"@babel/plugin-transform-react-display-name@^7.18.6": + "integrity" "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.18.6": + "integrity" "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz" - integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== +"@babel/plugin-transform-react-jsx@^7.18.6": + "integrity" "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + "integrity" "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== +"@babel/plugin-transform-regenerator@^7.18.6": + "integrity" "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" + "@babel/helper-plugin-utils" "^7.20.2" + "regenerator-transform" "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.18.6": + "integrity" "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.18.6": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz" - integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - semver "^6.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "semver" "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.18.6": + "integrity" "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.19.0": + "integrity" "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.18.6": + "integrity" "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.18.9": + "integrity" "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.18.9": + "integrity" "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz" - integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== +"@babel/plugin-transform-typescript@^7.18.6": + "integrity" "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== +"@babel/plugin-transform-unicode-escapes@^7.18.10": + "integrity" "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" + "version" "7.18.10" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-regex@^7.18.6": + "integrity" "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.5.tgz" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + "integrity" "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-import-assertions" "^7.20.0" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1136,194 +1070,165 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" + "@babel/types" "^7.20.2" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "core-js-compat" "^3.25.1" + "semver" "^6.3.0" "@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + "version" "0.1.5" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" - esutils "^2.0.2" + "esutils" "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.22.5.tgz" - integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== + "integrity" "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" + "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.5" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/preset-typescript@^7.18.6": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz" - integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + "integrity" "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==" + "resolved" "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-typescript" "^7.22.5" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" "@babel/runtime-corejs3@^7.18.6": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz" - integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== + "integrity" "sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ==" + "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz" + "version" "7.20.6" dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.13.11" + "core-js-pure" "^3.25.1" + "regenerator-runtime" "^0.13.11" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.5.tgz" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + "integrity" "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz" + "version" "7.21.0" dependencies: - regenerator-runtime "^0.13.11" + "regenerator-runtime" "^0.13.11" -"@babel/template@^7.12.7", "@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/template@^7.12.7", "@babel/template@^7.18.10": + "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + "version" "7.18.10" dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.5.tgz" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5": + "integrity" "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" + "debug" "^4.1.0" + "globals" "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.22.5.tgz" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.4.4": + "integrity" "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz" + "version" "7.20.5" dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + "to-fast-properties" "^2.0.0" "@cmfcmf/docusaurus-search-local@1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.1.0.tgz" - integrity sha512-0IVb/aA0IK8ZlktuxmgXmluXfcSpo6Vdd2nG21y1aOH9nVYnPP231Dn0H8Ng9Qf9ronQQCDWHnuWpYOr9rUrEQ== + "integrity" "sha512-0IVb/aA0IK8ZlktuxmgXmluXfcSpo6Vdd2nG21y1aOH9nVYnPP231Dn0H8Ng9Qf9ronQQCDWHnuWpYOr9rUrEQ==" + "resolved" "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.1.0.tgz" + "version" "1.1.0" dependencies: "@algolia/autocomplete-js" "^1.8.2" "@algolia/autocomplete-theme-classic" "^1.8.2" "@algolia/client-search" "^4.12.0" - algoliasearch "^4.12.0" - cheerio "^1.0.0-rc.9" - clsx "^1.1.1" - lunr-languages "^1.4.0" - mark.js "^8.11.1" + "algoliasearch" "^4.12.0" + "cheerio" "^1.0.0-rc.9" + "clsx" "^1.1.1" + "lunr-languages" "^1.4.0" + "mark.js" "^8.11.1" "@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmmirror.com/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "integrity" "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + "resolved" "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + "version" "1.5.0" -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@docsearch/css@3.5.1": - version "3.5.1" - resolved "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.1.tgz" - integrity sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA== +"@docsearch/css@3.3.4": + "integrity" "sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==" + "resolved" "https://registry.npmjs.org/@docsearch/css/-/css-3.3.4.tgz" + "version" "3.3.4" "@docsearch/react@^3.1.1": - version "3.5.1" - resolved "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.1.tgz" - integrity sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ== + "integrity" "sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==" + "resolved" "https://registry.npmjs.org/@docsearch/react/-/react-3.3.4.tgz" + "version" "3.3.4" dependencies: - "@algolia/autocomplete-core" "1.9.3" - "@algolia/autocomplete-preset-algolia" "1.9.3" - "@docsearch/css" "3.5.1" - algoliasearch "^4.0.0" + "@algolia/autocomplete-core" "1.8.2" + "@algolia/autocomplete-preset-algolia" "1.8.2" + "@docsearch/css" "3.3.4" + "algoliasearch" "^4.0.0" -"@docusaurus/core@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/core/-/core-2.4.1.tgz" - integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g== +"@docusaurus/core@^2.0.0", "@docusaurus/core@2.4.1": + "integrity" "sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g==" + "resolved" "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.1.tgz" + "version" "2.4.1" dependencies: "@babel/core" "^7.18.6" "@babel/generator" "^7.18.7" @@ -1344,104 +1249,104 @@ "@docusaurus/utils-validation" "2.4.1" "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.2.1" - autoprefixer "^10.4.7" - babel-loader "^8.2.5" - babel-plugin-dynamic-import-node "^2.3.3" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - clean-css "^5.3.0" - cli-table3 "^0.6.2" - combine-promises "^1.1.0" - commander "^5.1.0" - copy-webpack-plugin "^11.0.0" - core-js "^3.23.3" - css-loader "^6.7.1" - css-minimizer-webpack-plugin "^4.0.0" - cssnano "^5.1.12" - del "^6.1.1" - detect-port "^1.3.0" - escape-html "^1.0.3" - eta "^2.0.0" - file-loader "^6.2.0" - fs-extra "^10.1.0" - html-minifier-terser "^6.1.0" - html-tags "^3.2.0" - html-webpack-plugin "^5.5.0" - import-fresh "^3.3.0" - leven "^3.1.0" - lodash "^4.17.21" - mini-css-extract-plugin "^2.6.1" - postcss "^8.4.14" - postcss-loader "^7.0.0" - prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.3" - react-router-config "^5.1.1" - react-router-dom "^5.3.3" - rtl-detect "^1.0.4" - semver "^7.3.7" - serve-handler "^6.1.3" - shelljs "^0.8.5" - terser-webpack-plugin "^5.3.3" - tslib "^2.4.0" - update-notifier "^5.1.0" - url-loader "^4.1.1" - wait-on "^6.0.1" - webpack "^5.73.0" - webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.9.3" - webpack-merge "^5.8.0" - webpackbar "^5.0.2" + "autoprefixer" "^10.4.7" + "babel-loader" "^8.2.5" + "babel-plugin-dynamic-import-node" "^2.3.3" + "boxen" "^6.2.1" + "chalk" "^4.1.2" + "chokidar" "^3.5.3" + "clean-css" "^5.3.0" + "cli-table3" "^0.6.2" + "combine-promises" "^1.1.0" + "commander" "^5.1.0" + "copy-webpack-plugin" "^11.0.0" + "core-js" "^3.23.3" + "css-loader" "^6.7.1" + "css-minimizer-webpack-plugin" "^4.0.0" + "cssnano" "^5.1.12" + "del" "^6.1.1" + "detect-port" "^1.3.0" + "escape-html" "^1.0.3" + "eta" "^2.0.0" + "file-loader" "^6.2.0" + "fs-extra" "^10.1.0" + "html-minifier-terser" "^6.1.0" + "html-tags" "^3.2.0" + "html-webpack-plugin" "^5.5.0" + "import-fresh" "^3.3.0" + "leven" "^3.1.0" + "lodash" "^4.17.21" + "mini-css-extract-plugin" "^2.6.1" + "postcss" "^8.4.14" + "postcss-loader" "^7.0.0" + "prompts" "^2.4.2" + "react-dev-utils" "^12.0.1" + "react-helmet-async" "^1.3.0" + "react-loadable" "npm:@docusaurus/react-loadable@5.5.2" + "react-loadable-ssr-addon-v5-slorber" "^1.0.1" + "react-router" "^5.3.3" + "react-router-config" "^5.1.1" + "react-router-dom" "^5.3.3" + "rtl-detect" "^1.0.4" + "semver" "^7.3.7" + "serve-handler" "^6.1.3" + "shelljs" "^0.8.5" + "terser-webpack-plugin" "^5.3.3" + "tslib" "^2.4.0" + "update-notifier" "^5.1.0" + "url-loader" "^4.1.1" + "wait-on" "^6.0.1" + "webpack" "^5.73.0" + "webpack-bundle-analyzer" "^4.5.0" + "webpack-dev-server" "^4.9.3" + "webpack-merge" "^5.8.0" + "webpackbar" "^5.0.2" "@docusaurus/cssnano-preset@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz" - integrity sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ== + "integrity" "sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz" + "version" "2.4.1" dependencies: - cssnano-preset-advanced "^5.3.8" - postcss "^8.4.14" - postcss-sort-media-queries "^4.2.1" - tslib "^2.4.0" + "cssnano-preset-advanced" "^5.3.8" + "postcss" "^8.4.14" + "postcss-sort-media-queries" "^4.2.1" + "tslib" "^2.4.0" "@docusaurus/logger@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/logger/-/logger-2.4.1.tgz" - integrity sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg== + "integrity" "sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg==" + "resolved" "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.1.tgz" + "version" "2.4.1" dependencies: - chalk "^4.1.2" - tslib "^2.4.0" + "chalk" "^4.1.2" + "tslib" "^2.4.0" "@docusaurus/mdx-loader@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz" - integrity sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ== + "integrity" "sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz" + "version" "2.4.1" dependencies: "@babel/parser" "^7.18.8" "@babel/traverse" "^7.18.8" "@docusaurus/logger" "2.4.1" "@docusaurus/utils" "2.4.1" "@mdx-js/mdx" "^1.6.22" - escape-html "^1.0.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - image-size "^1.0.1" - mdast-util-to-string "^2.0.0" - remark-emoji "^2.2.0" - stringify-object "^3.3.0" - tslib "^2.4.0" - unified "^9.2.2" - unist-util-visit "^2.0.3" - url-loader "^4.1.1" - webpack "^5.73.0" + "escape-html" "^1.0.3" + "file-loader" "^6.2.0" + "fs-extra" "^10.1.0" + "image-size" "^1.0.1" + "mdast-util-to-string" "^2.0.0" + "remark-emoji" "^2.2.0" + "stringify-object" "^3.3.0" + "tslib" "^2.4.0" + "unified" "^9.2.2" + "unist-util-visit" "^2.0.3" + "url-loader" "^4.1.1" + "webpack" "^5.73.0" "@docusaurus/module-type-aliases@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz" - integrity sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A== + "integrity" "sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A==" + "resolved" "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/react-loadable" "5.5.2" "@docusaurus/types" "2.4.1" @@ -1449,28 +1354,28 @@ "@types/react" "*" "@types/react-router-config" "*" "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" + "react-helmet-async" "*" + "react-loadable" "npm:@docusaurus/react-loadable@5.5.2" "@docusaurus/plugin-client-redirects@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.1.tgz" - integrity sha512-tp0j16gaLIJ4p+IR0P6KDOFsTOGGMY54MNPnmM61Vaqqt5omLqsuKUO8UlCGU1oW/4EIQOhXYy99XYY5MjE+7A== + "integrity" "sha512-tp0j16gaLIJ4p+IR0P6KDOFsTOGGMY54MNPnmM61Vaqqt5omLqsuKUO8UlCGU1oW/4EIQOhXYy99XYY5MjE+7A==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/logger" "2.4.1" "@docusaurus/utils" "2.4.1" "@docusaurus/utils-common" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - eta "^2.0.0" - fs-extra "^10.1.0" - lodash "^4.17.21" - tslib "^2.4.0" + "eta" "^2.0.0" + "fs-extra" "^10.1.0" + "lodash" "^4.17.21" + "tslib" "^2.4.0" "@docusaurus/plugin-content-blog@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz" - integrity sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q== + "integrity" "sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/logger" "2.4.1" @@ -1479,20 +1384,20 @@ "@docusaurus/utils" "2.4.1" "@docusaurus/utils-common" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - cheerio "^1.0.0-rc.12" - feed "^4.2.2" - fs-extra "^10.1.0" - lodash "^4.17.21" - reading-time "^1.5.0" - tslib "^2.4.0" - unist-util-visit "^2.0.3" - utility-types "^3.10.0" - webpack "^5.73.0" + "cheerio" "^1.0.0-rc.12" + "feed" "^4.2.2" + "fs-extra" "^10.1.0" + "lodash" "^4.17.21" + "reading-time" "^1.5.0" + "tslib" "^2.4.0" + "unist-util-visit" "^2.0.3" + "utility-types" "^3.10.0" + "webpack" "^5.73.0" "@docusaurus/plugin-content-docs@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz" - integrity sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA== + "integrity" "sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/logger" "2.4.1" @@ -1502,75 +1407,75 @@ "@docusaurus/utils" "2.4.1" "@docusaurus/utils-validation" "2.4.1" "@types/react-router-config" "^5.0.6" - combine-promises "^1.1.0" - fs-extra "^10.1.0" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.4.0" - utility-types "^3.10.0" - webpack "^5.73.0" + "combine-promises" "^1.1.0" + "fs-extra" "^10.1.0" + "import-fresh" "^3.3.0" + "js-yaml" "^4.1.0" + "lodash" "^4.17.21" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" + "webpack" "^5.73.0" "@docusaurus/plugin-content-pages@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz" - integrity sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA== + "integrity" "sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/mdx-loader" "2.4.1" "@docusaurus/types" "2.4.1" "@docusaurus/utils" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - fs-extra "^10.1.0" - tslib "^2.4.0" - webpack "^5.73.0" + "fs-extra" "^10.1.0" + "tslib" "^2.4.0" + "webpack" "^5.73.0" "@docusaurus/plugin-debug@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz" - integrity sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA== + "integrity" "sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/types" "2.4.1" "@docusaurus/utils" "2.4.1" - fs-extra "^10.1.0" - react-json-view "^1.21.3" - tslib "^2.4.0" + "fs-extra" "^10.1.0" + "react-json-view" "^1.21.3" + "tslib" "^2.4.0" "@docusaurus/plugin-google-analytics@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz" - integrity sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ== + "integrity" "sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/types" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - tslib "^2.4.0" + "tslib" "^2.4.0" "@docusaurus/plugin-google-gtag@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz" - integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA== + "integrity" "sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/types" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - tslib "^2.4.0" + "tslib" "^2.4.0" "@docusaurus/plugin-google-tag-manager@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz" - integrity sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g== + "integrity" "sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/types" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - tslib "^2.4.0" + "tslib" "^2.4.0" "@docusaurus/plugin-sitemap@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz" - integrity sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg== + "integrity" "sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/logger" "2.4.1" @@ -1578,14 +1483,14 @@ "@docusaurus/utils" "2.4.1" "@docusaurus/utils-common" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - fs-extra "^10.1.0" - sitemap "^7.1.1" - tslib "^2.4.0" + "fs-extra" "^10.1.0" + "sitemap" "^7.1.1" + "tslib" "^2.4.0" "@docusaurus/preset-classic@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz" - integrity sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ== + "integrity" "sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/plugin-content-blog" "2.4.1" @@ -1601,18 +1506,18 @@ "@docusaurus/theme-search-algolia" "2.4.1" "@docusaurus/types" "2.4.1" -"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.npmmirror.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== +"@docusaurus/react-loadable@5.5.2": + "integrity" "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" + "version" "5.5.2" dependencies: "@types/react" "*" - prop-types "^15.6.2" + "prop-types" "^15.6.2" -"@docusaurus/theme-classic@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz" - integrity sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg== +"@docusaurus/theme-classic@>=2.2.0", "@docusaurus/theme-classic@2.4.1": + "integrity" "sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/core" "2.4.1" "@docusaurus/mdx-loader" "2.4.1" @@ -1627,23 +1532,23 @@ "@docusaurus/utils-common" "2.4.1" "@docusaurus/utils-validation" "2.4.1" "@mdx-js/react" "^1.6.22" - clsx "^1.2.1" - copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.43" - lodash "^4.17.21" - nprogress "^0.2.0" - postcss "^8.4.14" - prism-react-renderer "^1.3.5" - prismjs "^1.28.0" - react-router-dom "^5.3.3" - rtlcss "^3.5.0" - tslib "^2.4.0" - utility-types "^3.10.0" + "clsx" "^1.2.1" + "copy-text-to-clipboard" "^3.0.1" + "infima" "0.2.0-alpha.43" + "lodash" "^4.17.21" + "nprogress" "^0.2.0" + "postcss" "^8.4.14" + "prism-react-renderer" "^1.3.5" + "prismjs" "^1.28.0" + "react-router-dom" "^5.3.3" + "rtlcss" "^3.5.0" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" "@docusaurus/theme-common@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/theme-common/-/theme-common-2.4.1.tgz" - integrity sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA== + "integrity" "sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/mdx-loader" "2.4.1" "@docusaurus/module-type-aliases" "2.4.1" @@ -1655,17 +1560,17 @@ "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" - clsx "^1.2.1" - parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.5" - tslib "^2.4.0" - use-sync-external-store "^1.2.0" - utility-types "^3.10.0" + "clsx" "^1.2.1" + "parse-numeric-range" "^1.3.0" + "prism-react-renderer" "^1.3.5" + "tslib" "^2.4.0" + "use-sync-external-store" "^1.2.0" + "utility-types" "^3.10.0" "@docusaurus/theme-search-algolia@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz" - integrity sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ== + "integrity" "sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docsearch/react" "^3.1.1" "@docusaurus/core" "2.4.1" @@ -1675,299 +1580,311 @@ "@docusaurus/theme-translations" "2.4.1" "@docusaurus/utils" "2.4.1" "@docusaurus/utils-validation" "2.4.1" - algoliasearch "^4.13.1" - algoliasearch-helper "^3.10.0" - clsx "^1.2.1" - eta "^2.0.0" - fs-extra "^10.1.0" - lodash "^4.17.21" - tslib "^2.4.0" - utility-types "^3.10.0" + "algoliasearch" "^4.13.1" + "algoliasearch-helper" "^3.10.0" + "clsx" "^1.2.1" + "eta" "^2.0.0" + "fs-extra" "^10.1.0" + "lodash" "^4.17.21" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" "@docusaurus/theme-translations@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz" - integrity sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA== + "integrity" "sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz" + "version" "2.4.1" dependencies: - fs-extra "^10.1.0" - tslib "^2.4.0" + "fs-extra" "^10.1.0" + "tslib" "^2.4.0" -"@docusaurus/types@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/types/-/types-2.4.1.tgz" - integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ== +"@docusaurus/types@*", "@docusaurus/types@2.4.1": + "integrity" "sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.1.tgz" + "version" "2.4.1" dependencies: "@types/history" "^4.7.11" "@types/react" "*" - commander "^5.1.0" - joi "^17.6.0" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.73.0" - webpack-merge "^5.8.0" + "commander" "^5.1.0" + "joi" "^17.6.0" + "react-helmet-async" "^1.3.0" + "utility-types" "^3.10.0" + "webpack" "^5.73.0" + "webpack-merge" "^5.8.0" "@docusaurus/utils-common@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/utils-common/-/utils-common-2.4.1.tgz" - integrity sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ== + "integrity" "sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.1.tgz" + "version" "2.4.1" dependencies: - tslib "^2.4.0" + "tslib" "^2.4.0" "@docusaurus/utils-validation@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz" - integrity sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA== + "integrity" "sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/logger" "2.4.1" "@docusaurus/utils" "2.4.1" - joi "^17.6.0" - js-yaml "^4.1.0" - tslib "^2.4.0" + "joi" "^17.6.0" + "js-yaml" "^4.1.0" + "tslib" "^2.4.0" "@docusaurus/utils@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@docusaurus/utils/-/utils-2.4.1.tgz" - integrity sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA== + "integrity" "sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.1.tgz" + "version" "2.4.1" dependencies: "@docusaurus/logger" "2.4.1" "@svgr/webpack" "^6.2.1" - escape-string-regexp "^4.0.0" - file-loader "^6.2.0" - fs-extra "^10.1.0" - github-slugger "^1.4.0" - globby "^11.1.0" - gray-matter "^4.0.3" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.4.0" - url-loader "^4.1.1" - webpack "^5.73.0" + "escape-string-regexp" "^4.0.0" + "file-loader" "^6.2.0" + "fs-extra" "^10.1.0" + "github-slugger" "^1.4.0" + "globby" "^11.1.0" + "gray-matter" "^4.0.3" + "js-yaml" "^4.1.0" + "lodash" "^4.17.21" + "micromatch" "^4.0.5" + "resolve-pathname" "^3.0.0" + "shelljs" "^0.8.5" + "tslib" "^2.4.0" + "url-loader" "^4.1.1" + "webpack" "^5.73.0" "@hapi/hoek@^9.0.0": - version "9.2.0" - resolved "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-9.2.0.tgz" - integrity sha1-85M6RONlhk9NrV25QVgQbVEegTE= + "integrity" "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + "version" "9.3.0" "@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.nlark.com/@hapi/topo/download/@hapi/topo-5.1.0.tgz" - integrity sha1-3ESOMyxsbjek3AL9hLqNRLmvsBI= + "integrity" "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==" + "resolved" "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + "version" "5.1.0" dependencies: "@hapi/hoek" "^9.0.0" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.4.3.tgz" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.0.0": + "integrity" "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz" + "version" "29.0.0" dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.24.1" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.npmmirror.com/@jest/types/-/types-29.5.0.tgz" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.3.1": + "integrity" "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz" + "version" "29.3.1" dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "chalk" "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.1.0": + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" -"@jridgewell/source-map@^0.3.3": - version "0.3.3" - resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.3.tgz" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== +"@jridgewell/source-map@^0.3.2": + "integrity" "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" + "version" "0.3.2" dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" + "version" "0.3.17" dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + "integrity" "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "resolved" "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + "version" "2.0.4" "@mdx-js/mdx@^1.6.22": - version "1.6.22" - resolved "https://registry.npm.taobao.org/@mdx-js/mdx/download/@mdx-js/mdx-1.6.22.tgz" - integrity sha1-inIxV7+Q548X3A8nmVOY5scx8bo= + "integrity" "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==" + "resolved" "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz" + "version" "1.6.22" dependencies: "@babel/core" "7.12.9" "@babel/plugin-syntax-jsx" "7.12.1" "@babel/plugin-syntax-object-rest-spread" "7.8.3" "@mdx-js/util" "1.6.22" - babel-plugin-apply-mdx-type-prop "1.6.22" - babel-plugin-extract-import-names "1.6.22" - camelcase-css "2.0.1" - detab "2.0.4" - hast-util-raw "6.0.1" - lodash.uniq "4.5.0" - mdast-util-to-hast "10.0.1" - remark-footnotes "2.0.0" - remark-mdx "1.6.22" - remark-parse "8.0.3" - remark-squeeze-paragraphs "4.0.0" - style-to-object "0.3.0" - unified "9.2.0" - unist-builder "2.0.3" - unist-util-visit "2.0.3" + "babel-plugin-apply-mdx-type-prop" "1.6.22" + "babel-plugin-extract-import-names" "1.6.22" + "camelcase-css" "2.0.1" + "detab" "2.0.4" + "hast-util-raw" "6.0.1" + "lodash.uniq" "4.5.0" + "mdast-util-to-hast" "10.0.1" + "remark-footnotes" "2.0.0" + "remark-mdx" "1.6.22" + "remark-parse" "8.0.3" + "remark-squeeze-paragraphs" "4.0.0" + "style-to-object" "0.3.0" + "unified" "9.2.0" + "unist-builder" "2.0.3" + "unist-util-visit" "2.0.3" -"@mdx-js/react@1.6.22", "@mdx-js/react@^1.6.22": - version "1.6.22" - resolved "https://registry.nlark.com/@mdx-js/react/download/@mdx-js/react-1.6.22.tgz" - integrity sha1-rgm0dE/dx0cU7p+dbxembnfENXM= +"@mdx-js/react@^1.6.22", "@mdx-js/react@1.6.22": + "integrity" "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" + "resolved" "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz" + "version" "1.6.22" "@mdx-js/util@1.6.22": - version "1.6.22" - resolved "https://registry.npm.taobao.org/@mdx-js/util/download/@mdx-js/util-1.6.22.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40mdx-js%2Futil%2Fdownload%2F%40mdx-js%2Futil-1.6.22.tgz" - integrity sha1-IZ39ia5bl6iAHwFTI/+kti9FcYs= + "integrity" "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + "resolved" "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz" + "version" "1.6.22" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz" - integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz" - integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1625769815389&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz" - integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" -"@polka/url@^1.0.0-next.15": - version "1.0.0-next.15" - resolved "https://registry.nlark.com/@polka/url/download/@polka/url-1.0.0-next.15.tgz" - integrity sha1-ap0UP39PSdsteC+eHIg5optDriM= +"@polka/url@^1.0.0-next.20": + "integrity" "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + "resolved" "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" + "version" "1.0.0-next.21" "@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + "integrity" "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==" + "resolved" "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" + "version" "4.1.4" dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== +"@sideway/formula@^3.0.0": + "integrity" "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + "resolved" "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" + "version" "3.0.1" "@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.nlark.com/@sideway/pinpoint/download/@sideway/pinpoint-2.0.0.tgz" - integrity sha1-z/j/rcNyrSn9P3gneusp5jLMcN8= + "integrity" "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + "resolved" "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" + "version" "2.0.0" -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.25.24.tgz" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.24.1": + "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + "version" "0.24.51" "@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.nlark.com/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz" - integrity sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o= + "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + "version" "0.14.0" "@slorber/static-site-generator-webpack-plugin@^4.0.7": - version "4.0.7" - resolved "https://registry.npmmirror.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz" - integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + "integrity" "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==" + "resolved" "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz" + "version" "4.0.7" dependencies: - eval "^0.1.8" - p-map "^4.0.0" - webpack-sources "^3.2.2" + "eval" "^0.1.8" + "p-map" "^4.0.0" + "webpack-sources" "^3.2.2" "@svgr/babel-plugin-add-jsx-attribute@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz" - integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + "integrity" "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-plugin-remove-jsx-attribute@*": - version "5.4.0" - resolved "https://registry.npm.taobao.org/@svgr/babel-plugin-remove-jsx-attribute/download/@svgr/babel-plugin-remove-jsx-attribute-5.4.0.tgz" - integrity sha1-ayx3DJXIdGVP1eHV70dbeKCpYu8= + "integrity" "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz" + "version" "6.5.0" "@svgr/babel-plugin-remove-jsx-empty-expression@*": - version "5.0.1" - resolved "https://registry.npm.taobao.org/@svgr/babel-plugin-remove-jsx-empty-expression/download/@svgr/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz" - integrity sha1-JWIaiRXtetcNps6j0KbbwuqTPv0= + "integrity" "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz" + "version" "6.5.0" "@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz" - integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + "integrity" "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-plugin-svg-dynamic-title@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz" - integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + "integrity" "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-plugin-svg-em-dimensions@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz" - integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + "integrity" "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-plugin-transform-react-native-svg@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz" - integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + "integrity" "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-plugin-transform-svg-component@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz" - integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + "integrity" "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz" + "version" "6.5.1" "@svgr/babel-preset@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz" - integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + "integrity" "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz" + "version" "6.5.1" dependencies: "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" "@svgr/babel-plugin-remove-jsx-attribute" "*" @@ -1978,48 +1895,48 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" -"@svgr/core@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/core/-/core-6.5.1.tgz" - integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== +"@svgr/core@*", "@svgr/core@^6.0.0", "@svgr/core@^6.5.1": + "integrity" "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==" + "resolved" "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz" + "version" "6.5.1" dependencies: "@babel/core" "^7.19.6" "@svgr/babel-preset" "^6.5.1" "@svgr/plugin-jsx" "^6.5.1" - camelcase "^6.2.0" - cosmiconfig "^7.0.1" + "camelcase" "^6.2.0" + "cosmiconfig" "^7.0.1" "@svgr/hast-util-to-babel-ast@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz" - integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + "integrity" "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==" + "resolved" "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz" + "version" "6.5.1" dependencies: "@babel/types" "^7.20.0" - entities "^4.4.0" + "entities" "^4.4.0" "@svgr/plugin-jsx@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz" - integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + "integrity" "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==" + "resolved" "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz" + "version" "6.5.1" dependencies: "@babel/core" "^7.19.6" "@svgr/babel-preset" "^6.5.1" "@svgr/hast-util-to-babel-ast" "^6.5.1" - svg-parser "^2.0.4" + "svg-parser" "^2.0.4" "@svgr/plugin-svgo@^6.5.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz" - integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + "integrity" "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==" + "resolved" "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz" + "version" "6.5.1" dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" + "cosmiconfig" "^7.0.1" + "deepmerge" "^4.2.2" + "svgo" "^2.8.0" "@svgr/webpack@^6.2.1": - version "6.5.1" - resolved "https://registry.npmmirror.com/@svgr/webpack/-/webpack-6.5.1.tgz" - integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + "integrity" "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==" + "resolved" "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz" + "version" "6.5.1" dependencies: "@babel/core" "^7.19.6" "@babel/plugin-transform-react-constant-elements" "^7.18.12" @@ -2031,331 +1948,321 @@ "@svgr/plugin-svgo" "^6.5.1" "@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz" - integrity sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE= + "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + "version" "1.1.2" dependencies: - defer-to-connect "^1.0.1" + "defer-to-connect" "^1.0.1" "@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "integrity" "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + "resolved" "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + "version" "0.2.0" "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + "integrity" "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + "version" "1.19.2" dependencies: "@types/connect" "*" "@types/node" "*" "@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.10.tgz" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + "integrity" "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==" + "resolved" "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" + "version" "3.5.10" dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.5.0" - resolved "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz" - integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + "integrity" "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==" + "resolved" "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" + "version" "1.3.5" dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.40.2" - resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.40.2.tgz" - integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== + "integrity" "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz" + "version" "8.4.10" dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + "integrity" "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz" + "version" "4.17.31" dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" - "@types/send" "*" "@types/express@*", "@types/express@^4.17.13": - version "4.17.17" - resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + "integrity" "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz" + "version" "4.17.14" dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" + "@types/express-serve-static-core" "^4.17.18" "@types/qs" "*" "@types/serve-static" "*" "@types/hast@^2.0.0": - version "2.3.2" - resolved "https://registry.nlark.com/@types/hast/download/@types/hast-2.3.2.tgz" - integrity sha1-I2IBrMqeJpXkL3E9fdTxUdwpguQ= + "integrity" "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==" + "resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz" + "version" "2.3.4" dependencies: "@types/unist" "*" "@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.npmmirror.com/@types/history/-/history-4.7.11.tgz" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + "integrity" "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + "resolved" "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" + "version" "4.7.11" "@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-errors@*": - version "2.0.1" - resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.1.tgz" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "integrity" "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + "resolved" "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + "version" "6.1.0" "@types/http-proxy@^1.17.8": - version "1.17.11" - resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.11.tgz" - integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== + "integrity" "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==" + "resolved" "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz" + "version" "1.17.9" dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" "@types/mdast@^3.0.0": - version "3.0.4" - resolved "https://registry.nlark.com/@types/mdast/download/@types/mdast-3.0.4.tgz?cache=0&sync_timestamp=1625610457923&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fmdast%2Fdownload%2F%40types%2Fmdast-3.0.4.tgz" - integrity sha1-jua1IAdRtsrbmgQ8o5YSaTrWy54= + "integrity" "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==" + "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz" + "version" "3.0.11" dependencies: "@types/unist" "*" -"@types/mime@*", "@types/mime@^1": - version "1.3.2" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/mime@*": + "integrity" "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" + "version" "3.0.1" -"@types/node@*", "@types/node@^17.0.5": - version "17.0.45" - resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== +"@types/node@*": + "integrity" "sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz" + "version" "18.11.11" + +"@types/node@^17.0.5": + "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + "version" "17.0.45" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.nlark.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1621242198435&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz" - integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" "@types/parse5@^5.0.0": - version "5.0.3" - resolved "https://registry.nlark.com/@types/parse5/download/@types/parse5-5.0.3.tgz" - integrity sha1-57Wuu6wVD4tf3UpG5/C9jmXhkQk= + "integrity" "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + "resolved" "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz" + "version" "5.0.3" "@types/prop-types@*": - version "15.7.5" - resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + "version" "15.7.5" "@types/qs@*": - version "6.9.7" - resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + "version" "1.2.4" "@types/react-router-config@*", "@types/react-router-config@^5.0.6": - version "5.0.7" - resolved "https://registry.npmmirror.com/@types/react-router-config/-/react-router-config-5.0.7.tgz" - integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "^5.1.0" - -"@types/react-router-dom@*": - version "5.3.3" - resolved "https://registry.npmmirror.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + "integrity" "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==" + "resolved" "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz" + "version" "5.0.6" dependencies: "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*", "@types/react-router@^5.1.0": - version "5.1.20" - resolved "https://registry.npmmirror.com/@types/react-router/-/react-router-5.1.20.tgz" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== +"@types/react-router-dom@*": + "integrity" "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==" + "resolved" "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" + "version" "5.3.3" + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + "integrity" "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==" + "resolved" "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz" + "version" "5.1.20" dependencies: "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": - version "18.2.14" - resolved "https://registry.npmmirror.com/@types/react/-/react-18.2.14.tgz" - integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== +"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0": + "integrity" "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==" + "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz" + "version" "18.0.26" dependencies: "@types/prop-types" "*" "@types/scheduler" "*" - csstype "^3.0.2" + "csstype" "^3.0.2" "@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "integrity" "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "resolved" "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" "@types/sax@^1.2.1": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz" - integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + "integrity" "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==" + "resolved" "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" dependencies: "@types/node" "*" "@types/scheduler@*": - version "0.16.3" - resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.1.tgz" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" + "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + "version" "0.16.2" "@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.1.tgz" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + "integrity" "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==" + "resolved" "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.2" - resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.2.tgz" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== + "integrity" "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" dependencies: - "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" "@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.33.tgz" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + "integrity" "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==" + "resolved" "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" + "version" "0.3.33" dependencies: "@types/node" "*" "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.5" - resolved "https://registry.nlark.com/@types/unist/download/@types/unist-2.0.5.tgz" - integrity sha1-/dKZ8jIFw0Va+IzmGN1lwUy3PiI= + "integrity" "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" + "version" "2.0.6" -"@types/ws@^8.5.5": - version "8.5.5" - resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz" - integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== +"@types/ws@^8.5.1": + "integrity" "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + "version" "8.5.3" dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.24.tgz" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + "integrity" "sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz" + "version" "17.0.17" dependencies: "@types/yargs-parser" "*" "@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.11.1.tgz?cache=0&sync_timestamp=1625473459015&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.11.1.tgz" - integrity sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc= + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/helper-numbers" "1.11.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.1" "@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.11.1.tgz" - integrity sha1-9sYacF8P16auyqToGY8j2dwXnk8= + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" "@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.11.1.tgz?cache=0&sync_timestamp=1625473346773&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.11.1.tgz" - integrity sha1-GmMZLYeI5cASgAump6RscFKI/RY= + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" "@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.11.1.tgz?cache=0&sync_timestamp=1625473344792&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.11.1.tgz" - integrity sha1-gyqQDrREiEzemnytRn+BUA9eWrU= + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" "@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/helper-numbers/download/@webassemblyjs/helper-numbers-1.11.1.tgz?cache=0&sync_timestamp=1625473485159&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-numbers%2Fdownload%2F%40webassemblyjs%2Fhelper-numbers-1.11.1.tgz" - integrity sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4= + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.1" "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" "@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.11.1.tgz" - integrity sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE= + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" "@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.11.1.tgz?cache=0&sync_timestamp=1625473466570&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.11.1.tgz" - integrity sha1-Ie4GWntjXzGec48N1zv72igcCXo= + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/helper-buffer" "1.11.1" @@ -2363,28 +2270,28 @@ "@webassemblyjs/wasm-gen" "1.11.1" "@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.11.1.tgz" - integrity sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ= + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.11.1.tgz?cache=0&sync_timestamp=1625473342433&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.11.1.tgz" - integrity sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU= + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.11.1.tgz" - integrity sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8= + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" "@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.11.1.tgz?cache=0&sync_timestamp=1625473463093&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.11.1.tgz" - integrity sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y= + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/helper-buffer" "1.11.1" @@ -2396,9 +2303,9 @@ "@webassemblyjs/wast-printer" "1.11.1" "@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.11.1.tgz?cache=0&sync_timestamp=1625473361759&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.11.1.tgz" - integrity sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y= + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.1" @@ -2407,9 +2314,9 @@ "@webassemblyjs/utf8" "1.11.1" "@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.11.1.tgz?cache=0&sync_timestamp=1625473467198&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.11.1.tgz" - integrity sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI= + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/helper-buffer" "1.11.1" @@ -2417,9 +2324,9 @@ "@webassemblyjs/wasm-parser" "1.11.1" "@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.11.1.tgz?cache=0&sync_timestamp=1625473464593&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.11.1.tgz" - integrity sha1-hspzRTT0F+m9PGfHocddi+QfsZk= + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/helper-api-error" "1.11.1" @@ -2429,5200 +2336,5261 @@ "@webassemblyjs/utf8" "1.11.1" "@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.11.1.tgz" - integrity sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA= + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" dependencies: "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.nlark.com/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz" - integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" "@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.nlark.com/@xtuc/long/download/@xtuc/long-4.2.2.tgz" - integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" + "mime-types" "~2.1.34" + "negotiator" "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + "version" "1.8.0" -acorn-walk@^8.0.0: - version "8.1.1" - resolved "https://registry.nlark.com/acorn-walk/download/acorn-walk-8.1.1.tgz" - integrity sha1-Pdq3+E5KfiMT9sQUxbfayF9OPrw= +"acorn-walk@^8.0.0": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.8.2" - resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +"acorn@^8", "acorn@^8.0.4", "acorn@^8.5.0", "acorn@^8.7.1": + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" -address@^1.0.1, address@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz?cache=0&sync_timestamp=1593529661616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faddress%2Fdownload%2Faddress-1.1.2.tgz" - integrity sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY= +"address@^1.0.1", "address@^1.1.2": + "integrity" "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" + "resolved" "https://registry.npmjs.org/address/-/address-1.2.1.tgz" + "version" "1.2.1" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1618681361248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz" - integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" dependencies: - ajv "^8.0.0" + "ajv" "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz" - integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= +"ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== +"ajv-keywords@^5.0.0": + "integrity" "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + "version" "5.1.0" dependencies: - fast-deep-equal "^3.1.3" + "fast-deep-equal" "^3.1.3" -ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz" - integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= +"ajv@^6.12.2", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" -ajv@^8.0.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +"ajv@^8.0.0": + "integrity" "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz" + "version" "8.11.2" dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" -algoliasearch-helper@^3.10.0: - version "3.13.3" - resolved "https://registry.npmmirror.com/algoliasearch-helper/-/algoliasearch-helper-3.13.3.tgz" - integrity sha512-jhbbuYZ+fheXpaJlqdJdFa1jOsrTWKmRRTYDM3oVTto5VodZzM7tT+BHzslAotaJf/81CKrm6yLRQn8WIr/K4A== +"ajv@^8.8.0", "ajv@^8.8.2": + "integrity" "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz" + "version" "8.11.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"algoliasearch-helper@^3.10.0": + "integrity" "sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw==" + "resolved" "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.13.0.tgz" + "version" "3.13.0" dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.0.0, algoliasearch@^4.12.0, algoliasearch@^4.13.1: - version "4.18.0" - resolved "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.18.0.tgz" - integrity sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA== +"algoliasearch@^4.0.0", "algoliasearch@^4.12.0", "algoliasearch@^4.13.1", "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": + "integrity" "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==" + "resolved" "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/cache-browser-local-storage" "4.18.0" - "@algolia/cache-common" "4.18.0" - "@algolia/cache-in-memory" "4.18.0" - "@algolia/client-account" "4.18.0" - "@algolia/client-analytics" "4.18.0" - "@algolia/client-common" "4.18.0" - "@algolia/client-personalization" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/logger-common" "4.18.0" - "@algolia/logger-console" "4.18.0" - "@algolia/requester-browser-xhr" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/requester-node-http" "4.18.0" - "@algolia/transporter" "4.18.0" + "@algolia/cache-browser-local-storage" "4.14.2" + "@algolia/cache-common" "4.14.2" + "@algolia/cache-in-memory" "4.14.2" + "@algolia/client-account" "4.14.2" + "@algolia/client-analytics" "4.14.2" + "@algolia/client-common" "4.14.2" + "@algolia/client-personalization" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/logger-console" "4.14.2" + "@algolia/requester-browser-xhr" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/requester-node-http" "4.14.2" + "@algolia/transporter" "4.14.2" -ansi-align@^3.0.0, ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== +"ansi-align@^3.0.0", "ansi-align@^3.0.1": + "integrity" "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==" + "resolved" "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" + "version" "3.0.1" dependencies: - string-width "^4.1.0" + "string-width" "^4.1.0" -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +"ansi-html-community@^0.0.8": + "integrity" "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + "resolved" "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + "version" "0.0.8" -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz" - integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" dependencies: - color-convert "^1.9.0" + "color-convert" "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz" - integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" dependencies: - color-convert "^2.0.1" + "color-convert" "^2.0.1" -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +"ansi-styles@^6.1.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz" - integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= +"anymatch@~3.1.2": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" -arg@^5.0.0: - version "5.0.2" - resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== +"arg@^5.0.0": + "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + "version" "5.0.2" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1598649397806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz" - integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" dependencies: - sprintf-js "~1.0.2" + "sprintf-js" "~1.0.2" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/argparse/download/argparse-2.0.1.tgz?cache=0&sync_timestamp=1598649397806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-2.0.1.tgz" - integrity sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg= +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +"array-flatten@^2.1.2": + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + "version" "2.1.2" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz" - integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +"asap@~2.0.3": + "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +"at-least-node@^1.0.0": + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + "version" "1.0.0" -autoprefixer@^10.4.12, autoprefixer@^10.4.7: - version "10.4.14" - resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.14.tgz" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== +"autoprefixer@^10.4.12", "autoprefixer@^10.4.7": + "integrity" "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" + "version" "10.4.14" dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" + "browserslist" "^4.21.5" + "caniuse-lite" "^1.0.30001464" + "fraction.js" "^4.2.0" + "normalize-range" "^0.1.2" + "picocolors" "^1.0.0" + "postcss-value-parser" "^4.2.0" -axios@^0.25.0: - version "0.25.0" - resolved "https://registry.npmmirror.com/axios/-/axios-0.25.0.tgz" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== +"axios@^0.25.0": + "integrity" "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" + "version" "0.25.0" dependencies: - follow-redirects "^1.14.7" + "follow-redirects" "^1.14.7" -babel-loader@^8.2.5: - version "8.3.0" - resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== +"babel-loader@^8.2.5": + "integrity" "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==" + "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz" + "version" "8.3.0" dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" + "find-cache-dir" "^3.3.1" + "loader-utils" "^2.0.0" + "make-dir" "^3.1.0" + "schema-utils" "^2.6.5" -babel-plugin-apply-mdx-type-prop@1.6.22: - version "1.6.22" - resolved "https://registry.npm.taobao.org/babel-plugin-apply-mdx-type-prop/download/babel-plugin-apply-mdx-type-prop-1.6.22.tgz" - integrity sha1-0hbo/Q3pHePxR47zIx4FRGvIcFs= +"babel-plugin-apply-mdx-type-prop@1.6.22": + "integrity" "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz" + "version" "1.6.22" dependencies: "@babel/helper-plugin-utils" "7.10.4" "@mdx-js/util" "1.6.22" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== +"babel-plugin-dynamic-import-node@^2.3.3": + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + "version" "2.3.3" dependencies: - object.assign "^4.1.0" + "object.assign" "^4.1.0" -babel-plugin-extract-import-names@1.6.22: - version "1.6.22" - resolved "https://registry.npm.taobao.org/babel-plugin-extract-import-names/download/babel-plugin-extract-import-names-1.6.22.tgz" - integrity sha1-3l+aKOsS8+sleL90RyIE5m0aE9w= +"babel-plugin-extract-import-names@1.6.22": + "integrity" "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz" + "version" "1.6.22" dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== +"babel-plugin-polyfill-corejs2@^0.3.3": + "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + "version" "0.3.3" dependencies: "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "semver" "^6.1.1" -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== +"babel-plugin-polyfill-corejs3@^0.6.0": + "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + "version" "0.6.0" dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +"babel-plugin-polyfill-regenerator@^0.4.1": + "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + "version" "0.4.1" dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.3.3" -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.nlark.com/bail/download/bail-1.0.5.tgz" - integrity sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y= +"bail@^1.0.0": + "integrity" "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "resolved" "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" + "version" "1.0.5" -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.nlark.com/balanced-match/download/balanced-match-1.0.2.tgz" - integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/base16/-/base16-1.0.0.tgz" - integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== +"base16@^1.0.0": + "integrity" "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + "resolved" "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" + "version" "1.0.0" -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= +"batch@0.6.1": + "integrity" "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + "resolved" "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + "version" "0.6.1" -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz" - integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= +"big.js@^5.2.2": + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + "version" "5.2.2" -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299268308&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz" - integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +"body-parser@1.20.1": + "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + "version" "1.20.1" dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.11.0" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" -bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== +"bonjour-service@^1.0.11": + "integrity" "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==" + "resolved" "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz" + "version" "1.0.14" dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" + "array-flatten" "^2.1.2" + "dns-equal" "^1.0.0" + "fast-deep-equal" "^3.1.3" + "multicast-dns" "^7.2.5" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.nlark.com/boolbase/download/boolbase-1.0.0.tgz" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +"boolbase@^1.0.0": + "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + "version" "1.0.0" -boxen@^5.0.0: - version "5.0.1" - resolved "https://registry.npm.taobao.org/boxen/download/boxen-5.0.1.tgz" - integrity sha1-ZXUovdP1mncrgnm4MfJ+wsdEZks= +"boxen@^5.0.0": + "integrity" "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" + "version" "5.1.2" dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.0" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" + "ansi-align" "^3.0.0" + "camelcase" "^6.2.0" + "chalk" "^4.1.0" + "cli-boxes" "^2.2.1" + "string-width" "^4.2.2" + "type-fest" "^0.20.2" + "widest-line" "^3.1.0" + "wrap-ansi" "^7.0.0" -boxen@^6.2.1: - version "6.2.1" - resolved "https://registry.npmmirror.com/boxen/-/boxen-6.2.1.tgz" - integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== +"boxen@^6.2.1": + "integrity" "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz" + "version" "6.2.1" dependencies: - ansi-align "^3.0.1" - camelcase "^6.2.0" - chalk "^4.1.2" - cli-boxes "^3.0.0" - string-width "^5.0.1" - type-fest "^2.5.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" + "ansi-align" "^3.0.1" + "camelcase" "^6.2.0" + "chalk" "^4.1.2" + "cli-boxes" "^3.0.0" + "string-width" "^5.0.1" + "type-fest" "^2.5.0" + "widest-line" "^4.0.1" + "wrap-ansi" "^8.0.1" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.nlark.com/brace-expansion/download/brace-expansion-1.1.11.tgz" - integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz" - integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" dependencies: - fill-range "^7.0.1" + "fill-range" "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: - version "4.21.9" - resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.9.tgz" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== +"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.18.1", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@^4.21.5", "browserslist@>= 4.21.0": + "integrity" "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" + "version" "4.21.5" dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" + "caniuse-lite" "^1.0.30001449" + "electron-to-chromium" "^1.4.284" + "node-releases" "^2.0.8" + "update-browserslist-db" "^1.0.10" -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz" - integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +"bytes@3.0.0": + "integrity" "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + "version" "3.0.0" -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.nlark.com/cacheable-request/download/cacheable-request-6.1.0.tgz?cache=0&sync_timestamp=1623237504263&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcacheable-request%2Fdownload%2Fcacheable-request-6.1.0.tgz" - integrity sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI= +"cacheable-request@^6.0.0": + "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + "version" "6.1.0" dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^3.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^4.1.0" + "responselike" "^1.0.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz" - integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.nlark.com/callsites/download/callsites-3.1.0.tgz" - integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.nlark.com/camel-case/download/camel-case-4.1.2.tgz" - integrity sha1-lygHKpVPgFIoIlpt7qazhGHhvVo= +"camel-case@^4.1.2": + "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==" + "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + "version" "4.1.2" dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" + "pascal-case" "^3.1.2" + "tslib" "^2.0.3" -camelcase-css@2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/camelcase-css/download/camelcase-css-2.0.1.tgz" - integrity sha1-7pePaUeRTMMMa0R0G27R338EP9U= +"camelcase-css@2.0.1": + "integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + "version" "2.0.1" -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== +"caniuse-api@^3.0.0": + "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" + "resolved" "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + "version" "3.0.0" dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" + "browserslist" "^4.0.0" + "caniuse-lite" "^1.0.0" + "lodash.memoize" "^4.1.2" + "lodash.uniq" "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001509" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz" - integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001449", "caniuse-lite@^1.0.30001464": + "integrity" "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz" + "version" "1.0.30001469" -ccount@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/ccount/download/ccount-1.1.0.tgz" - integrity sha1-JGaH3rtgFHNRMb6KurLZOJj40EM= +"ccount@^1.0.0": + "integrity" "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + "resolved" "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" + "version" "1.1.0" -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995297666&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz" - integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.npm.taobao.org/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz" - integrity sha1-lLwYRdznClu50uzHSHJWYSk9j8E= +"character-entities-legacy@^1.0.0": + "integrity" "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" + "version" "1.1.4" -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.npm.taobao.org/character-entities/download/character-entities-1.2.4.tgz" - integrity sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs= +"character-entities@^1.0.0": + "integrity" "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "resolved" "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" + "version" "1.2.4" -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.npm.taobao.org/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1615289617203&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz" - integrity sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA= +"character-reference-invalid@^1.0.0": + "integrity" "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" + "version" "1.1.4" -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== +"cheerio-select@^2.1.0": + "integrity" "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==" + "resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + "version" "2.1.0" dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" + "boolbase" "^1.0.0" + "css-select" "^5.1.0" + "css-what" "^6.1.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" -cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.9: - version "1.0.0-rc.12" - resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== +"cheerio@^1.0.0-rc.12", "cheerio@^1.0.0-rc.9": + "integrity" "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==" + "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + "version" "1.0.0-rc.12" dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" + "cheerio-select" "^2.1.0" + "dom-serializer" "^2.0.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" + "htmlparser2" "^8.0.1" + "parse5" "^7.0.0" + "parse5-htmlparser2-tree-adapter" "^7.0.0" -chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +"chokidar@^3.4.2", "chokidar@^3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" optionalDependencies: - fsevents "~2.3.2" + "fsevents" "~2.3.2" -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz" - integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/ci-info/download/ci-info-2.0.0.tgz?cache=0&sync_timestamp=1622039942508&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fci-info%2Fdownload%2Fci-info-2.0.0.tgz" - integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" -ci-info@^3.2.0: - version "3.2.0" - resolved "https://registry.nlark.com/ci-info/download/ci-info-3.2.0.tgz?cache=0&sync_timestamp=1622039942508&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fci-info%2Fdownload%2Fci-info-3.2.0.tgz" - integrity sha1-KHbLlIpJh5e1I28AlbwFfQ3KOLY= +"ci-info@^3.2.0": + "integrity" "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz" + "version" "3.7.0" -clean-css@^5.2.2, clean-css@^5.3.0: - version "5.3.2" - resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== +"clean-css@^5.2.2", "clean-css@^5.3.0": + "integrity" "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==" + "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz" + "version" "5.3.1" dependencies: - source-map "~0.6.0" + "source-map" "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.nlark.com/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1621915070206&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz" - integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.nlark.com/cli-boxes/download/cli-boxes-2.2.1.tgz" - integrity sha1-3dUDXSUJT84iDpyrQKRYQKRAMY8= +"cli-boxes@^2.2.1": + "integrity" "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" + "version" "2.2.1" -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== +"cli-boxes@^3.0.0": + "integrity" "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" + "version" "3.0.0" -cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.npmmirror.com/cli-table3/-/cli-table3-0.6.3.tgz" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== +"cli-table3@^0.6.2": + "integrity" "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==" + "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" + "version" "0.6.3" dependencies: - string-width "^4.2.0" + "string-width" "^4.2.0" optionalDependencies: "@colors/colors" "1.5.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.nlark.com/clone-deep/download/clone-deep-4.0.1.tgz" - integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= +"clone-response@^1.0.2": + "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" + "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + "version" "1.0.3" dependencies: - mimic-response "^1.0.0" + "mimic-response" "^1.0.0" -clsx@1.2.1, clsx@^1.1.1, clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +"clsx@^1.1.1", "clsx@^1.2.1", "clsx@1.2.1": + "integrity" "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + "resolved" "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" + "version" "1.2.1" -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.npm.taobao.org/collapse-white-space/download/collapse-white-space-1.0.6.tgz?cache=0&sync_timestamp=1615196661688&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollapse-white-space%2Fdownload%2Fcollapse-white-space-1.0.6.tgz" - integrity sha1-5jYpwAFmZXkgYNu+t5xCI50sUoc= +"collapse-white-space@^1.0.2": + "integrity" "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + "resolved" "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz" + "version" "1.0.6" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.nlark.com/color-convert/download/color-convert-1.9.3.tgz" - integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" dependencies: - color-name "1.1.3" + "color-name" "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.nlark.com/color-convert/download/color-convert-2.0.1.tgz" - integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" dependencies: - color-name "~1.1.4" + "color-name" "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz" - integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== +"colord@^2.9.1": + "integrity" "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + "resolved" "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" + "version" "2.9.3" -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +"colorette@^2.0.10": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" -combine-promises@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/combine-promises/download/combine-promises-1.1.0.tgz" - integrity sha1-ctuQdDwMp6q30NjSBS/XsPZ03nE= +"combine-promises@^1.1.0": + "integrity" "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" + "resolved" "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz" + "version" "1.1.0" -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.nlark.com/comma-separated-tokens/download/comma-separated-tokens-1.0.8.tgz" - integrity sha1-YyuAthF4Z6FY8QgK1Jiy++fj9eo= +"comma-separated-tokens@^1.0.0": + "integrity" "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + "resolved" "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" + "version" "1.0.8" -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +"commander@^2.20.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.nlark.com/commander/download/commander-5.1.0.tgz?cache=0&sync_timestamp=1624609539421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-5.1.0.tgz" - integrity sha1-Rqu9FlL44Fm92u+Zu9yyrZzxea4= +"commander@^5.1.0": + "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + "version" "5.1.0" -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +"commander@^7.2.0": + "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + "version" "7.2.0" -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +"commander@^8.3.0": + "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + "version" "8.3.0" -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.nlark.com/commondir/download/commondir-1.0.1.tgz" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +"commondir@^1.0.1": + "integrity" "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz" - integrity sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o= +"compressible@~2.0.16": + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" + "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + "version" "2.0.18" dependencies: - mime-db ">= 1.43.0 < 2" + "mime-db" ">= 1.43.0 < 2" -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.nlark.com/compression/download/compression-1.7.4.tgz?cache=0&sync_timestamp=1618847039874&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz" - integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= +"compression@^1.7.4": + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==" + "resolved" "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + "version" "1.7.4" dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" + "accepts" "~1.3.5" + "bytes" "3.0.0" + "compressible" "~2.0.16" + "debug" "2.6.9" + "on-headers" "~1.0.2" + "safe-buffer" "5.1.2" + "vary" "~1.1.2" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.nlark.com/configstore/download/configstore-5.0.1.tgz" - integrity sha1-02UCG130uYzdGH1qOw4/anzF7ZY= +"configstore@^5.0.1": + "integrity" "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==" + "resolved" "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" + "version" "5.0.1" dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + "dot-prop" "^5.2.0" + "graceful-fs" "^4.1.2" + "make-dir" "^3.0.0" + "unique-string" "^2.0.0" + "write-file-atomic" "^3.0.0" + "xdg-basedir" "^4.0.0" -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== +"connect-history-api-fallback@^2.0.0": + "integrity" "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" + "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" + "version" "2.0.0" -consola@^2.15.3: - version "2.15.3" - resolved "https://registry.npm.taobao.org/consola/download/consola-2.15.3.tgz" - integrity sha1-LhH5jWpL5x/3LgvfB70j4Sy2FVA= +"consola@^2.15.3": + "integrity" "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + "resolved" "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" + "version" "2.15.3" -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.nlark.com/content-disposition/download/content-disposition-0.5.2.tgz" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +"content-disposition@0.5.2": + "integrity" "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" + "version" "0.5.2" -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" dependencies: - safe-buffer "5.2.1" + "safe-buffer" "5.2.1" -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz?cache=0&sync_timestamp=1624045451791&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.8.0.tgz" - integrity sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k= +"convert-source-map@^1.7.0": + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" + +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" + +"copy-text-to-clipboard@^3.0.1": + "integrity" "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==" + "resolved" "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz" + "version" "3.1.0" + +"copy-webpack-plugin@^11.0.0": + "integrity" "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==" + "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + "version" "11.0.0" dependencies: - safe-buffer "~5.1.1" + "fast-glob" "^3.2.11" + "glob-parent" "^6.0.1" + "globby" "^13.1.1" + "normalize-path" "^3.0.0" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.nlark.com/cookie-signature/download/cookie-signature-1.0.6.tgz" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-text-to-clipboard@^3.0.1: - version "3.1.0" - resolved "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz" - integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== - -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== +"core-js-compat@^3.25.1": + "integrity" "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz" + "version" "3.26.1" dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" + "browserslist" "^4.21.4" -core-js-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.31.0" - resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.31.0.tgz" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== - dependencies: - browserslist "^4.21.5" +"core-js-pure@^3.25.1": + "integrity" "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" + "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz" + "version" "3.26.1" -core-js-pure@^3.30.2: - version "3.31.0" - resolved "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.31.0.tgz" - integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== +"core-js@^3.23.3": + "integrity" "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" + "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz" + "version" "3.26.1" -core-js@^3.23.3: - version "3.31.0" - resolved "https://registry.npmmirror.com/core-js/-/core-js-3.31.0.tgz" - integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== +"core-util-is@~1.0.0": + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +"cosmiconfig@^6.0.0": + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + "version" "6.0.0" dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" + "import-fresh" "^3.1.0" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.7.2" -cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +"cosmiconfig@^7.0.0", "cosmiconfig@^7.0.1": + "integrity" "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" + "version" "7.1.0" dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + "import-fresh" "^3.2.1" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.10.0" -cosmiconfig@^8.2.0: - version "8.2.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== +"cross-fetch@^3.1.5": + "integrity" "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" + "version" "3.1.6" dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" + "node-fetch" "^2.6.11" -cross-fetch@^3.1.5: - version "3.1.6" - resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.6.tgz" - integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== +"cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" dependencies: - node-fetch "^2.6.11" + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.nlark.com/cross-spawn/download/cross-spawn-7.0.3.tgz" - integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= +"crypto-random-string@^2.0.0": + "integrity" "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + "version" "2.0.0" + +"css-declaration-sorter@^6.3.1": + "integrity" "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz" + "version" "6.3.1" + +"css-loader@^6.7.1": + "integrity" "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==" + "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz" + "version" "6.7.2" dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" + "icss-utils" "^5.1.0" + "postcss" "^8.4.18" + "postcss-modules-extract-imports" "^3.0.0" + "postcss-modules-local-by-default" "^4.0.0" + "postcss-modules-scope" "^3.0.0" + "postcss-modules-values" "^4.0.0" + "postcss-value-parser" "^4.2.0" + "semver" "^7.3.8" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-2.0.0.tgz?cache=0&sync_timestamp=1617610467993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-2.0.0.tgz" - integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU= - -css-declaration-sorter@^6.3.1: - version "6.4.0" - resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz" - integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== - -css-loader@^6.7.1: - version "6.8.1" - resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== +"css-minimizer-webpack-plugin@^4.0.0": + "integrity" "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==" + "resolved" "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz" + "version" "4.2.2" dependencies: - icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" + "cssnano" "^5.1.8" + "jest-worker" "^29.1.2" + "postcss" "^8.4.17" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" + "source-map" "^0.6.1" -css-minimizer-webpack-plugin@^4.0.0: - version "4.2.2" - resolved "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz" - integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== +"css-select@^4.1.3": + "integrity" "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + "version" "4.3.0" dependencies: - cssnano "^5.1.8" - jest-worker "^29.1.2" - postcss "^8.4.17" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" + "boolbase" "^1.0.0" + "css-what" "^6.0.1" + "domhandler" "^4.3.1" + "domutils" "^2.8.0" + "nth-check" "^2.0.1" -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== +"css-select@^5.1.0": + "integrity" "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + "version" "5.1.0" dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" + "boolbase" "^1.0.0" + "css-what" "^6.1.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "nth-check" "^2.0.1" -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== +"css-tree@^1.1.2", "css-tree@^1.1.3": + "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + "version" "1.1.3" dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" + "mdn-data" "2.0.14" + "source-map" "^0.6.1" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +"css-what@^6.0.1", "css-what@^6.1.0": + "integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + "version" "6.1.0" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"cssnano-preset-advanced@^5.3.8": + "integrity" "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==" + "resolved" "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz" + "version" "5.3.10" dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" + "autoprefixer" "^10.4.12" + "cssnano-preset-default" "^5.2.14" + "postcss-discard-unused" "^5.1.0" + "postcss-merge-idents" "^5.1.1" + "postcss-reduce-idents" "^5.2.0" + "postcss-zindex" "^5.1.0" -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/cssesc/download/cssesc-3.0.0.tgz" - integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= - -cssnano-preset-advanced@^5.3.8: - version "5.3.10" - resolved "https://registry.npmmirror.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz" - integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== +"cssnano-preset-default@^5.2.13", "cssnano-preset-default@^5.2.14": + "integrity" "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==" + "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" + "version" "5.2.14" dependencies: - autoprefixer "^10.4.12" - cssnano-preset-default "^5.2.14" - postcss-discard-unused "^5.1.0" - postcss-merge-idents "^5.1.1" - postcss-reduce-idents "^5.2.0" - postcss-zindex "^5.1.0" + "css-declaration-sorter" "^6.3.1" + "cssnano-utils" "^3.1.0" + "postcss-calc" "^8.2.3" + "postcss-colormin" "^5.3.1" + "postcss-convert-values" "^5.1.3" + "postcss-discard-comments" "^5.1.2" + "postcss-discard-duplicates" "^5.1.0" + "postcss-discard-empty" "^5.1.1" + "postcss-discard-overridden" "^5.1.0" + "postcss-merge-longhand" "^5.1.7" + "postcss-merge-rules" "^5.1.4" + "postcss-minify-font-values" "^5.1.0" + "postcss-minify-gradients" "^5.1.1" + "postcss-minify-params" "^5.1.4" + "postcss-minify-selectors" "^5.2.1" + "postcss-normalize-charset" "^5.1.0" + "postcss-normalize-display-values" "^5.1.0" + "postcss-normalize-positions" "^5.1.1" + "postcss-normalize-repeat-style" "^5.1.1" + "postcss-normalize-string" "^5.1.0" + "postcss-normalize-timing-functions" "^5.1.0" + "postcss-normalize-unicode" "^5.1.1" + "postcss-normalize-url" "^5.1.0" + "postcss-normalize-whitespace" "^5.1.1" + "postcss-ordered-values" "^5.1.3" + "postcss-reduce-initial" "^5.1.2" + "postcss-reduce-transforms" "^5.1.0" + "postcss-svgo" "^5.1.0" + "postcss-unique-selectors" "^5.1.1" -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== +"cssnano-utils@^3.1.0": + "integrity" "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "resolved" "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" + "version" "3.1.0" + +"cssnano@^5.1.12", "cssnano@^5.1.8": + "integrity" "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==" + "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz" + "version" "5.1.14" dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" + "cssnano-preset-default" "^5.2.13" + "lilconfig" "^2.0.3" + "yaml" "^1.10.2" -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.1.12, cssnano@^5.1.8: - version "5.1.15" - resolved "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== +"csso@^4.2.0": + "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==" + "resolved" "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + "version" "4.2.0" dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" + "css-tree" "^1.1.2" -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.nlark.com/csso/download/csso-4.2.0.tgz" - integrity sha1-6jpWE0bo3J9UbW/r7dUBh884lSk= +"csstype@^3.0.2": + "integrity" "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" + "version" "3.1.1" + +"debug@^2.6.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" dependencies: - css-tree "^1.1.2" + "ms" "2.0.0" -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -debug@2.6.9, debug@^2.6.0: - version "2.6.9" - resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1625374675284&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz" - integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= +"debug@^4.1.0", "debug@^4.1.1", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" dependencies: - ms "2.0.0" + "ms" "2.1.2" -debug@^4.1.0, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.nlark.com/debug/download/debug-4.3.2.tgz?cache=0&sync_timestamp=1625374675284&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-4.3.2.tgz" - integrity sha1-8KScGKyHeeMdSgxgKd+3aHPHQos= +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" dependencies: - ms "2.1.2" + "ms" "2.0.0" -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz?cache=0&sync_timestamp=1613125479486&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecompress-response%2Fdownload%2Fdecompress-response-3.3.0.tgz" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= +"decompress-response@^3.3.0": + "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + "version" "3.3.0" dependencies: - mimic-response "^1.0.0" + "mimic-response" "^1.0.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz" - integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.nlark.com/deepmerge/download/deepmerge-4.2.2.tgz" - integrity sha1-RNLqNnm49NT/ujPwPYZfwee/SVU= +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== +"default-gateway@^6.0.3": + "integrity" "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==" + "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + "version" "6.0.3" dependencies: - execa "^5.0.0" + "execa" "^5.0.0" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.1.3.tgz?cache=0&sync_timestamp=1614211138920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefer-to-connect%2Fdownload%2Fdefer-to-connect-1.1.3.tgz" - integrity sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE= +"defer-to-connect@^1.0.1": + "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + "version" "1.1.3" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" -define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +"define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" -del@^6.1.1: - version "6.1.1" - resolved "https://registry.npmmirror.com/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== +"del@^6.1.1": + "integrity" "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==" + "resolved" "https://registry.npmjs.org/del/-/del-6.1.1.tgz" + "version" "6.1.1" dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" + "globby" "^11.0.1" + "graceful-fs" "^4.2.4" + "is-glob" "^4.0.1" + "is-path-cwd" "^2.2.0" + "is-path-inside" "^3.0.2" + "p-map" "^4.0.0" + "rimraf" "^3.0.2" + "slash" "^3.0.0" -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +"depd@~1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" -detab@2.0.4: - version "2.0.4" - resolved "https://registry.npm.taobao.org/detab/download/detab-2.0.4.tgz" - integrity sha1-uSeJIGmv9AX7uaGG/pekSpKpS0M= +"detab@2.0.4": + "integrity" "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==" + "resolved" "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz" + "version" "2.0.4" dependencies: - repeat-string "^1.5.4" + "repeat-string" "^1.5.4" -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz?cache=0&sync_timestamp=1621146954463&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-node%2Fdownload%2Fdetect-node-2.1.0.tgz" - integrity sha1-yccHdaScPQO8LAbZpzvlUPl4+LE= +"detect-node@^2.0.4": + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + "version" "2.1.0" -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/detect-port-alt/download/detect-port-alt-1.1.6.tgz" - integrity sha1-JHB96r6TLUo89iEwICfCsmZWgnU= +"detect-port-alt@^1.1.6": + "integrity" "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==" + "resolved" "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" + "version" "1.1.6" dependencies: - address "^1.0.1" - debug "^2.6.0" + "address" "^1.0.1" + "debug" "^2.6.0" -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/detect-port/download/detect-port-1.3.0.tgz" - integrity sha1-2cQOmsyt1N9crGp4Ku/QFNVz0fE= +"detect-port@^1.3.0": + "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" + "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" + "version" "1.5.1" dependencies: - address "^1.0.1" - debug "^2.6.0" + "address" "^1.0.1" + "debug" "4" -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.nlark.com/dir-glob/download/dir-glob-3.0.1.tgz" - integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" dependencies: - path-type "^4.0.0" + "path-type" "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.nlark.com/dns-equal/download/dns-equal-1.0.0.tgz" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= +"dns-equal@^1.0.0": + "integrity" "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + "resolved" "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + "version" "1.0.0" -dns-packet@^5.2.2: - version "5.6.0" - resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.0.tgz" - integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== +"dns-packet@^5.2.2": + "integrity" "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==" + "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz" + "version" "5.4.0" dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -docusaurus-gtm-plugin@0.0.2: - version "0.0.2" - resolved "https://registry.npmmirror.com/docusaurus-gtm-plugin/-/docusaurus-gtm-plugin-0.0.2.tgz" - integrity sha512-Xx/df0Ppd5SultlzUj9qlQk2lX9mNVfTb41juyBUPZ1Nc/5dNx+uN0VuLyF4JEObkDRrUY1EFo9fEUDo8I6QOQ== +"docusaurus-gtm-plugin@0.0.2": + "integrity" "sha512-Xx/df0Ppd5SultlzUj9qlQk2lX9mNVfTb41juyBUPZ1Nc/5dNx+uN0VuLyF4JEObkDRrUY1EFo9fEUDo8I6QOQ==" + "resolved" "https://registry.npmjs.org/docusaurus-gtm-plugin/-/docusaurus-gtm-plugin-0.0.2.tgz" + "version" "0.0.2" -docusaurus-plugin-image-zoom@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-1.0.1.tgz" - integrity sha512-96IpSKUx2RWy3db9aZ0s673OQo5DWgV9UVWouS+CPOSIVEdCWh6HKmWf6tB9rsoaiIF3oNn9keiyv6neEyKb1Q== +"docusaurus-plugin-image-zoom@1.0.1": + "integrity" "sha512-96IpSKUx2RWy3db9aZ0s673OQo5DWgV9UVWouS+CPOSIVEdCWh6HKmWf6tB9rsoaiIF3oNn9keiyv6neEyKb1Q==" + "resolved" "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-1.0.1.tgz" + "version" "1.0.1" dependencies: - medium-zoom "^1.0.6" - validate-peer-dependencies "^2.2.0" + "medium-zoom" "^1.0.6" + "validate-peer-dependencies" "^2.2.0" -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== +"dom-converter@^0.2.0": + "integrity" "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==" + "resolved" "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + "version" "0.2.0" dependencies: - utila "~0.4" + "utila" "~0.4" -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== +"dom-serializer@^1.0.1": + "integrity" "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + "version" "1.4.1" dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" + "domelementtype" "^2.0.1" + "domhandler" "^4.2.0" + "entities" "^2.0.0" -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== +"dom-serializer@^2.0.0": + "integrity" "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + "version" "2.0.0" dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "entities" "^4.2.0" -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +"domelementtype@^2.0.1", "domelementtype@^2.2.0", "domelementtype@^2.3.0": + "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + "version" "2.3.0" -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== +"domhandler@^4.0.0", "domhandler@^4.2.0", "domhandler@^4.3.1": + "integrity" "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + "version" "4.3.1" dependencies: - domelementtype "^2.2.0" + "domelementtype" "^2.2.0" -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== +"domhandler@^5.0.1", "domhandler@^5.0.2", "domhandler@^5.0.3": + "integrity" "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + "version" "5.0.3" dependencies: - domelementtype "^2.3.0" + "domelementtype" "^2.3.0" -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== +"domutils@^2.5.2", "domutils@^2.8.0": + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + "version" "2.8.0" dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" + "dom-serializer" "^1.0.1" + "domelementtype" "^2.2.0" + "domhandler" "^4.2.0" -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== +"domutils@^3.0.1": + "integrity" "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" + "version" "3.0.1" dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" + "dom-serializer" "^2.0.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.1" -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npm.taobao.org/dot-case/download/dot-case-3.0.4.tgz?cache=0&sync_timestamp=1606867306848&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-case%2Fdownload%2Fdot-case-3.0.4.tgz" - integrity sha1-mytnDQCkMWZ6inW6Kc0bmICc51E= +"dot-case@^3.0.4": + "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" + "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + "version" "3.0.4" dependencies: - no-case "^3.0.4" - tslib "^2.0.3" + "no-case" "^3.0.4" + "tslib" "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.nlark.com/dot-prop/download/dot-prop-5.3.0.tgz" - integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= +"dot-prop@^5.2.0": + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + "version" "5.3.0" dependencies: - is-obj "^2.0.0" + "is-obj" "^2.0.0" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.nlark.com/duplexer3/download/duplexer3-0.1.4.tgz" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +"duplexer@^0.1.2": + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + "version" "0.1.2" -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz" - integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY= +"duplexer3@^0.1.4": + "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + "version" "0.1.5" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" -electron-to-chromium@^1.4.431: - version "1.4.442" - resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz" - integrity sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q== +"electron-to-chromium@^1.4.284": + "integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" + "version" "1.4.284" -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.nlark.com/emoji-regex/download/emoji-regex-8.0.0.tgz" - integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/emojis-list/download/emojis-list-3.0.0.tgz" - integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= +"emojis-list@^3.0.0": + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + "version" "3.0.0" -emoticon@^3.2.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/emoticon/download/emoticon-3.2.0.tgz" - integrity sha1-wAjKfXYg+sdC/hv0r4/4/tFUrn8= +"emoticon@^3.2.0": + "integrity" "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + "resolved" "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz" + "version" "3.2.0" -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz" - integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= +"end-of-stream@^1.1.0": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" dependencies: - once "^1.4.0" + "once" "^1.4.0" -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== +"enhanced-resolve@^5.10.0": + "integrity" "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz" + "version" "5.12.0" dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +"entities@^2.0.0": + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + "version" "2.2.0" -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +"entities@^4.2.0", "entities@^4.3.0", "entities@^4.4.0": + "integrity" "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + "resolved" "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" + "version" "4.4.0" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz" - integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" dependencies: - is-arrayish "^0.2.1" + "is-arrayish" "^0.2.1" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.nlark.com/escalade/download/escalade-3.1.1.tgz" - integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npm.taobao.org/escape-goat/download/escape-goat-2.1.1.tgz" - integrity sha1-Gy3HcANnbEV+x2Cy3GjttkgYhnU= +"escape-goat@^2.0.0": + "integrity" "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "resolved" "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" + "version" "2.1.1" -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +"escape-html@^1.0.3", "escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +"escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz" - integrity sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ= +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.nlark.com/eslint-scope/download/eslint-scope-5.1.1.tgz" - integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= +"eslint-scope@5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.nlark.com/esprima/download/esprima-4.0.1.tgz" - integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.nlark.com/esrecurse/download/esrecurse-4.3.0.tgz" - integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" dependencies: - estraverse "^5.2.0" + "estraverse" "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.nlark.com/estraverse/download/estraverse-4.3.0.tgz" - integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" -eta@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/eta/-/eta-2.2.0.tgz" - integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== +"eta@^2.0.0": + "integrity" "sha512-NqE7S2VmVwgMS8yBxsH4VgNQjNjLq1gfGU0u9I6Cjh468nPRMoDfGdK9n1p/3Dvsw3ebklDkZsFAnKJ9sefjBA==" + "resolved" "https://registry.npmjs.org/eta/-/eta-2.0.0.tgz" + "version" "2.0.0" -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" -eval@^0.1.8: - version "0.1.8" - resolved "https://registry.npmmirror.com/eval/-/eval-0.1.8.tgz" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== +"eval@^0.1.8": + "integrity" "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==" + "resolved" "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" + "version" "0.1.8" dependencies: "@types/node" "*" - require-like ">= 0.1.1" + "require-like" ">= 0.1.1" -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +"eventemitter3@^4.0.0": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" -events@^3.2.0: - version "3.3.0" - resolved "https://registry.nlark.com/events/download/events-3.3.0.tgz" - integrity sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA= +"events@^3.2.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.nlark.com/execa/download/execa-5.1.1.tgz" - integrity sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0= +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" -exenv@^1.2.0: - version "1.2.2" - resolved "https://registry.npmmirror.com/exenv/-/exenv-1.2.2.tgz" - integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== +"exenv@^1.2.0": + "integrity" "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + "resolved" "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz" + "version" "1.2.2" -express@^4.17.3: - version "4.18.2" - resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== +"express@^4.17.3": + "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + "version" "4.18.2" dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.1" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.11.0" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= +"extend-shallow@^2.0.1": + "integrity" "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" dependencies: - is-extendable "^0.1.0" + "is-extendable" "^0.1.0" -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.nlark.com/extend/download/extend-3.0.2.tgz" - integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= +"extend@^3.0.0": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz" - integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +"fast-glob@^3.2.11", "fast-glob@^3.2.9": + "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + "version" "3.2.12" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.nlark.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz" - integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.npm.taobao.org/fast-url-parser/download/fast-url-parser-1.1.3.tgz" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= +"fast-url-parser@1.1.3": + "integrity" "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==" + "resolved" "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" + "version" "1.1.3" dependencies: - punycode "^1.3.2" + "punycode" "^1.3.2" -fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.nlark.com/fastq/download/fastq-1.11.1.tgz?cache=0&sync_timestamp=1625392906410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffastq%2Fdownload%2Ffastq-1.11.1.tgz" - integrity sha1-XYF1quF9thlH+LFiz8f2MmTSKAc= +"fastq@^1.6.0": + "integrity" "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz" + "version" "1.14.0" dependencies: - reusify "^1.0.4" + "reusify" "^1.0.4" -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz?cache=0&sync_timestamp=1621894983961&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.4.tgz" - integrity sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo= +"faye-websocket@^0.11.3": + "integrity" "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==" + "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + "version" "0.11.4" dependencies: - websocket-driver ">=0.5.1" + "websocket-driver" ">=0.5.1" -fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/fbemitter/-/fbemitter-3.0.0.tgz" - integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== +"fbemitter@^3.0.0": + "integrity" "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==" + "resolved" "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz" + "version" "3.0.0" dependencies: - fbjs "^3.0.0" + "fbjs" "^3.0.0" -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== +"fbjs-css-vars@^1.0.0": + "integrity" "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "resolved" "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz" + "version" "1.0.2" -fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.5" - resolved "https://registry.npmmirror.com/fbjs/-/fbjs-3.0.5.tgz" - integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== +"fbjs@^3.0.0", "fbjs@^3.0.1": + "integrity" "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==" + "resolved" "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz" + "version" "3.0.4" dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^1.0.35" + "cross-fetch" "^3.1.5" + "fbjs-css-vars" "^1.0.0" + "loose-envify" "^1.0.0" + "object-assign" "^4.1.0" + "promise" "^7.1.1" + "setimmediate" "^1.0.5" + "ua-parser-js" "^0.7.30" -feed@^4.2.2: - version "4.2.2" - resolved "https://registry.npm.taobao.org/feed/download/feed-4.2.2.tgz" - integrity sha1-hleD727RJXnixEu+88kRO8SVan4= +"feed@^4.2.2": + "integrity" "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==" + "resolved" "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz" + "version" "4.2.2" dependencies: - xml-js "^1.6.11" + "xml-js" "^1.6.11" -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.nlark.com/file-loader/download/file-loader-6.2.0.tgz" - integrity sha1-uu98+OGEDfMl5DkLRISHlIDuvk0= +"file-loader@*", "file-loader@^6.2.0": + "integrity" "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==" + "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" + "version" "6.2.0" dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" + "loader-utils" "^2.0.0" + "schema-utils" "^3.0.0" -filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== +"filesize@^8.0.6": + "integrity" "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + "resolved" "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" + "version" "8.0.7" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz" - integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" dependencies: - to-regex-range "^5.0.1" + "to-regex-range" "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.1.tgz" - integrity sha1-ibM/rUpGcNqpT4Vff74x1thP6IA= +"find-cache-dir@^3.3.1": + "integrity" "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + "version" "3.3.2" dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" + "commondir" "^1.0.1" + "make-dir" "^3.0.2" + "pkg-dir" "^4.1.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz" - integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= +"find-up@^3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" dependencies: - locate-path "^3.0.0" + "locate-path" "^3.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz" - integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" -flux@^4.0.1: - version "4.0.4" - resolved "https://registry.npmmirror.com/flux/-/flux-4.0.4.tgz" - integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== +"flux@^4.0.1": + "integrity" "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==" + "resolved" "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz" + "version" "4.0.4" dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.1" + "fbemitter" "^3.0.0" + "fbjs" "^3.0.1" -follow-redirects@^1.0.0, follow-redirects@^1.14.7: - version "1.15.2" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +"follow-redirects@^1.0.0", "follow-redirects@^1.14.7": + "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + "version" "1.15.2" -fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.3" - resolved "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz" - integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== +"fork-ts-checker-webpack-plugin@^6.5.0": + "integrity" "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==" + "resolved" "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz" + "version" "6.5.2" dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" + "chalk" "^4.1.0" + "chokidar" "^3.4.2" + "cosmiconfig" "^6.0.0" + "deepmerge" "^4.2.2" + "fs-extra" "^9.0.0" + "glob" "^7.1.6" + "memfs" "^3.1.2" + "minimatch" "^3.0.4" + "schema-utils" "2.7.0" + "semver" "^7.3.2" + "tapable" "^1.0.0" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz" - integrity sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE= +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== +"fraction.js@^4.2.0": + "integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + "version" "4.2.0" -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +"fs-extra@^9.0.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" -fs-monkey@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.4.tgz" - integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== +"fs-monkey@^1.0.3": + "integrity" "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + "resolved" "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" + "version" "1.0.3" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.nlark.com/fsevents/download/fsevents-2.3.2.tgz" - integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= +"fsevents@~2.3.2": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz" - integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.nlark.com/gensync/download/gensync-1.0.0-beta.2.tgz" - integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= +"gensync@^1.0.0-beta.1", "gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1": + "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + "version" "1.1.3" dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.nlark.com/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz" - integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= +"get-own-enumerable-property-symbols@^3.0.0": + "integrity" "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + "resolved" "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + "version" "3.0.2" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.nlark.com/get-stream/download/get-stream-4.1.0.tgz" - integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= +"get-stream@^4.1.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" dependencies: - pump "^3.0.0" + "pump" "^3.0.0" -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.nlark.com/get-stream/download/get-stream-5.2.0.tgz" - integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= +"get-stream@^5.1.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" dependencies: - pump "^3.0.0" + "pump" "^3.0.0" -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.nlark.com/get-stream/download/get-stream-6.0.1.tgz" - integrity sha1-omLY7vZ6ztV8KFKtYWdSakPL97c= +"get-stream@^6.0.0": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" -github-slugger@^1.4.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/github-slugger/-/github-slugger-1.5.0.tgz" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== +"github-slugger@^1.4.0": + "integrity" "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + "resolved" "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" + "version" "1.5.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073671816&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz" - integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= +"glob-parent@^5.1.2", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" dependencies: - is-glob "^4.0.1" + "is-glob" "^4.0.1" -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" dependencies: - is-glob "^4.0.3" + "is-glob" "^4.0.3" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.4.1.tgz" - integrity sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4= +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&sync_timestamp=1620337382269&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz" - integrity sha1-Oxk+kjPwHULQs/eClLvutBj5SpA= +"glob@^7.0.0", "glob@^7.1.3", "glob@^7.1.6": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-3.0.0.tgz?cache=0&sync_timestamp=1610454828747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-3.0.0.tgz" - integrity sha1-cKdv6E6jFas3sfVXbL3n1I73JoY= +"global-dirs@^3.0.0": + "integrity" "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==" + "resolved" "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" + "version" "3.0.1" dependencies: - ini "2.0.0" + "ini" "2.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-2.0.0.tgz" - integrity sha1-mXYFrSNF8n9RU5vqJldEISFcd4A= +"global-modules@^2.0.0": + "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + "version" "2.0.0" dependencies: - global-prefix "^3.0.0" + "global-prefix" "^3.0.0" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-3.0.0.tgz" - integrity sha1-/IX3MGTfafUEIfR/iD/luRO6m5c= +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.nlark.com/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1625655787416&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz" - integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== +"globby@^11.0.1", "globby@^11.0.4", "globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" -globby@^13.1.1: - version "13.2.0" - resolved "https://registry.npmmirror.com/globby/-/globby-13.2.0.tgz" - integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ== +"globby@^13.1.1": + "integrity" "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==" + "resolved" "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz" + "version" "13.1.2" dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.11" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^4.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npm.taobao.org/got/download/got-9.6.0.tgz?cache=0&sync_timestamp=1614332558999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-9.6.0.tgz" - integrity sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU= +"got@^9.6.0": + "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" + "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + "version" "9.6.0" dependencies: "@sindresorhus/is" "^0.14.0" "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" + "cacheable-request" "^6.0.0" + "decompress-response" "^3.3.0" + "duplexer3" "^0.1.4" + "get-stream" "^4.1.0" + "lowercase-keys" "^1.0.1" + "mimic-response" "^1.0.1" + "p-cancelable" "^1.0.0" + "to-readable-stream" "^1.0.0" + "url-parse-lax" "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.nlark.com/gray-matter/download/gray-matter-4.0.3.tgz" - integrity sha1-6JPAZIJd5z6h9ffYjHqfcnQoh5g= +"gray-matter@^4.0.3": + "integrity" "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==" + "resolved" "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" + "version" "4.0.3" dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" + "js-yaml" "^3.13.1" + "kind-of" "^6.0.2" + "section-matter" "^1.0.0" + "strip-bom-string" "^1.0.0" -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== +"gzip-size@^6.0.0": + "integrity" "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==" + "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + "version" "6.0.0" dependencies: - duplexer "^0.1.2" + "duplexer" "^0.1.2" -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.nlark.com/handle-thing/download/handle-thing-2.0.1.tgz" - integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= +"handle-thing@^2.0.0": + "integrity" "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "resolved" "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + "version" "2.0.1" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1618847009337&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1618847009337&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz" - integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" dependencies: - get-intrinsic "^1.1.1" + "get-intrinsic" "^1.1.1" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +"has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +"has-yarn@^2.1.0": + "integrity" "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "resolved" "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" + "version" "2.1.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/has-yarn/download/has-yarn-2.1.0.tgz" - integrity sha1-E34RNUp7W/EapctknPDG8/8rLnc= - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.nlark.com/has/download/has-1.0.3.tgz" - integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" dependencies: - function-bind "^1.1.1" + "function-bind" "^1.1.1" -hast-to-hyperscript@^9.0.0: - version "9.0.1" - resolved "https://registry.nlark.com/hast-to-hyperscript/download/hast-to-hyperscript-9.0.1.tgz" - integrity sha1-m2f9GI5MgeitZvgDhVM0FzkgIY0= +"hast-to-hyperscript@^9.0.0": + "integrity" "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==" + "resolved" "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz" + "version" "9.0.1" dependencies: "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" - style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" + "comma-separated-tokens" "^1.0.0" + "property-information" "^5.3.0" + "space-separated-tokens" "^1.0.0" + "style-to-object" "^0.3.0" + "unist-util-is" "^4.0.0" + "web-namespaces" "^1.0.0" -hast-util-from-parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.nlark.com/hast-util-from-parse5/download/hast-util-from-parse5-6.0.1.tgz" - integrity sha1-VU40q97qJax29b2VCh8BgOCzvCo= +"hast-util-from-parse5@^6.0.0": + "integrity" "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==" + "resolved" "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz" + "version" "6.0.1" dependencies: "@types/parse5" "^5.0.0" - hastscript "^6.0.0" - property-information "^5.0.0" - vfile "^4.0.0" - vfile-location "^3.2.0" - web-namespaces "^1.0.0" + "hastscript" "^6.0.0" + "property-information" "^5.0.0" + "vfile" "^4.0.0" + "vfile-location" "^3.2.0" + "web-namespaces" "^1.0.0" -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.nlark.com/hast-util-parse-selector/download/hast-util-parse-selector-2.2.5.tgz" - integrity sha1-1Xwj9NoWrjxjs7bKRhZoMxNJnDo= +"hast-util-parse-selector@^2.0.0": + "integrity" "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "resolved" "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz" + "version" "2.2.5" -hast-util-raw@6.0.1: - version "6.0.1" - resolved "https://registry.nlark.com/hast-util-raw/download/hast-util-raw-6.0.1.tgz" - integrity sha1-lzsVkwt1Kae2aYTJgUi0ZSaIWXc= +"hast-util-raw@6.0.1": + "integrity" "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==" + "resolved" "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz" + "version" "6.0.1" dependencies: "@types/hast" "^2.0.0" - hast-util-from-parse5 "^6.0.0" - hast-util-to-parse5 "^6.0.0" - html-void-elements "^1.0.0" - parse5 "^6.0.0" - unist-util-position "^3.0.0" - vfile "^4.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" + "hast-util-from-parse5" "^6.0.0" + "hast-util-to-parse5" "^6.0.0" + "html-void-elements" "^1.0.0" + "parse5" "^6.0.0" + "unist-util-position" "^3.0.0" + "vfile" "^4.0.0" + "web-namespaces" "^1.0.0" + "xtend" "^4.0.0" + "zwitch" "^1.0.0" -hast-util-to-parse5@^6.0.0: - version "6.0.0" - resolved "https://registry.nlark.com/hast-util-to-parse5/download/hast-util-to-parse5-6.0.0.tgz" - integrity sha1-HsRGULYx1ylSBmzqmxRF32mfhHk= +"hast-util-to-parse5@^6.0.0": + "integrity" "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==" + "resolved" "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz" + "version" "6.0.0" dependencies: - hast-to-hyperscript "^9.0.0" - property-information "^5.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" + "hast-to-hyperscript" "^9.0.0" + "property-information" "^5.0.0" + "web-namespaces" "^1.0.0" + "xtend" "^4.0.0" + "zwitch" "^1.0.0" -hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.nlark.com/hastscript/download/hastscript-6.0.0.tgz" - integrity sha1-6HaNfqxWw/3qyKkoMNWOgR5b9kA= +"hastscript@^6.0.0": + "integrity" "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==" + "resolved" "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz" + "version" "6.0.0" dependencies: "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" + "comma-separated-tokens" "^1.0.0" + "hast-util-parse-selector" "^2.0.0" + "property-information" "^5.0.0" + "space-separated-tokens" "^1.0.0" -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz" - integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= +"he@^1.2.0": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" -history@^4.9.0: - version "4.10.1" - resolved "https://registry.nlark.com/history/download/history-4.10.1.tgz" - integrity sha1-MzcaZeOoOyZ0NOKz87G0xYqtTPM= +"history@^4.9.0": + "integrity" "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==" + "resolved" "https://registry.npmjs.org/history/-/history-4.10.1.tgz" + "version" "4.10.1" dependencies: "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" + "loose-envify" "^1.2.0" + "resolve-pathname" "^3.0.0" + "tiny-invariant" "^1.0.2" + "tiny-warning" "^1.0.0" + "value-equal" "^1.0.1" -hoist-non-react-statics@^3.1.0: - version "3.3.2" - resolved "https://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz?cache=0&sync_timestamp=1596721617088&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhoist-non-react-statics%2Fdownload%2Fhoist-non-react-statics-3.3.2.tgz" - integrity sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U= +"hoist-non-react-statics@^3.1.0": + "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==" + "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + "version" "3.3.2" dependencies: - react-is "^16.7.0" + "react-is" "^16.7.0" -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= +"hpack.js@^2.1.6": + "integrity" "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==" + "resolved" "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + "version" "2.1.6" dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" + "inherits" "^2.0.1" + "obuf" "^1.0.0" + "readable-stream" "^2.0.1" + "wbuf" "^1.1.0" -htm@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz" - integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== +"htm@^3.1.1": + "integrity" "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==" + "resolved" "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz" + "version" "3.1.1" -html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== +"html-entities@^2.3.2": + "integrity" "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + "version" "2.3.3" -html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== +"html-minifier-terser@^6.0.2", "html-minifier-terser@^6.1.0": + "integrity" "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==" + "resolved" "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + "version" "6.1.0" dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" + "camel-case" "^4.1.2" + "clean-css" "^5.2.2" + "commander" "^8.3.0" + "he" "^1.2.0" + "param-case" "^3.0.4" + "relateurl" "^0.2.7" + "terser" "^5.10.0" -html-tags@^3.2.0: - version "3.3.1" - resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== +"html-tags@^3.2.0": + "integrity" "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + "resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz" + "version" "3.2.0" -html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.npm.taobao.org/html-void-elements/download/html-void-elements-1.0.5.tgz" - integrity sha1-zpFZSU6G2V5FeVsWbCAhws/KRIM= +"html-void-elements@^1.0.0": + "integrity" "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" + "version" "1.0.5" -html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== +"html-webpack-plugin@^5.5.0": + "integrity" "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==" + "resolved" "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz" + "version" "5.5.0" dependencies: "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" + "html-minifier-terser" "^6.0.2" + "lodash" "^4.17.21" + "pretty-error" "^4.0.0" + "tapable" "^2.0.0" -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== +"htmlparser2@^6.1.0": + "integrity" "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + "version" "6.1.0" dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" + "domelementtype" "^2.0.1" + "domhandler" "^4.0.0" + "domutils" "^2.5.2" + "entities" "^2.0.0" -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== +"htmlparser2@^8.0.1": + "integrity" "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz" + "version" "8.0.1" dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "entities" "^4.3.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz" - integrity sha1-SekcXL82yblLz81xwj1SSex045A= +"http-cache-semantics@^4.0.0": + "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + "version" "4.1.1" -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.nlark.com/http-deceiver/download/http-deceiver-1.2.7.tgz" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= +"http-deceiver@^1.2.7": + "integrity" "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + "resolved" "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + "version" "1.2.7" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +"http-errors@~1.6.2": + "integrity" "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + "version" "1.6.3" dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.0" + "statuses" ">= 1.4.0 < 2" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.nlark.com/http-errors/download/http-errors-1.6.3.tgz" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz?cache=0&sync_timestamp=1609542336109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.3.tgz" - integrity sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k= +"http-parser-js@>=0.5.1": + "integrity" "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "resolved" "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + "version" "0.5.8" -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== +"http-proxy-middleware@^2.0.3": + "integrity" "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==" + "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + "version" "2.0.6" dependencies: "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" + "http-proxy" "^1.18.1" + "is-glob" "^4.0.1" + "is-plain-obj" "^3.0.0" + "micromatch" "^4.0.2" -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== +"http-proxy@^1.18.1": + "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" + "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + "version" "1.18.1" dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" + "eventemitter3" "^4.0.0" + "follow-redirects" "^1.0.0" + "requires-port" "^1.0.0" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.nlark.com/human-signals/download/human-signals-2.1.0.tgz?cache=0&sync_timestamp=1624364695595&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhuman-signals%2Fdownload%2Fhuman-signals-2.1.0.tgz" - integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== +"iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" dependencies: - safer-buffer ">= 2.1.2 < 3" + "safer-buffer" ">= 2.1.2 < 3" -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.nlark.com/icss-utils/download/icss-utils-5.1.0.tgz" - integrity sha1-xr5oWKvQE9do6YNmrkfiXViHsa4= +"icss-utils@^5.0.0", "icss-utils@^5.1.0": + "integrity" "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + "resolved" "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + "version" "5.1.0" -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +"ignore@^5.2.0": + "integrity" "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz" + "version" "5.2.1" -image-size@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/image-size/-/image-size-1.0.2.tgz" - integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== +"image-size@^1.0.1": + "integrity" "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==" + "resolved" "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" + "version" "1.0.2" dependencies: - queue "6.0.2" + "queue" "6.0.2" -immer@^9.0.7: - version "9.0.21" - resolved "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== +"immer@^9.0.7": + "integrity" "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + "resolved" "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz" + "version" "9.0.16" -import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469472392&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz" - integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= +"import-fresh@^3.1.0", "import-fresh@^3.2.1", "import-fresh@^3.3.0": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +"import-lazy@^2.1.0": + "integrity" "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" + "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" + "version" "2.1.0" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.nlark.com/imurmurhash/download/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1618847038277&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz" - integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" -infima@0.2.0-alpha.43: - version "0.2.0-alpha.43" - resolved "https://registry.npmmirror.com/infima/-/infima-0.2.0-alpha.43.tgz" - integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== +"infima@0.2.0-alpha.43": + "integrity" "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==" + "resolved" "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz" + "version" "0.2.0-alpha.43" -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.nlark.com/inflight/download/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" dependencies: - once "^1.3.0" - wrappy "1" + "once" "^1.3.0" + "wrappy" "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz" - integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= +"inherits@^2.0.0", "inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.nlark.com/inherits/download/inherits-2.0.3.tgz" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +"inherits@2.0.3": + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" -ini@2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/ini/download/ini-2.0.0.tgz" - integrity sha1-5f1Vbs3VcmvpePoQAYYurLCpS8U= +"ini@^1.3.5", "ini@~1.3.0": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" -ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.nlark.com/ini/download/ini-1.3.8.tgz" - integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= +"ini@2.0.0": + "integrity" "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "resolved" "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" + "version" "2.0.0" -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.npm.taobao.org/inline-style-parser/download/inline-style-parser-0.1.1.tgz" - integrity sha1-7Io7QpJ06cCh8cT/qUU6f+9yzqE= +"inline-style-parser@0.1.1": + "integrity" "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "resolved" "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" + "version" "0.1.1" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.nlark.com/interpret/download/interpret-1.4.0.tgz" - integrity sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4= +"interpret@^1.0.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== +"invariant@^2.2.4": + "integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==" + "resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + "version" "2.2.4" dependencies: - loose-envify "^1.0.0" + "loose-envify" "^1.0.0" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz" - integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= +"ipaddr.js@^2.0.1": + "integrity" "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + "version" "2.0.1" -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" -is-alphabetical@1.0.4, is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.nlark.com/is-alphabetical/download/is-alphabetical-1.0.4.tgz" - integrity sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0= +"is-alphabetical@^1.0.0", "is-alphabetical@1.0.4": + "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" + "version" "1.0.4" -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz?cache=0&sync_timestamp=1615453958702&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-alphanumerical%2Fdownload%2Fis-alphanumerical-1.0.4.tgz" - integrity sha1-frmiQx+FX2se8aeOMm31FWlsTb8= +"is-alphanumerical@^1.0.0": + "integrity" "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==" + "resolved" "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" + "version" "1.0.4" dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" + "is-alphabetical" "^1.0.0" + "is-decimal" "^1.0.0" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz" - integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" dependencies: - binary-extensions "^2.0.0" + "binary-extensions" "^2.0.0" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.5.tgz?cache=0&sync_timestamp=1604432378894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.5.tgz" - integrity sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE= +"is-buffer@^2.0.0": + "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + "version" "2.0.5" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz?cache=0&sync_timestamp=1613631987391&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-ci%2Fdownload%2Fis-ci-2.0.0.tgz" - integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" dependencies: - ci-info "^2.0.0" + "ci-info" "^2.0.0" -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +"is-core-module@^2.9.0": + "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" + "version" "2.11.0" dependencies: - has "^1.0.3" + "has" "^1.0.3" -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/is-decimal/download/is-decimal-1.0.4.tgz?cache=0&sync_timestamp=1615453959001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-decimal%2Fdownload%2Fis-decimal-1.0.4.tgz" - integrity sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U= +"is-decimal@^1.0.0": + "integrity" "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" + "version" "1.0.4" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +"is-docker@^2.0.0", "is-docker@^2.1.1": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= +"is-extendable@^0.1.0": + "integrity" "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.nlark.com/is-extglob/download/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz" - integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== +"is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" dependencies: - is-extglob "^2.1.1" + "is-extglob" "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz?cache=0&sync_timestamp=1615464641587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-hexadecimal%2Fdownload%2Fis-hexadecimal-1.0.4.tgz" - integrity sha1-zDXJdYjaS9Saju3WvECC1E3LI6c= +"is-hexadecimal@^1.0.0": + "integrity" "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "resolved" "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" + "version" "1.0.4" -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.4.0.tgz?cache=0&sync_timestamp=1610875192100&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.4.0.tgz" - integrity sha1-mg/UB5ScMPhutpWe8beZTtC3tSA= +"is-installed-globally@^0.4.0": + "integrity" "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==" + "resolved" "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" + "version" "0.4.0" dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" + "global-dirs" "^3.0.0" + "is-path-inside" "^3.0.2" -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.nlark.com/is-npm/download/is-npm-5.0.0.tgz" - integrity sha1-Q+jWXMVuG2f41HJiz2ZwmRk/Rag= +"is-npm@^5.0.0": + "integrity" "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "resolved" "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" + "version" "5.0.0" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz" - integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz?cache=0&sync_timestamp=1618600242427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-obj%2Fdownload%2Fis-obj-1.0.1.tgz" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +"is-obj@^1.0.1": + "integrity" "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + "version" "1.0.1" -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz?cache=0&sync_timestamp=1618600242427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-obj%2Fdownload%2Fis-obj-2.0.0.tgz" - integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.nlark.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz" - integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= +"is-path-cwd@^2.2.0": + "integrity" "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + "version" "2.2.0" -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.nlark.com/is-path-inside/download/is-path-inside-3.0.3.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-inside%2Fdownload%2Fis-path-inside-3.0.3.tgz" - integrity sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM= +"is-path-inside@^3.0.2": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz" - integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc= +"is-plain-obj@^2.0.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +"is-plain-obj@^3.0.0": + "integrity" "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + "version" "3.0.0" -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.nlark.com/is-plain-object/download/is-plain-object-2.0.4.tgz" - integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= +"is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" dependencies: - isobject "^3.0.1" + "isobject" "^3.0.1" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz?cache=0&sync_timestamp=1617816642607&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regexp%2Fdownload%2Fis-regexp-1.0.0.tgz" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +"is-regexp@^1.0.0": + "integrity" "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + "resolved" "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + "version" "1.0.0" -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-root/download/is-root-2.1.0.tgz?cache=0&sync_timestamp=1617783375746&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-root%2Fdownload%2Fis-root-2.1.0.tgz" - integrity sha1-gJ4YEpzxEpZEMCpPhUQDXVGYSpw= +"is-root@^2.1.0": + "integrity" "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + "resolved" "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" + "version" "2.1.0" -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/is-stream/download/is-stream-2.0.0.tgz" - integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.nlark.com/is-typedarray/download/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +"is-typedarray@^1.0.0": + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.nlark.com/is-whitespace-character/download/is-whitespace-character-1.0.4.tgz" - integrity sha1-CFjt2UqVWUx8ndC1wXTsbkXuSqc= +"is-whitespace-character@^1.0.0": + "integrity" "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "resolved" "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz" + "version" "1.0.4" -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/is-word-character/download/is-word-character-1.0.4.tgz" - integrity sha1-zg5zIW+YWZBgWS9i/zE1TdvrAjA= +"is-word-character@^1.0.0": + "integrity" "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "resolved" "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz" + "version" "1.0.4" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" dependencies: - is-docker "^2.0.0" + "is-docker" "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.nlark.com/is-yarn-global/download/is-yarn-global-0.3.0.tgz?cache=0&sync_timestamp=1619356719315&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-yarn-global%2Fdownload%2Fis-yarn-global-0.3.0.tgz" - integrity sha1-1QLTOCWQ6jAEiTdGdUyJE5lz4jI= +"is-yarn-global@^0.3.0": + "integrity" "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "resolved" "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" + "version" "0.3.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +"isarray@0.0.1": + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.nlark.com/isobject/download/isobject-3.0.1.tgz" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.npmmirror.com/jest-util/-/jest-util-29.5.0.tgz" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +"jest-util@^29.3.1": + "integrity" "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz" + "version" "29.3.1" dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.3.1" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jest-worker@^29.1.2: - version "29.5.0" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-29.5.0.tgz" - integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== +"jest-worker@^29.1.2": + "integrity" "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz" + "version" "29.3.1" dependencies: "@types/node" "*" - jest-util "^29.5.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "jest-util" "^29.3.1" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jiti@^1.18.2: - version "1.18.2" - resolved "https://registry.npmmirror.com/jiti/-/jiti-1.18.2.tgz" - integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== - -joi@^17.6.0: - version "17.9.2" - resolved "https://registry.npmmirror.com/joi/-/joi-17.9.2.tgz" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== +"joi@^17.6.0": + "integrity" "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==" + "resolved" "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz" + "version" "17.7.0" dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" + "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz" - integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= +"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.nlark.com/js-yaml/download/js-yaml-3.14.1.tgz" - integrity sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc= +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + "argparse" "^1.0.7" + "esprima" "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.nlark.com/js-yaml/download/js-yaml-4.1.0.tgz" - integrity sha1-wftl+PUBeQHN0slRhkuhhFihBgI= +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" dependencies: - argparse "^2.0.1" + "argparse" "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891161295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz" - integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +"jsesc@~0.5.0": + "integrity" "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +"json-buffer@3.0.0": + "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + "version" "3.0.0" -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz" - integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz" - integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" -json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +"json5@^2.1.2", "json5@^2.2.1": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604161844511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz" - integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" dependencies: - universalify "^2.0.0" + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.nlark.com/keyv/download/keyv-3.1.0.tgz" - integrity sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk= +"keyv@^3.0.0": + "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + "version" "3.1.0" dependencies: - json-buffer "3.0.0" + "json-buffer" "3.0.0" -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz" - integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= +"kind-of@^6.0.0", "kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.nlark.com/kleur/download/kleur-3.0.3.tgz" - integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.nlark.com/latest-version/download/latest-version-5.1.0.tgz" - integrity sha1-EZ3+kI/jjRXfpD7NE/oS7Igy+s4= +"klona@^2.0.5": + "integrity" "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "resolved" "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" + "version" "2.0.5" + +"latest-version@^5.1.0": + "integrity" "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==" + "resolved" "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" + "version" "5.1.0" dependencies: - package-json "^6.3.0" + "package-json" "^6.3.0" -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"lilconfig@^2.0.3": + "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + "version" "2.0.6" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + +"loader-utils@^2.0.0": + "integrity" "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" + "version" "2.0.4" dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^2.1.2" -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.nlark.com/leven/download/leven-3.1.0.tgz" - integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= +"loader-utils@^3.2.0": + "integrity" "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + "version" "3.2.1" -lilconfig@^2.0.3: - version "2.1.0" - resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.nlark.com/loader-runner/download/loader-runner-4.2.0.tgz" - integrity sha1-1wIjgNZtFMX7HUlriYZOvP1Hg4Q= - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz" - integrity sha1-5MrOW4FtQloWa18JfhDNErNgZLA= +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" -loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz" - integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + "p-locate" "^4.1.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz" - integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" dependencies: - p-locate "^4.1.0" + "p-locate" "^5.0.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== +"lodash.curry@^4.0.1": + "integrity" "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + "resolved" "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz" + "version" "4.1.1" + +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.flow@^3.3.0": + "integrity" "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + "resolved" "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz" + "version" "3.5.0" + +"lodash.memoize@^4.1.2": + "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.uniq@^4.5.0", "lodash.uniq@4.5.0": + "integrity" "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + "version" "4.5.0" + +"lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"loose-envify@^1.0.0", "loose-envify@^1.1.0", "loose-envify@^1.2.0", "loose-envify@^1.3.1", "loose-envify@^1.4.0": + "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" + "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + "version" "1.4.0" dependencies: - p-locate "^5.0.0" + "js-tokens" "^3.0.0 || ^4.0.0" -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/lodash.curry/-/lodash.curry-4.1.1.tgz" - integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.npmmirror.com/lodash.flow/-/lodash.flow-3.5.0.tgz" - integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - -lodash.uniq@4.5.0, lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1624543041613&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz" - integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.nlark.com/loose-envify/download/loose-envify-1.4.0.tgz" - integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= +"lower-case@^2.0.2": + "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" + "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + "version" "2.0.2" dependencies: - js-tokens "^3.0.0 || ^4.0.0" + "tslib" "^2.0.3" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/lower-case/download/lower-case-2.0.2.tgz?cache=0&sync_timestamp=1606867292121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-2.0.2.tgz" - integrity sha1-b6I3xj29xKgsoP2ILkci3F5jTig= +"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lowercase-keys@^2.0.0": + "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + "version" "2.0.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" dependencies: - tslib "^2.0.3" + "yallist" "^4.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.nlark.com/lowercase-keys/download/lowercase-keys-1.0.1.tgz" - integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= +"lunr-languages@^1.4.0": + "integrity" "sha512-BBjKKcwrieJlzwwc9M5H/MRXGJ2qyOSDx/NXYiwkuKjiLOOoouh0WsDzeqcLoUWcX31y7i8sb8IgsZKObdUCkw==" + "resolved" "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.10.0.tgz" + "version" "1.10.0" -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/lowercase-keys/download/lowercase-keys-2.0.0.tgz" - integrity sha1-JgPni3tLAAbLyi+8yKMgJVislHk= - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +"make-dir@^3.0.0", "make-dir@^3.0.2", "make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" dependencies: - yallist "^3.0.2" + "semver" "^6.0.0" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1619933505159&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz" - integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= +"mark.js@^8.11.1": + "integrity" "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" + "resolved" "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz" + "version" "8.11.1" + +"markdown-escapes@^1.0.0": + "integrity" "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "resolved" "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz" + "version" "1.0.4" + +"mdast-squeeze-paragraphs@^4.0.0": + "integrity" "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==" + "resolved" "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz" + "version" "4.0.0" dependencies: - yallist "^4.0.0" + "unist-util-remove" "^2.0.0" -lunr-languages@^1.4.0: - version "1.12.0" - resolved "https://registry.npmmirror.com/lunr-languages/-/lunr-languages-1.12.0.tgz" - integrity sha512-C2z02jt74ymrDocBwxYB4Cr1LNZj9rHGLTH/00+JuoT6eJOSSuPBzeqQG8kjnlPUQe+/PAWv1/KHbDT+YYYRnA== - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz" - integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= +"mdast-util-definitions@^4.0.0": + "integrity" "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==" + "resolved" "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz" + "version" "4.0.0" dependencies: - semver "^6.0.0" + "unist-util-visit" "^2.0.0" -mark.js@^8.11.1: - version "8.11.1" - resolved "https://registry.npmmirror.com/mark.js/-/mark.js-8.11.1.tgz" - integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== - -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/markdown-escapes/download/markdown-escapes-1.0.4.tgz?cache=0&sync_timestamp=1615301618148&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarkdown-escapes%2Fdownload%2Fmarkdown-escapes-1.0.4.tgz" - integrity sha1-yVQV70UUmddgK5EJXzyOiXX3hTU= - -mdast-squeeze-paragraphs@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/mdast-squeeze-paragraphs/download/mdast-squeeze-paragraphs-4.0.0.tgz" - integrity sha1-fEwRRnnDvuJ+8QtY4uAVvnnx75c= - dependencies: - unist-util-remove "^2.0.0" - -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/mdast-util-definitions/download/mdast-util-definitions-4.0.0.tgz" - integrity sha1-xcGoTbeZFztNz3ZDzamZ5EDCTbI= - dependencies: - unist-util-visit "^2.0.0" - -mdast-util-to-hast@10.0.1: - version "10.0.1" - resolved "https://registry.nlark.com/mdast-util-to-hast/download/mdast-util-to-hast-10.0.1.tgz" - integrity sha1-DPyCCJSUxS1G6w4+23pOsq6gIes= +"mdast-util-to-hast@10.0.1": + "integrity" "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==" + "resolved" "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz" + "version" "10.0.1" dependencies: "@types/mdast" "^3.0.0" "@types/unist" "^2.0.0" - mdast-util-definitions "^4.0.0" - mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" + "mdast-util-definitions" "^4.0.0" + "mdurl" "^1.0.0" + "unist-builder" "^2.0.0" + "unist-util-generated" "^1.0.0" + "unist-util-position" "^3.0.0" + "unist-util-visit" "^2.0.0" -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/mdast-util-to-string/download/mdast-util-to-string-2.0.0.tgz" - integrity sha1-uM/mpxPhCRy1tyj8SIhaR2f4uXs= +"mdast-util-to-string@^2.0.0": + "integrity" "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "resolved" "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" + "version" "2.0.0" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +"mdn-data@2.0.14": + "integrity" "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + "version" "2.0.14" -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.nlark.com/mdurl/download/mdurl-1.0.1.tgz" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +"mdurl@^1.0.0": + "integrity" "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "resolved" "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" + "version" "1.0.1" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" -medium-zoom@^1.0.6: - version "1.0.8" - resolved "https://registry.npmmirror.com/medium-zoom/-/medium-zoom-1.0.8.tgz" - integrity sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA== +"medium-zoom@^1.0.6": + "integrity" "sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==" + "resolved" "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.8.tgz" + "version" "1.0.8" -memfs@^3.1.2, memfs@^3.4.3: - version "3.5.3" - resolved "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz" - integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== +"memfs@^3.1.2", "memfs@^3.4.3": + "integrity" "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==" + "resolved" "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz" + "version" "3.4.12" dependencies: - fs-monkey "^1.0.4" + "fs-monkey" "^1.0.3" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.nlark.com/merge-descriptors/download/merge-descriptors-1.0.1.tgz" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz" - integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz" - integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +"methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +"micromatch@^4.0.2", "micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" dependencies: - braces "^3.0.2" - picomatch "^2.3.1" + "braces" "^3.0.2" + "picomatch" "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.nlark.com/mime-db/download/mime-db-1.33.0.tgz?cache=0&sync_timestamp=1622433556078&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.33.0.tgz" - integrity sha1-o0kgUKXLm2NFBUHjnZeI0icng9s= +"mime-db@~1.33.0": + "integrity" "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" + "version" "1.33.0" -mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.nlark.com/mime-types/download/mime-types-2.1.18.tgz?cache=0&sync_timestamp=1622569162264&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.18.tgz" - integrity sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g= +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.27": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - mime-db "~1.33.0" + "mime-db" "1.52.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== +"mime-types@^2.1.31": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - mime-db "1.52.0" + "mime-db" "1.52.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.3.1: - version "2.5.2" - resolved "https://registry.nlark.com/mime/download/mime-2.5.2.tgz" - integrity sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4= - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.nlark.com/mimic-fn/download/mimic-fn-2.1.0.tgz" - integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz" - integrity sha1-SSNTiHju9CBjy4o+OweYeBSHqxs= - -mini-css-extract-plugin@^2.6.1: - version "2.7.6" - resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== +"mime-types@~2.1.17", "mime-types@2.1.18": + "integrity" "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" + "version" "2.1.18" dependencies: - schema-utils "^4.0.0" + "mime-db" "~1.33.0" -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz" - integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.nlark.com/minimatch/download/minimatch-3.0.4.tgz" - integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= +"mime-types@~2.1.24": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - brace-expansion "^1.1.7" + "mime-db" "1.52.0" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433872491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz" - integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== +"mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" + "mime-db" "1.52.0" -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.nlark.com/neo-async/download/neo-async-2.6.2.tgz" - integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= +"mimic-response@^1.0.0", "mimic-response@^1.0.1": + "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + "version" "1.0.1" -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.nlark.com/no-case/download/no-case-3.0.4.tgz" - integrity sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0= +"mini-css-extract-plugin@^2.6.1": + "integrity" "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==" + "resolved" "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" + "version" "2.7.2" dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" + "schema-utils" "^4.0.0" -node-emoji@^1.10.0: - version "1.10.0" - resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz" - integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= +"minimalistic-assert@^1.0.0": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" dependencies: - lodash.toarray "^4.4.0" + "brace-expansion" "^1.1.7" -node-fetch@^2.6.11: - version "2.6.12" - resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.12.tgz" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== +"minimist@^1.2.0", "minimist@^1.2.5": + "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + "version" "1.2.7" + +"mrmime@^1.0.0": + "integrity" "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + "resolved" "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" + "version" "1.0.1" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"multicast-dns@^7.2.5": + "integrity" "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==" + "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + "version" "7.2.5" dependencies: - whatwg-url "^5.0.0" + "dns-packet" "^5.2.2" + "thunky" "^1.0.2" -node-forge@^1: - version "1.3.1" - resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +"nanoid@^3.3.4": + "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" + "version" "3.3.4" -node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.12.tgz" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== +"negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz" - integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= +"neo-async@^2.6.2": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.nlark.com/normalize-url/download/normalize-url-4.5.1.tgz" - integrity sha1-DdkM8SiO4dExO4cIHJpZMu5IUYo= - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.nlark.com/npm-run-path/download/npm-run-path-4.0.1.tgz" - integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= +"no-case@^3.0.4": + "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" + "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + "version" "3.0.4" dependencies: - path-key "^3.0.0" + "lower-case" "^2.0.2" + "tslib" "^2.0.3" -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== +"node-emoji@^1.10.0": + "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" + "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + "version" "1.11.0" dependencies: - boolbase "^1.0.0" + "lodash" "^4.17.21" -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.nlark.com/object-keys/download/object-keys-1.1.1.tgz" - integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= - -object.assign@^4.1.0: - version "4.1.4" - resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +"node-fetch@^2.6.11": + "integrity" "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + "version" "2.6.11" dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" + "whatwg-url" "^5.0.0" -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz" - integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= +"node-forge@^1": + "integrity" "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + "version" "1.3.1" -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== +"node-releases@^2.0.8": + "integrity" "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz" + "version" "2.0.10" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-range@^0.1.2": + "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + "version" "0.1.2" + +"normalize-url@^4.1.0": + "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + "version" "4.5.1" + +"normalize-url@^6.0.1": + "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + "version" "6.1.0" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" dependencies: - ee-first "1.1.1" + "path-key" "^3.0.0" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.nlark.com/on-headers/download/on-headers-1.0.2.tgz" - integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= +"nprogress@^0.2.0": + "integrity" "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + "resolved" "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" + "version" "0.2.0" -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.nlark.com/once/download/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= +"nth-check@^2.0.1": + "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + "version" "2.1.1" dependencies: - wrappy "1" + "boolbase" "^1.0.0" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.nlark.com/onetime/download/onetime-5.1.2.tgz" - integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= +"object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object.assign@^4.1.0": + "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + "version" "4.1.4" dependencies: - mimic-fn "^2.1.0" + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" + "object-keys" "^1.1.1" -open@^8.0.9, open@^8.4.0: - version "8.4.2" - resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== +"obuf@^1.0.0", "obuf@^1.1.2": + "integrity" "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "resolved" "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + "version" "1.1.2" + +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + "ee-first" "1.1.1" -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz" - integrity sha1-XTfh81B3udysQwE3InGv3rKhNZg= +"on-headers@~1.0.2": + "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + "version" "1.0.2" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.nlark.com/p-cancelable/download/p-cancelable-1.1.0.tgz" - integrity sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw= - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288352885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz" - integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" dependencies: - p-try "^2.0.0" + "wrappy" "1" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288352885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz" - integrity sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs= +"onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" dependencies: - yocto-queue "^0.1.0" + "mimic-fn" "^2.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz" - integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= +"open@^8.0.9", "open@^8.4.0": + "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + "version" "8.4.0" dependencies: - p-limit "^2.0.0" + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz" - integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= +"opener@^1.5.2": + "integrity" "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + "resolved" "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" + "version" "1.5.2" + +"p-cancelable@^1.0.0": + "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + "version" "1.1.0" + +"p-limit@^2.0.0", "p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" dependencies: - p-limit "^2.2.0" + "p-try" "^2.0.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" dependencies: - p-limit "^3.0.2" + "yocto-queue" "^0.1.0" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz" - integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs= +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" dependencies: - aggregate-error "^3.0.0" + "p-limit" "^2.0.0" -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"p-retry@^4.5.0": + "integrity" "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==" + "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + "version" "4.6.2" dependencies: "@types/retry" "0.12.0" - retry "^0.13.1" + "retry" "^0.13.1" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.nlark.com/p-try/download/p-try-2.2.0.tgz" - integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.nlark.com/package-json/download/package-json-6.5.0.tgz?cache=0&sync_timestamp=1624549851966&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpackage-json%2Fdownload%2Fpackage-json-6.5.0.tgz" - integrity sha1-b+7ayjXnVyWHbQsOZJdGl/7RRbA= +"package-json@^6.3.0": + "integrity" "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==" + "resolved" "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" + "version" "6.5.0" dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + "got" "^9.6.0" + "registry-auth-token" "^4.0.0" + "registry-url" "^5.0.0" + "semver" "^6.2.0" -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.nlark.com/param-case/download/param-case-3.0.4.tgz" - integrity sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU= +"param-case@^3.0.4": + "integrity" "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==" + "resolved" "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + "version" "3.0.4" dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" + "dot-case" "^3.0.4" + "tslib" "^2.0.3" -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz" - integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" dependencies: - callsites "^3.0.0" + "callsites" "^3.0.0" -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-2.0.0.tgz" - integrity sha1-U8brW5MUofTsmfoP33zgHs2gy+g= +"parse-entities@^2.0.0": + "integrity" "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==" + "resolved" "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" + "version" "2.0.0" dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" + "character-entities" "^1.0.0" + "character-entities-legacy" "^1.0.0" + "character-reference-invalid" "^1.0.0" + "is-alphanumerical" "^1.0.0" + "is-decimal" "^1.0.0" + "is-hexadecimal" "^1.0.0" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.nlark.com/parse-json/download/parse-json-5.2.0.tgz" - integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= +"parse-json@^5.0.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" -parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== +"parse-numeric-range@^1.3.0": + "integrity" "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + "resolved" "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" + "version" "1.3.0" -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== +"parse5-htmlparser2-tree-adapter@^7.0.0": + "integrity" "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + "version" "7.0.0" dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" + "domhandler" "^5.0.2" + "parse5" "^7.0.0" -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz" - integrity sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws= +"parse5@^6.0.0": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== +"parse5@^7.0.0": + "integrity" "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + "version" "7.1.2" dependencies: - entities "^4.4.0" + "entities" "^4.4.0" -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.nlark.com/parseurl/download/parseurl-1.3.3.tgz" - integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= +"parseurl@~1.3.2", "parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npm.taobao.org/pascal-case/download/pascal-case-3.1.2.tgz?cache=0&sync_timestamp=1606867306970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpascal-case%2Fdownload%2Fpascal-case-3.1.2.tgz" - integrity sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs= +"pascal-case@^3.1.2": + "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==" + "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + "version" "3.1.2" dependencies: - no-case "^3.0.4" - tslib "^2.0.3" + "no-case" "^3.0.4" + "tslib" "^2.0.3" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +"path-exists@^3.0.0": + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz" - integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.nlark.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" -path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +"path-is-inside@1.0.2": + "integrity" "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz" - integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz" - integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.npmmirror.com/path-root-regex/-/path-root-regex-0.1.2.tgz" - integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== +"path-root-regex@^0.1.0": + "integrity" "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" + "resolved" "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + "version" "0.1.2" -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/path-root/-/path-root-0.1.1.tgz" - integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== +"path-root@^0.1.1": + "integrity" "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==" + "resolved" "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + "version" "0.1.1" dependencies: - path-root-regex "^0.1.0" + "path-root-regex" "^0.1.0" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-2.2.1.tgz" - integrity sha1-kLYXAloWOBqHm8gqONTovesrz0U= - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.8.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-1.8.0.tgz" - integrity sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo= +"path-to-regexp@^1.7.0": + "integrity" "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + "version" "1.8.0" dependencies: - isarray "0.0.1" + "isarray" "0.0.1" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/path-type/download/path-type-4.0.0.tgz" - integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +"path-to-regexp@2.2.1": + "integrity" "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" + "version" "2.2.1" -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.nlark.com/pkg-dir/download/pkg-dir-4.2.0.tgz" - integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pkg-dir@^4.1.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" dependencies: - find-up "^4.0.0" + "find-up" "^4.0.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/pkg-up/download/pkg-up-3.1.0.tgz" - integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU= +"pkg-up@^3.1.0": + "integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + "version" "3.1.0" dependencies: - find-up "^3.0.0" + "find-up" "^3.0.0" -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== +"postcss-calc@^8.2.3": + "integrity" "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==" + "resolved" "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" + "version" "8.2.4" dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" + "postcss-selector-parser" "^6.0.9" + "postcss-value-parser" "^4.2.0" -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== +"postcss-colormin@^5.3.1": + "integrity" "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==" + "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz" + "version" "5.3.1" dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" + "browserslist" "^4.21.4" + "caniuse-api" "^3.0.0" + "colord" "^2.9.1" + "postcss-value-parser" "^4.2.0" -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== +"postcss-convert-values@^5.1.3": + "integrity" "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==" + "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" + "version" "5.1.3" dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" + "browserslist" "^4.21.4" + "postcss-value-parser" "^4.2.0" -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +"postcss-discard-comments@^5.1.2": + "integrity" "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" + "version" "5.1.2" -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +"postcss-discard-duplicates@^5.1.0": + "integrity" "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" + "version" "5.1.0" -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== +"postcss-discard-empty@^5.1.1": + "integrity" "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" + "version" "5.1.1" -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== +"postcss-discard-overridden@^5.1.0": + "integrity" "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" + "version" "5.1.0" -postcss-discard-unused@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz" - integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== +"postcss-discard-unused@^5.1.0": + "integrity" "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==" + "resolved" "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-selector-parser "^6.0.5" + "postcss-selector-parser" "^6.0.5" -postcss-loader@^7.0.0: - version "7.3.3" - resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-7.3.3.tgz" - integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== +"postcss-loader@^7.0.0": + "integrity" "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==" + "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + "version" "7.0.2" dependencies: - cosmiconfig "^8.2.0" - jiti "^1.18.2" - semver "^7.3.8" + "cosmiconfig" "^7.0.0" + "klona" "^2.0.5" + "semver" "^7.3.8" -postcss-merge-idents@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz" - integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== +"postcss-merge-idents@^5.1.1": + "integrity" "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==" + "resolved" "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz" + "version" "5.1.1" dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== +"postcss-merge-longhand@^5.1.7": + "integrity" "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==" + "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" + "version" "5.1.7" dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" + "postcss-value-parser" "^4.2.0" + "stylehacks" "^5.1.1" -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== +"postcss-merge-rules@^5.1.4": + "integrity" "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==" + "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" + "version" "5.1.4" dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" + "browserslist" "^4.21.4" + "caniuse-api" "^3.0.0" + "cssnano-utils" "^3.1.0" + "postcss-selector-parser" "^6.0.5" -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== +"postcss-minify-font-values@^5.1.0": + "integrity" "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==" + "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== +"postcss-minify-gradients@^5.1.1": + "integrity" "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==" + "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" + "version" "5.1.1" dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" + "colord" "^2.9.1" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== +"postcss-minify-params@^5.1.4": + "integrity" "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==" + "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" + "version" "5.1.4" dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" + "browserslist" "^4.21.4" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== +"postcss-minify-selectors@^5.2.1": + "integrity" "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==" + "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" + "version" "5.2.1" dependencies: - postcss-selector-parser "^6.0.5" + "postcss-selector-parser" "^6.0.5" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz?cache=0&sync_timestamp=1602588202058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-3.0.0.tgz" - integrity sha1-zaHwR8CugMl9vijD52pDuIAldB0= +"postcss-modules-extract-imports@^3.0.0": + "integrity" "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "resolved" "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" + "version" "3.0.0" -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== +"postcss-modules-local-by-default@^4.0.0": + "integrity" "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==" + "resolved" "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" + "version" "4.0.0" dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" + "icss-utils" "^5.0.0" + "postcss-selector-parser" "^6.0.2" + "postcss-value-parser" "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz" - integrity sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY= +"postcss-modules-scope@^3.0.0": + "integrity" "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==" + "resolved" "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" + "version" "3.0.0" dependencies: - postcss-selector-parser "^6.0.4" + "postcss-selector-parser" "^6.0.4" -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz?cache=0&sync_timestamp=1602586308035&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-4.0.0.tgz" - integrity sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw= +"postcss-modules-values@^4.0.0": + "integrity" "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==" + "resolved" "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + "version" "4.0.0" dependencies: - icss-utils "^5.0.0" + "icss-utils" "^5.0.0" -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +"postcss-normalize-charset@^5.1.0": + "integrity" "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" + "version" "5.1.0" -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== +"postcss-normalize-display-values@^5.1.0": + "integrity" "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== +"postcss-normalize-positions@^5.1.1": + "integrity" "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" + "version" "5.1.1" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== +"postcss-normalize-repeat-style@^5.1.1": + "integrity" "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==" + "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" + "version" "5.1.1" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== +"postcss-normalize-string@^5.1.0": + "integrity" "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==" + "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== +"postcss-normalize-timing-functions@^5.1.0": + "integrity" "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== +"postcss-normalize-unicode@^5.1.1": + "integrity" "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" + "version" "5.1.1" dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" + "browserslist" "^4.21.4" + "postcss-value-parser" "^4.2.0" -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== +"postcss-normalize-url@^5.1.0": + "integrity" "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==" + "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" + "version" "5.1.0" dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" + "normalize-url" "^6.0.1" + "postcss-value-parser" "^4.2.0" -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== +"postcss-normalize-whitespace@^5.1.1": + "integrity" "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" + "version" "5.1.1" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== +"postcss-ordered-values@^5.1.3": + "integrity" "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==" + "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" + "version" "5.1.3" dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -postcss-reduce-idents@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz" - integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== +"postcss-reduce-idents@^5.2.0": + "integrity" "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==" + "resolved" "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz" + "version" "5.2.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== +"postcss-reduce-initial@^5.1.2": + "integrity" "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==" + "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" + "version" "5.1.2" dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" + "browserslist" "^4.21.4" + "caniuse-api" "^3.0.0" -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== +"postcss-reduce-transforms@^5.1.0": + "integrity" "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==" + "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" + "postcss-value-parser" "^4.2.0" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== +"postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.4", "postcss-selector-parser@^6.0.5", "postcss-selector-parser@^6.0.9": + "integrity" "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" + "version" "6.0.11" dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" -postcss-sort-media-queries@^4.2.1: - version "4.4.1" - resolved "https://registry.npmmirror.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz" - integrity sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw== +"postcss-sort-media-queries@^4.2.1": + "integrity" "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==" + "resolved" "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz" + "version" "4.4.1" dependencies: - sort-css-media-queries "2.1.0" + "sort-css-media-queries" "2.1.0" -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== +"postcss-svgo@^5.1.0": + "integrity" "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==" + "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" + "version" "5.1.0" dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" + "postcss-value-parser" "^4.2.0" + "svgo" "^2.7.0" -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== +"postcss-unique-selectors@^5.1.1": + "integrity" "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==" + "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" + "version" "5.1.1" dependencies: - postcss-selector-parser "^6.0.5" + "postcss-selector-parser" "^6.0.5" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +"postcss-value-parser@^4.1.0", "postcss-value-parser@^4.2.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" -postcss-zindex@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz" - integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== +"postcss-zindex@^5.1.0": + "integrity" "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==" + "resolved" "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz" + "version" "5.1.0" -postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: - version "8.4.24" - resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz" - integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== +"postcss@^7.0.0 || ^8.0.1", "postcss@^8.0.9", "postcss@^8.1.0", "postcss@^8.2.15", "postcss@^8.2.2", "postcss@^8.3.11", "postcss@^8.4.14", "postcss@^8.4.16", "postcss@^8.4.17", "postcss@^8.4.18": + "integrity" "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz" + "version" "8.4.19" dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + "nanoid" "^3.3.4" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" -preact@^10.13.2: - version "10.15.1" - resolved "https://registry.npmmirror.com/preact/-/preact-10.15.1.tgz" - integrity sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g== +"preact@^10.0.0": + "integrity" "sha512-ERdIdUpR6doqdaSIh80hvzebHB7O6JxycOhyzAeLEchqOq/4yueslQbfnPwXaNhAYacFTyCclhwkEbOumT0tHw==" + "resolved" "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" + "version" "10.13.0" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +"prepend-http@^2.0.0": + "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + "version" "2.0.0" -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== +"pretty-error@^4.0.0": + "integrity" "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==" + "resolved" "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" + "version" "4.0.0" dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" + "lodash" "^4.17.20" + "renderkid" "^3.0.0" -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/pretty-time/download/pretty-time-1.1.0.tgz" - integrity sha1-/7dCmvq7hTXDRqNOQYc63z103Q4= +"pretty-time@^1.1.0": + "integrity" "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + "resolved" "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" + "version" "1.1.0" -prism-react-renderer@^1.3.5: - version "1.3.5" - resolved "https://registry.npmmirror.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz" - integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== +"prism-react-renderer@^1.3.5": + "integrity" "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==" + "resolved" "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz" + "version" "1.3.5" -prismjs@^1.28.0: - version "1.29.0" - resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== +"prismjs@^1.28.0": + "integrity" "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz" + "version" "1.29.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz" - integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== +"promise@^7.1.1": + "integrity" "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" + "version" "7.3.1" dependencies: - asap "~2.0.3" + "asap" "~2.0.3" -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== +"prompts@^2.4.2": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== +"prop-types@^15.6.2", "prop-types@^15.7.2": + "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" + "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + "version" "15.8.1" dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" + "loose-envify" "^1.4.0" + "object-assign" "^4.1.1" + "react-is" "^16.13.1" -property-information@^5.0.0, property-information@^5.3.0: - version "5.6.0" - resolved "https://registry.nlark.com/property-information/download/property-information-5.6.0.tgz" - integrity sha1-YWdVRfsjAC8kXGVA7EYHfU2j7Wk= +"property-information@^5.0.0", "property-information@^5.3.0": + "integrity" "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==" + "resolved" "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" + "version" "5.6.0" dependencies: - xtend "^4.0.0" + "xtend" "^4.0.0" -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz?cache=0&sync_timestamp=1622509170257&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.7.tgz" - integrity sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU= +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz" - integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" + "end-of-stream" "^1.1.0" + "once" "^1.3.1" -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +"punycode@^1.3.2": + "integrity" "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "version" "1.4.1" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz" - integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.npm.taobao.org/pupa/download/pupa-2.1.1.tgz" - integrity sha1-9ej9SvwsXZeCj6pSNUnth0SiDWI= +"pupa@^2.1.1": + "integrity" "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==" + "resolved" "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" + "version" "2.1.1" dependencies: - escape-goat "^2.0.0" + "escape-goat" "^2.0.0" -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/pure-color/-/pure-color-1.3.0.tgz" - integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== +"pure-color@^1.2.0": + "integrity" "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + "resolved" "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz" + "version" "1.3.0" -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +"qs@6.11.0": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" dependencies: - side-channel "^1.0.4" + "side-channel" "^1.0.4" -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391510274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz" - integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" -queue@6.0.2: - version "6.0.2" - resolved "https://registry.npmmirror.com/queue/-/queue-6.0.2.tgz" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== +"queue@6.0.2": + "integrity" "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==" + "resolved" "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + "version" "6.0.2" dependencies: - inherits "~2.0.3" + "inherits" "~2.0.3" -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz" - integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" dependencies: - safe-buffer "^5.1.0" + "safe-buffer" "^5.1.0" -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +"range-parser@^1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz" - integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +"range-parser@1.2.0": + "integrity" "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" + "version" "1.2.0" + +"raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz?cache=0&sync_timestamp=1593529723659&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc%2Fdownload%2Frc-1.2.8.tgz" - integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= +"rc@^1.2.8", "rc@1.2.8": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz" - integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== +"react-base16-styling@^0.6.0": + "integrity" "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==" + "resolved" "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz" + "version" "0.6.0" dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" + "base16" "^1.0.0" + "lodash.curry" "^4.0.1" + "lodash.flow" "^3.3.0" + "pure-color" "^1.2.0" -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.npmmirror.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== +"react-dev-utils@^12.0.1": + "integrity" "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==" + "resolved" "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" + "version" "12.0.1" dependencies: "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" + "address" "^1.1.2" + "browserslist" "^4.18.1" + "chalk" "^4.1.2" + "cross-spawn" "^7.0.3" + "detect-port-alt" "^1.1.6" + "escape-string-regexp" "^4.0.0" + "filesize" "^8.0.6" + "find-up" "^5.0.0" + "fork-ts-checker-webpack-plugin" "^6.5.0" + "global-modules" "^2.0.0" + "globby" "^11.0.4" + "gzip-size" "^6.0.0" + "immer" "^9.0.7" + "is-root" "^2.1.0" + "loader-utils" "^3.2.0" + "open" "^8.4.0" + "pkg-up" "^3.1.0" + "prompts" "^2.4.2" + "react-error-overlay" "^6.0.11" + "recursive-readdir" "^2.2.2" + "shell-quote" "^1.7.3" + "strip-ansi" "^6.0.1" + "text-table" "^0.2.0" -react-dom@17.0.2: - version "17.0.2" - resolved "https://registry.nlark.com/react-dom/download/react-dom-17.0.2.tgz?cache=0&sync_timestamp=1625847652667&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-dom%2Fdownload%2Freact-dom-17.0.2.tgz" - integrity sha1-7P+2hF462Nv83EmPDQqTlzZQLCM= +"react-dom@*", "react-dom@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.4 || ^17.0.0", "react-dom@^17.0.0 || ^16.3.0 || ^15.5.4", "react-dom@>= 16.8.0 < 19.0.0", "react-dom@17.0.2": + "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" + "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" + "version" "17.0.2" dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + "loose-envify" "^1.1.0" + "object-assign" "^4.1.1" + "scheduler" "^0.20.2" -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +"react-error-overlay@^6.0.11": + "integrity" "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + "resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" + "version" "6.0.11" -react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/react-fast-compare/download/react-fast-compare-3.2.0.tgz" - integrity sha1-ZBqdqBtqYyDycOiXJPtFoLOeQ7s= +"react-fast-compare@^3.2.0": + "integrity" "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" + "version" "3.2.0" -react-helmet-async@*, react-helmet-async@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== +"react-helmet-async@*", "react-helmet-async@^1.3.0": + "integrity" "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==" + "resolved" "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz" + "version" "1.3.0" dependencies: "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" + "invariant" "^2.2.4" + "prop-types" "^15.7.2" + "react-fast-compare" "^3.2.0" + "shallowequal" "^1.1.0" -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.nlark.com/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1625847345541&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz" - integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= +"react-is@^16.13.1", "react-is@^16.6.0", "react-is@^16.7.0": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" -react-json-view@^1.21.3: - version "1.21.3" - resolved "https://registry.npmmirror.com/react-json-view/-/react-json-view-1.21.3.tgz" - integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== +"react-json-view@^1.21.3": + "integrity" "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==" + "resolved" "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz" + "version" "1.21.3" dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" + "flux" "^4.0.1" + "react-base16-styling" "^0.6.0" + "react-lifecycles-compat" "^3.0.4" + "react-textarea-autosize" "^8.3.2" -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +"react-lifecycles-compat@^3.0.0", "react-lifecycles-compat@^3.0.4": + "integrity" "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "resolved" "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" + "version" "3.0.4" -react-loadable-ssr-addon-v5-slorber@^1.0.1: - version "1.0.1" - resolved "https://registry.nlark.com/react-loadable-ssr-addon-v5-slorber/download/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz" - integrity sha1-LNyR6KdE/9+eNVbKq+tuQnhomIM= +"react-loadable-ssr-addon-v5-slorber@^1.0.1": + "integrity" "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==" + "resolved" "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/runtime" "^7.10.3" -react-modal@3.16.1: - version "3.16.1" - resolved "https://registry.npmmirror.com/react-modal/-/react-modal-3.16.1.tgz" - integrity sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg== +"react-loadable@*", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + "integrity" "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" + "version" "5.5.2" dependencies: - exenv "^1.2.0" - prop-types "^15.7.2" - react-lifecycles-compat "^3.0.0" - warning "^4.0.3" + "@types/react" "*" + "prop-types" "^15.6.2" -react-router-config@^5.1.1: - version "5.1.1" - resolved "https://registry.npm.taobao.org/react-router-config/download/react-router-config-5.1.1.tgz" - integrity sha1-D0Jj0agMay3HucGQLJUmR4GUqYg= +"react-modal@3.16.1": + "integrity" "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==" + "resolved" "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz" + "version" "3.16.1" + dependencies: + "exenv" "^1.2.0" + "prop-types" "^15.7.2" + "react-lifecycles-compat" "^3.0.0" + "warning" "^4.0.3" + +"react-router-config@^5.1.1": + "integrity" "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==" + "resolved" "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" + "version" "5.1.1" dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.3.3: - version "5.3.4" - resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-5.3.4.tgz" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== +"react-router-dom@^5.3.3": + "integrity" "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==" + "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz" + "version" "5.3.4" dependencies: "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "history" "^4.9.0" + "loose-envify" "^1.3.1" + "prop-types" "^15.6.2" + "react-router" "5.3.4" + "tiny-invariant" "^1.0.2" + "tiny-warning" "^1.0.0" -react-router@5.3.4, react-router@^5.3.3: - version "5.3.4" - resolved "https://registry.npmmirror.com/react-router/-/react-router-5.3.4.tgz" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== +"react-router@^5.3.3", "react-router@>=5", "react-router@5.3.4": + "integrity" "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==" + "resolved" "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" + "version" "5.3.4" dependencies: "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "history" "^4.9.0" + "hoist-non-react-statics" "^3.1.0" + "loose-envify" "^1.3.1" + "path-to-regexp" "^1.7.0" + "prop-types" "^15.6.2" + "react-is" "^16.6.0" + "tiny-invariant" "^1.0.2" + "tiny-warning" "^1.0.0" -react-textarea-autosize@^8.3.2: - version "8.5.0" - resolved "https://registry.npmmirror.com/react-textarea-autosize/-/react-textarea-autosize-8.5.0.tgz" - integrity sha512-cp488su3U9RygmHmGpJp0KEt0i/+57KCK33XVPH+50swVRBhIZYh0fGduz2YLKXwl9vSKBZ9HUXcg9PQXUXqIw== +"react-textarea-autosize@^8.3.2": + "integrity" "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==" + "resolved" "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz" + "version" "8.4.1" dependencies: "@babel/runtime" "^7.20.13" - use-composed-ref "^1.3.0" - use-latest "^1.2.1" + "use-composed-ref" "^1.3.0" + "use-latest" "^1.2.1" -react@17.0.2: - version "17.0.2" - resolved "https://registry.nlark.com/react/download/react-17.0.2.tgz?cache=0&sync_timestamp=1625847650902&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact%2Fdownload%2Freact-17.0.2.tgz" - integrity sha1-0LXMUW0p6z7uOD91tihkz7aAADc= +"react@*", "react@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react@^15.0.2 || ^16.0.0 || ^17.0.0", "react@^16.13.1 || ^17.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.4 || ^17.0.0", "react@^17.0.0 || ^16.3.0 || ^15.5.4", "react@>= 16.8.0 < 19.0.0", "react@>=0.14.9", "react@>=15", "react@17.0.2": + "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" + "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" + "version" "17.0.2" dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" + "loose-envify" "^1.1.0" + "object-assign" "^4.1.1" -readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz" - integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= +"readable-stream@^2.0.1": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" 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" + "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" -readable-stream@^3.0.6: - version "3.6.0" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz" - integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= +"readable-stream@^3.0.6": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz" - integrity sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" dependencies: - picomatch "^2.2.1" + "picomatch" "^2.2.1" -reading-time@^1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/reading-time/-/reading-time-1.5.0.tgz" - integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== +"reading-time@^1.5.0": + "integrity" "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + "resolved" "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz" + "version" "1.5.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= +"rechoir@^0.6.2": + "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" dependencies: - resolve "^1.1.6" + "resolve" "^1.1.6" -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.npm.taobao.org/recursive-readdir/download/recursive-readdir-2.2.2.tgz" - integrity sha1-mUb7MnThYo3m42svZxSVO0hFCU8= +"recursive-readdir@^2.2.2": + "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" + "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + "version" "2.2.3" dependencies: - minimatch "3.0.4" + "minimatch" "^3.0.5" -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== +"regenerate-unicode-properties@^10.1.0": + "integrity" "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" + "version" "10.1.0" dependencies: - regenerate "^1.4.2" + "regenerate" "^1.4.2" -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +"regenerate@^1.4.2": + "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + "version" "1.4.2" -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +"regenerator-runtime@^0.13.11": + "integrity" "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + "version" "0.13.11" -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +"regenerator-transform@^0.15.1": + "integrity" "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" + "version" "0.15.1" dependencies: "@babel/runtime" "^7.8.4" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +"regexpu-core@^5.2.1": + "integrity" "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz" + "version" "5.2.2" dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.1.0" + "regjsgen" "^0.7.1" + "regjsparser" "^0.9.1" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.1.0" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.1.tgz" - integrity sha1-bXtABkQZGJcszV/tzUHcMix5slA= +"registry-auth-token@^4.0.0": + "integrity" "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==" + "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" + "version" "4.2.2" dependencies: - rc "^1.2.8" + "rc" "1.2.8" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.nlark.com/registry-url/download/registry-url-5.1.0.tgz" - integrity sha1-6YM0tQ1UNLgRNrROxjjZwgCcUAk= +"registry-url@^5.0.0": + "integrity" "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==" + "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" + "version" "5.1.0" dependencies: - rc "^1.2.8" + "rc" "^1.2.8" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +"regjsgen@^0.7.1": + "integrity" "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz" + "version" "0.7.1" + +"regjsparser@^0.9.1": + "integrity" "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + "version" "0.9.1" dependencies: - jsesc "~0.5.0" + "jsesc" "~0.5.0" -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.nlark.com/relateurl/download/relateurl-0.2.7.tgz" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +"relateurl@^0.2.7": + "integrity" "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + "resolved" "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + "version" "0.2.7" -remark-emoji@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/remark-emoji/download/remark-emoji-2.2.0.tgz" - integrity sha1-HHAgkKFSXaW4DhWo+WPvLII2ysc= +"remark-emoji@^2.2.0": + "integrity" "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==" + "resolved" "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz" + "version" "2.2.0" dependencies: - emoticon "^3.2.0" - node-emoji "^1.10.0" - unist-util-visit "^2.0.3" + "emoticon" "^3.2.0" + "node-emoji" "^1.10.0" + "unist-util-visit" "^2.0.3" -remark-footnotes@2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/remark-footnotes/download/remark-footnotes-2.0.0.tgz" - integrity sha1-kAHEwv/rulVpXS3YD/uLgvfmMD8= +"remark-footnotes@2.0.0": + "integrity" "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + "resolved" "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz" + "version" "2.0.0" -remark-mdx@1.6.22: - version "1.6.22" - resolved "https://registry.npm.taobao.org/remark-mdx/download/remark-mdx-1.6.22.tgz" - integrity sha1-BqjasH3P3VfzNzr3+GvQ6ZIQi70= +"remark-mdx@1.6.22": + "integrity" "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==" + "resolved" "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz" + "version" "1.6.22" dependencies: "@babel/core" "7.12.9" "@babel/helper-plugin-utils" "7.10.4" "@babel/plugin-proposal-object-rest-spread" "7.12.1" "@babel/plugin-syntax-jsx" "7.12.1" "@mdx-js/util" "1.6.22" - is-alphabetical "1.0.4" - remark-parse "8.0.3" - unified "9.2.0" + "is-alphabetical" "1.0.4" + "remark-parse" "8.0.3" + "unified" "9.2.0" -remark-parse@8.0.3: - version "8.0.3" - resolved "https://registry.npm.taobao.org/remark-parse/download/remark-parse-8.0.3.tgz?cache=0&sync_timestamp=1602663872721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fremark-parse%2Fdownload%2Fremark-parse-8.0.3.tgz" - integrity sha1-nGKqOzW3mkhkVMaQRykGB19Ax+E= +"remark-parse@8.0.3": + "integrity" "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==" + "resolved" "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz" + "version" "8.0.3" dependencies: - ccount "^1.0.0" - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^2.0.0" - vfile-location "^3.0.0" - xtend "^4.0.1" + "ccount" "^1.0.0" + "collapse-white-space" "^1.0.2" + "is-alphabetical" "^1.0.0" + "is-decimal" "^1.0.0" + "is-whitespace-character" "^1.0.0" + "is-word-character" "^1.0.0" + "markdown-escapes" "^1.0.0" + "parse-entities" "^2.0.0" + "repeat-string" "^1.5.4" + "state-toggle" "^1.0.0" + "trim" "0.0.1" + "trim-trailing-lines" "^1.0.0" + "unherit" "^1.0.4" + "unist-util-remove-position" "^2.0.0" + "vfile-location" "^3.0.0" + "xtend" "^4.0.1" -remark-squeeze-paragraphs@4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/remark-squeeze-paragraphs/download/remark-squeeze-paragraphs-4.0.0.tgz" - integrity sha1-dusOCFKVExyEdIyOQ4EBWcVlPq0= +"remark-squeeze-paragraphs@4.0.0": + "integrity" "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==" + "resolved" "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz" + "version" "4.0.0" dependencies: - mdast-squeeze-paragraphs "^4.0.0" + "mdast-squeeze-paragraphs" "^4.0.0" -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== +"renderkid@^3.0.0": + "integrity" "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==" + "resolved" "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" + "version" "3.0.0" dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" + "css-select" "^4.1.3" + "dom-converter" "^0.2.0" + "htmlparser2" "^6.1.0" + "lodash" "^4.17.21" + "strip-ansi" "^6.0.1" -repeat-string@^1.5.4: - version "1.6.1" - resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +"repeat-string@^1.5.4": + "integrity" "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" "require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.npmmirror.com/require-like/-/require-like-0.1.2.tgz" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + "integrity" "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + "resolved" "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" + "version" "0.1.2" -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +"requires-port@^1.0.0": + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz" - integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" -resolve-package-path@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/resolve-package-path/-/resolve-package-path-4.0.3.tgz" - integrity sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA== +"resolve-package-path@^4.0.3": + "integrity" "sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==" + "resolved" "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-4.0.3.tgz" + "version" "4.0.3" dependencies: - path-root "^0.1.1" + "path-root" "^0.1.1" -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/resolve-pathname/download/resolve-pathname-3.0.0.tgz" - integrity sha1-mdAiJNPPJjaJvsuzk7xWAxMCXc0= +"resolve-pathname@^3.0.0": + "integrity" "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "resolved" "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" + "version" "3.0.0" -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.22.2" - resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== +"resolve@^1.1.6", "resolve@^1.14.2", "resolve@^1.3.2": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.nlark.com/responselike/download/responselike-1.0.2.tgz" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= +"responselike@^1.0.2": + "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + "version" "1.0.2" dependencies: - lowercase-keys "^1.0.0" + "lowercase-keys" "^1.0.0" -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +"retry@^0.13.1": + "integrity" "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + "version" "0.13.1" -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.nlark.com/reusify/download/reusify-1.0.4.tgz" - integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz" - integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" dependencies: - glob "^7.1.3" + "glob" "^7.1.3" -rtl-detect@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/rtl-detect/-/rtl-detect-1.0.4.tgz" - integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== +"rtl-detect@^1.0.4": + "integrity" "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + "resolved" "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz" + "version" "1.0.4" -rtlcss@^3.5.0: - version "3.5.0" - resolved "https://registry.npmmirror.com/rtlcss/-/rtlcss-3.5.0.tgz" - integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== +"rtlcss@^3.5.0": + "integrity" "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==" + "resolved" "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz" + "version" "3.5.0" dependencies: - find-up "^5.0.0" - picocolors "^1.0.0" - postcss "^8.3.11" - strip-json-comments "^3.1.1" + "find-up" "^5.0.0" + "picocolors" "^1.0.0" + "postcss" "^8.3.11" + "strip-json-comments" "^3.1.1" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612926037406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz" - integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" dependencies: - queue-microtask "^1.2.2" + "queue-microtask" "^1.2.2" -rxjs@^7.5.4: - version "7.8.1" - resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== +"rxjs@^7.5.4": + "integrity" "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz" + "version" "7.6.0" dependencies: - tslib "^2.1.0" + "tslib" "^2.1.0" -safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz" - integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= +"safe-buffer@^5.1.0", "safe-buffer@>=5.1.0", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -safe-buffer@5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" "safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.nlark.com/sax/download/sax-1.2.4.tgz" - integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= +"sax@^1.2.4": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.nlark.com/scheduler/download/scheduler-0.20.2.tgz?cache=0&sync_timestamp=1625847651884&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fscheduler%2Fdownload%2Fscheduler-0.20.2.tgz" - integrity sha1-S67jlDbjSqk7SHS93L8P6Li1DpE= +"scheduler@^0.20.2": + "integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==" + "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" + "version" "0.20.2" dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" + "loose-envify" "^1.1.0" + "object-assign" "^4.1.1" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1625484836281&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz" - integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= +"schema-utils@^2.6.5": + "integrity" "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + "version" "2.7.1" dependencies: "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" + "ajv" "^6.12.4" + "ajv-keywords" "^3.5.2" -schema-utils@^3.0.0: - version "3.1.0" - resolved "https://registry.nlark.com/schema-utils/download/schema-utils-3.1.0.tgz?cache=0&sync_timestamp=1625484836281&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.0.tgz" - integrity sha1-lZhutgT2bare7Vbjeb/np/ljzbk= - dependencies: - "@types/json-schema" "^7.0.7" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +"schema-utils@^3.0.0": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" dependencies: "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" -schema-utils@^3.1.1: - version "3.3.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== +"schema-utils@^3.1.0": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" dependencies: "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== +"schema-utils@^3.1.1": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^4.0.0": + "integrity" "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" + "version" "4.0.0" dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" + "ajv" "^8.8.0" + "ajv-formats" "^2.1.1" + "ajv-keywords" "^5.0.0" -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/section-matter/download/section-matter-1.0.0.tgz" - integrity sha1-6QQZU1BngOwB1Z8pKhnHuFC4QWc= +"schema-utils@2.7.0": + "integrity" "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + "version" "2.7.0" dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" + "@types/json-schema" "^7.0.4" + "ajv" "^6.12.2" + "ajv-keywords" "^3.4.1" -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== +"section-matter@^1.0.0": + "integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==" + "resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" + "version" "1.0.0" dependencies: - node-forge "^1" + "extend-shallow" "^2.0.1" + "kind-of" "^6.0.0" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.nlark.com/semver-diff/download/semver-diff-3.1.1.tgz" - integrity sha1-Bfd85Z8yXgDicGr9Z7tQbdscoys= +"select-hose@^2.0.0": + "integrity" "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "resolved" "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + "version" "2.0.0" + +"selfsigned@^2.1.1": + "integrity" "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==" + "resolved" "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" + "version" "2.1.1" dependencies: - semver "^6.3.0" + "node-forge" "^1" -semver@^5.4.1: - version "5.7.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463641178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz" - integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463641178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz" - integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= - -semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.5.3" - resolved "https://registry.npmmirror.com/semver/-/semver-7.5.3.tgz" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== +"semver-diff@^3.1.1": + "integrity" "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==" + "resolved" "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" + "version" "3.1.1" dependencies: - lru-cache "^6.0.0" + "semver" "^6.3.0" -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +"semver@^5.4.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.1": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.2.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.2", "semver@^7.3.4", "semver@^7.3.7", "semver@^7.3.8": + "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + "version" "7.3.8" dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" + "lru-cache" "^6.0.0" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" dependencies: - randombytes "^2.1.0" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" -serve-handler@^6.1.3: - version "6.1.3" - resolved "https://registry.npm.taobao.org/serve-handler/download/serve-handler-6.1.3.tgz" - integrity sha1-G/jFrhOHEq9Vx1hHdTO5EX9kNeg= +"serialize-javascript@^6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - fast-url-parser "1.1.3" - mime-types "2.1.18" - minimatch "3.0.4" - path-is-inside "1.0.2" - path-to-regexp "2.2.1" - range-parser "1.2.0" + "randombytes" "^2.1.0" -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.nlark.com/serve-index/download/serve-index-1.9.1.tgz" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= +"serve-handler@^6.1.3": + "integrity" "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==" + "resolved" "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz" + "version" "6.1.5" dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" + "bytes" "3.0.0" + "content-disposition" "0.5.2" + "fast-url-parser" "1.1.3" + "mime-types" "2.1.18" + "minimatch" "3.1.2" + "path-is-inside" "1.0.2" + "path-to-regexp" "2.2.1" + "range-parser" "1.2.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +"serve-index@^1.9.1": + "integrity" "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==" + "resolved" "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" + "accepts" "~1.3.4" + "batch" "0.6.1" + "debug" "2.6.9" + "escape-html" "~1.0.3" + "http-errors" "~1.6.2" + "mime-types" "~2.1.17" + "parseurl" "~1.3.2" -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.0.tgz" - integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz" - integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" dependencies: - kind-of "^6.0.2" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +"setimmediate@^1.0.5": + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/shebang-command/download/shebang-command-2.0.0.tgz" - integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= +"setprototypeof@1.1.0": + "integrity" "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + "version" "1.1.0" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" dependencies: - shebang-regex "^3.0.0" + "kind-of" "^6.0.2" -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz" - integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= +"shallowequal@^1.1.0": + "integrity" "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "resolved" "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + "version" "1.1.0" -shell-quote@^1.7.3: - version "1.8.1" - resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + "shebang-regex" "^3.0.0" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shell-quote@^1.7.3": + "integrity" "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" + "version" "1.7.4" + +"shelljs@^0.8.5": + "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + "version" "0.8.5" dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.nlark.com/signal-exit/download/signal-exit-3.0.3.tgz" - integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= - -sirv@^1.0.7: - version "1.0.12" - resolved "https://registry.nlark.com/sirv/download/sirv-1.0.12.tgz" - integrity sha1-2BbIgrNUibPGMpDi9FWuPszV9lI= +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" dependencies: - "@polka/url" "^1.0.0-next.15" - mime "^2.3.1" - totalist "^1.0.0" + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz" - integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= +"signal-exit@^3.0.2", "signal-exit@^3.0.3": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" -sitemap@^7.1.1: - version "7.1.1" - resolved "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz" - integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== +"sirv@^1.0.7": + "integrity" "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==" + "resolved" "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz" + "version" "1.0.19" + dependencies: + "@polka/url" "^1.0.0-next.20" + "mrmime" "^1.0.0" + "totalist" "^1.0.0" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"sitemap@^7.1.1": + "integrity" "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==" + "resolved" "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz" + "version" "7.1.1" dependencies: "@types/node" "^17.0.5" "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" + "arg" "^5.0.0" + "sax" "^1.2.4" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/slash/download/slash-3.0.0.tgz" - integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +"slash@^4.0.0": + "integrity" "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + "version" "4.0.0" -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== +"sockjs@^0.3.24": + "integrity" "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==" + "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + "version" "0.3.24" dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" + "faye-websocket" "^0.11.3" + "uuid" "^8.3.2" + "websocket-driver" "^0.7.4" -sort-css-media-queries@2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz" - integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== +"sort-css-media-queries@2.1.0": + "integrity" "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + "resolved" "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz" + "version" "2.1.0" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +"source-map-js@^1.0.2": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +"source-map-support@~0.5.20": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +"source-map@^0.5.0": + "integrity" "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz" - integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= +"source-map@^0.6.0", "source-map@^0.6.1", "source-map@~0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.nlark.com/space-separated-tokens/download/space-separated-tokens-1.1.5.tgz" - integrity sha1-hfMsPRDZaCAH6RdBTdxcJtGqaJk= +"space-separated-tokens@^1.0.0": + "integrity" "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "resolved" "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" + "version" "1.1.5" -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.nlark.com/spdy-transport/download/spdy-transport-3.0.0.tgz" - integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= +"spdy-transport@^3.0.0": + "integrity" "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==" + "resolved" "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + "version" "3.0.0" dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" + "debug" "^4.1.0" + "detect-node" "^2.0.4" + "hpack.js" "^2.1.6" + "obuf" "^1.1.2" + "readable-stream" "^3.0.6" + "wbuf" "^1.7.3" -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.nlark.com/spdy/download/spdy-4.0.2.tgz" - integrity sha1-t09GYgOj7aRSwCSSuR+56EonZ3s= +"spdy@^4.0.2": + "integrity" "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==" + "resolved" "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + "version" "4.0.2" dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" + "debug" "^4.1.0" + "handle-thing" "^2.0.0" + "http-deceiver" "^1.2.7" + "select-hose" "^2.0.0" + "spdy-transport" "^3.0.0" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz" - integrity sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88= +"stable@^0.1.8": + "integrity" "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "resolved" "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + "version" "0.1.8" -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.npm.taobao.org/state-toggle/download/state-toggle-1.0.3.tgz?cache=0&sync_timestamp=1615190484861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstate-toggle%2Fdownload%2Fstate-toggle-1.0.3.tgz" - integrity sha1-4SOxaojhQxObCcaFIiG8mBWRff4= - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"state-toggle@^1.0.0": + "integrity" "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + "resolved" "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz" + "version" "1.0.3" "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.nlark.com/statuses/download/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + "integrity" "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" -std-env@^3.0.1: - version "3.3.3" - resolved "https://registry.npmmirror.com/std-env/-/std-env-3.3.3.tgz" - integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== +"std-env@^3.0.1": + "integrity" "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==" + "resolved" "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz" + "version" "3.3.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" + "safe-buffer" "~5.2.0" -string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" + "safe-buffer" "~5.1.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz" - integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= +"string-width@^4.0.0", "string-width@^4.1.0", "string-width@^4.2.2": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" dependencies: - safe-buffer "~5.2.0" + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz" - integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= +"string-width@^4.2.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" dependencies: - safe-buffer "~5.1.0" + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz" - integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= +"string-width@^5.0.1": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +"stringify-object@^3.3.0": + "integrity" "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==" + "resolved" "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + "version" "3.3.0" dependencies: - ansi-regex "^5.0.1" + "get-own-enumerable-property-symbols" "^3.0.0" + "is-obj" "^1.0.1" + "is-regexp" "^1.0.0" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" dependencies: - ansi-regex "^6.0.1" + "ansi-regex" "^5.0.1" -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/strip-bom-string/download/strip-bom-string-1.0.0.tgz" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz?cache=0&sync_timestamp=1620046435959&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-final-newline%2Fdownload%2Fstrip-final-newline-2.0.0.tgz" - integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz" - integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-to-object@0.3.0, style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/style-to-object/download/style-to-object-0.3.0.tgz" - integrity sha1-sbeQ0gWZHMeDgBlnIUl57hmnbkY= +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" dependencies: - inline-style-parser "0.1.1" + "ansi-regex" "^6.0.1" -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== +"strip-bom-string@^1.0.0": + "integrity" "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + "resolved" "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" + "version" "1.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@~2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"style-to-object@^0.3.0", "style-to-object@0.3.0": + "integrity" "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==" + "resolved" "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz" + "version" "0.3.0" dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" + "inline-style-parser" "0.1.1" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1622293670728&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz" - integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= +"stylehacks@^5.1.1": + "integrity" "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==" + "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz" + "version" "5.1.1" dependencies: - has-flag "^3.0.0" + "browserslist" "^4.21.4" + "postcss-selector-parser" "^6.0.4" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1622293670728&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz" - integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" dependencies: - has-flag "^4.0.0" + "has-flag" "^3.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" dependencies: - has-flag "^4.0.0" + "has-flag" "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.npm.taobao.org/svg-parser/download/svg-parser-2.0.4.tgz" - integrity sha1-/cLinhOVFzYUC3bLEiyO5mMOtrU= +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" -svgo@^2.7.0, svgo@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +"svg-parser@^2.0.4": + "integrity" "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + "resolved" "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" + "version" "2.0.4" + +"svgo@^2.7.0", "svgo@^2.8.0": + "integrity" "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==" + "resolved" "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" + "version" "2.8.0" dependencies: "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" + "commander" "^7.2.0" + "css-select" "^4.1.3" + "css-tree" "^1.1.3" + "csso" "^4.2.0" + "picocolors" "^1.0.0" + "stable" "^0.1.8" -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +"tapable@^1.0.0": + "integrity" "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + "version" "1.1.3" -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/tapable/download/tapable-2.2.0.tgz?cache=0&sync_timestamp=1607088902003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-2.2.0.tgz" - integrity sha1-XDc9KB2cZyhIIT0OA30cQWWrQms= +"tapable@^2.0.0", "tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.9" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +"terser-webpack-plugin@^5.1.3", "terser-webpack-plugin@^5.3.3": + "integrity" "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" + "version" "5.3.6" dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" + "@jridgewell/trace-mapping" "^0.3.14" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.0" + "terser" "^5.14.1" -terser@^5.10.0, terser@^5.16.8: - version "5.18.2" - resolved "https://registry.npmmirror.com/terser/-/terser-5.18.2.tgz" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== +"terser@^5.10.0", "terser@^5.14.1": + "integrity" "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz" + "version" "5.16.1" dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" + "@jridgewell/source-map" "^0.3.2" + "acorn" "^8.5.0" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.nlark.com/text-table/download/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz" - integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= +"thunky@^1.0.2": + "integrity" "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "resolved" "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + "version" "1.1.0" -tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.nlark.com/tiny-invariant/download/tiny-invariant-1.1.0.tgz" - integrity sha1-Y0xfjv3CdxS384bDXmdgmR0jCHU= +"tiny-invariant@^1.0.2": + "integrity" "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "resolved" "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" + "version" "1.3.1" -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.npm.taobao.org/tiny-warning/download/tiny-warning-1.0.3.tgz" - integrity sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q= +"tiny-warning@^1.0.0": + "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "resolved" "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" + "version" "1.0.3" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.nlark.com/to-readable-stream/download/to-readable-stream-1.0.0.tgz" - integrity sha1-zgqgwvPfat+FLvtASng+d8BHV3E= +"to-readable-stream@^1.0.0": + "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + "version" "1.0.0" -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz" - integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" dependencies: - is-number "^7.0.0" + "is-number" "^7.0.0" -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/totalist/download/totalist-1.1.0.tgz" - integrity sha1-pNZaPlRlF3AePlw3pHpwrJf+Vt8= +"totalist@^1.0.0": + "integrity" "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + "resolved" "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" + "version" "1.1.0" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" -trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.npm.taobao.org/trim-trailing-lines/download/trim-trailing-lines-1.1.4.tgz?cache=0&sync_timestamp=1615372101636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftrim-trailing-lines%2Fdownload%2Ftrim-trailing-lines-1.1.4.tgz" - integrity sha1-vUq77HzIgEYvELLItc4djR7HwsA= +"trim-trailing-lines@^1.0.0": + "integrity" "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + "resolved" "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz" + "version" "1.1.4" -trim@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/trim/download/trim-0.0.1.tgz?cache=0&sync_timestamp=1617312392149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftrim%2Fdownload%2Ftrim-0.0.1.tgz" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= +"trim@0.0.1": + "integrity" "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + "resolved" "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" + "version" "0.0.1" -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.nlark.com/trough/download/trough-1.0.5.tgz" - integrity sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY= +"trough@^1.0.0": + "integrity" "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "resolved" "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" + "version" "1.0.5" -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.0" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.0.tgz" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== +"tslib@^2.0.3", "tslib@^2.1.0", "tslib@^2.4.0": + "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" + "version" "2.4.1" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.nlark.com/type-fest/download/type-fest-0.20.2.tgz?cache=0&sync_timestamp=1625745455668&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.20.2.tgz" - integrity sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ= +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" -type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +"type-fest@^2.5.0": + "integrity" "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" + "version" "2.19.0" -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== +"type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" + "media-typer" "0.3.0" + "mime-types" "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz" - integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA= +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" dependencies: - is-typedarray "^1.0.0" + "is-typedarray" "^1.0.0" -ua-parser-js@^1.0.35: - version "1.0.35" - resolved "https://registry.npmmirror.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz" - integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== +"typescript@>= 2.7": + "integrity" "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz" + "version" "4.9.4" -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.npm.taobao.org/unherit/download/unherit-1.1.3.tgz" - integrity sha1-bJtQPytBsmIzDIDpHIYUq9qmnCI= +"ua-parser-js@^0.7.30": + "integrity" "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==" + "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" + "version" "0.7.35" + +"unherit@^1.0.4": + "integrity" "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==" + "resolved" "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz" + "version" "1.1.3" dependencies: - inherits "^2.0.0" - xtend "^4.0.0" + "inherits" "^2.0.0" + "xtend" "^4.0.0" -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +"unicode-canonical-property-names-ecmascript@^2.0.0": + "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + "version" "2.0.0" -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== +"unicode-match-property-ecmascript@^2.0.0": + "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + "version" "2.0.0" dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +"unicode-match-property-value-ecmascript@^2.1.0": + "integrity" "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + "version" "2.1.0" -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +"unicode-property-aliases-ecmascript@^2.0.0": + "integrity" "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + "version" "2.1.0" -unified@9.2.0: - version "9.2.0" - resolved "https://registry.nlark.com/unified/download/unified-9.2.0.tgz" - integrity sha1-Z6YsYnxAWJ7eu/YPU+39TYIgJ/g= +"unified@^9.2.2": + "integrity" "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==" + "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz" + "version" "9.2.2" dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + "bail" "^1.0.0" + "extend" "^3.0.0" + "is-buffer" "^2.0.0" + "is-plain-obj" "^2.0.0" + "trough" "^1.0.0" + "vfile" "^4.0.0" -unified@^9.2.2: - version "9.2.2" - resolved "https://registry.npmmirror.com/unified/-/unified-9.2.2.tgz" - integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== +"unified@9.2.0": + "integrity" "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==" + "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" + "version" "9.2.0" dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" + "bail" "^1.0.0" + "extend" "^3.0.0" + "is-buffer" "^2.0.0" + "is-plain-obj" "^2.0.0" + "trough" "^1.0.0" + "vfile" "^4.0.0" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-2.0.0.tgz" - integrity sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0= +"unique-string@^2.0.0": + "integrity" "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" + "version" "2.0.0" dependencies: - crypto-random-string "^2.0.0" + "crypto-random-string" "^2.0.0" -unist-builder@2.0.3, unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.nlark.com/unist-builder/download/unist-builder-2.0.3.tgz" - integrity sha1-d2SHEbXYavCULzNDl6M8XpFRZDY= +"unist-builder@^2.0.0", "unist-builder@2.0.3": + "integrity" "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + "resolved" "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz" + "version" "2.0.3" -unist-util-generated@^1.0.0: - version "1.1.6" - resolved "https://registry.npm.taobao.org/unist-util-generated/download/unist-util-generated-1.1.6.tgz" - integrity sha1-WrUfaJ4pkqRyvrGzXyzn/y8yTUs= +"unist-util-generated@^1.0.0": + "integrity" "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + "resolved" "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz" + "version" "1.1.6" -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.nlark.com/unist-util-is/download/unist-util-is-4.1.0.tgz?cache=0&sync_timestamp=1620654878185&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-4.1.0.tgz" - integrity sha1-l25fRip6Xec9lLcGusG5BnG1d5c= +"unist-util-is@^4.0.0": + "integrity" "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" + "version" "4.1.0" -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.nlark.com/unist-util-position/download/unist-util-position-3.1.0.tgz" - integrity sha1-HELuYwH41S9H0U9iu9t5ZXH6LUc= +"unist-util-position@^3.0.0": + "integrity" "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "resolved" "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz" + "version" "3.1.0" -unist-util-remove-position@^2.0.0: - version "2.0.1" - resolved "https://registry.nlark.com/unist-util-remove-position/download/unist-util-remove-position-2.0.1.tgz" - integrity sha1-XRnKef26cSMBmZsrc1U8qPOzUsw= +"unist-util-remove-position@^2.0.0": + "integrity" "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==" + "resolved" "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz" + "version" "2.0.1" dependencies: - unist-util-visit "^2.0.0" + "unist-util-visit" "^2.0.0" -unist-util-remove@^2.0.0: - version "2.1.0" - resolved "https://registry.nlark.com/unist-util-remove/download/unist-util-remove-2.1.0.tgz" - integrity sha1-sLRziqfuRFxAL9qTKNYEoC0BBYg= +"unist-util-remove@^2.0.0": + "integrity" "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==" + "resolved" "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz" + "version" "2.1.0" dependencies: - unist-util-is "^4.0.0" + "unist-util-is" "^4.0.0" -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.npm.taobao.org/unist-util-stringify-position/download/unist-util-stringify-position-2.0.3.tgz" - integrity sha1-zOO/oc34W6c3XR1bF73Eytqb2do= +"unist-util-stringify-position@^2.0.0": + "integrity" "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==" + "resolved" "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" + "version" "2.0.3" dependencies: "@types/unist" "^2.0.2" -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.nlark.com/unist-util-visit-parents/download/unist-util-visit-parents-3.1.1.tgz?cache=0&sync_timestamp=1620657306128&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-3.1.1.tgz" - integrity sha1-ZabOaY94prD1aqDojxOAGIbNrvY= +"unist-util-visit-parents@^3.0.0": + "integrity" "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==" + "resolved" "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz" + "version" "3.1.1" dependencies: "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" + "unist-util-is" "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: - version "2.0.3" - resolved "https://registry.nlark.com/unist-util-visit/download/unist-util-visit-2.0.3.tgz?cache=0&sync_timestamp=1620655435818&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-visit%2Fdownload%2Funist-util-visit-2.0.3.tgz" - integrity sha1-w3A4kxRt9HIDu4qXla9H17lxIIw= +"unist-util-visit@^2.0.0", "unist-util-visit@^2.0.3", "unist-util-visit@2.0.3": + "integrity" "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==" + "resolved" "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" + "version" "2.0.3" dependencies: "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" + "unist-util-is" "^4.0.0" + "unist-util-visit-parents" "^3.0.0" -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.nlark.com/universalify/download/universalify-2.0.0.tgz" - integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +"update-browserslist-db@^1.0.10": + "integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" + "version" "1.0.10" dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + "escalade" "^3.1.1" + "picocolors" "^1.0.0" -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-5.1.0.tgz" - integrity sha1-SrDXx/NqIx3XMWz3cpMT8CFNmtk= +"update-notifier@^5.1.0": + "integrity" "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==" + "resolved" "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" + "version" "5.1.0" dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" + "boxen" "^5.0.0" + "chalk" "^4.1.0" + "configstore" "^5.0.1" + "has-yarn" "^2.1.0" + "import-lazy" "^2.1.0" + "is-ci" "^2.0.0" + "is-installed-globally" "^0.4.0" + "is-npm" "^5.0.0" + "is-yarn-global" "^0.3.0" + "latest-version" "^5.1.0" + "pupa" "^2.1.1" + "semver" "^7.3.4" + "semver-diff" "^3.1.1" + "xdg-basedir" "^4.0.0" -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237517218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz" - integrity sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" dependencies: - punycode "^2.1.0" + "punycode" "^2.1.0" -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.npm.taobao.org/url-loader/download/url-loader-4.1.1.tgz?cache=0&sync_timestamp=1602252665628&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-loader%2Fdownload%2Furl-loader-4.1.1.tgz" - integrity sha1-KFBekFyuFYzwfJLKYi1/I35wpOI= +"url-loader@^4.1.1": + "integrity" "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==" + "resolved" "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" + "version" "4.1.1" dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" + "loader-utils" "^2.0.0" + "mime-types" "^2.1.27" + "schema-utils" "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= +"url-parse-lax@^3.0.0": + "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + "version" "3.0.0" dependencies: - prepend-http "^2.0.0" + "prepend-http" "^2.0.0" -use-composed-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz" - integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== +"use-composed-ref@^1.3.0": + "integrity" "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" + "resolved" "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz" + "version" "1.3.0" -use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +"use-isomorphic-layout-effect@^1.1.1": + "integrity" "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + "resolved" "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz" + "version" "1.1.2" -use-latest@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/use-latest/-/use-latest-1.2.1.tgz" - integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== +"use-latest@^1.2.1": + "integrity" "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==" + "resolved" "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz" + "version" "1.2.1" dependencies: - use-isomorphic-layout-effect "^1.1.1" + "use-isomorphic-layout-effect" "^1.1.1" -use-sync-external-store@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +"use-sync-external-store@^1.2.0": + "integrity" "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "resolved" "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" + "version" "1.2.0" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" -utila@~0.4: - version "0.4.0" - resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== +"utila@~0.4": + "integrity" "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + "resolved" "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + "version" "0.4.0" -utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.npm.taobao.org/utility-types/download/utility-types-3.10.0.tgz" - integrity sha1-6kFI+adBAV8F7XT9YV4dIOa+2Cs= +"utility-types@^3.10.0": + "integrity" "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + "resolved" "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz" + "version" "3.10.0" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" -validate-peer-dependencies@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/validate-peer-dependencies/-/validate-peer-dependencies-2.2.0.tgz" - integrity sha512-8X1OWlERjiUY6P6tdeU9E0EwO8RA3bahoOVG7ulOZT5MqgNDUO/BQoVjYiHPcNe+v8glsboZRIw9iToMAA2zAA== +"validate-peer-dependencies@^2.2.0": + "integrity" "sha512-8X1OWlERjiUY6P6tdeU9E0EwO8RA3bahoOVG7ulOZT5MqgNDUO/BQoVjYiHPcNe+v8glsboZRIw9iToMAA2zAA==" + "resolved" "https://registry.npmjs.org/validate-peer-dependencies/-/validate-peer-dependencies-2.2.0.tgz" + "version" "2.2.0" dependencies: - resolve-package-path "^4.0.3" - semver "^7.3.8" + "resolve-package-path" "^4.0.3" + "semver" "^7.3.8" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.nlark.com/value-equal/download/value-equal-1.0.1.tgz" - integrity sha1-Hgt5THNMXAyt4XnEN9NW2TGjTWw= +"value-equal@^1.0.1": + "integrity" "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + "resolved" "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" + "version" "1.0.1" -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.nlark.com/vary/download/vary-1.1.2.tgz" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +"vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" -vfile-location@^3.0.0, vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.nlark.com/vfile-location/download/vfile-location-3.2.0.tgz" - integrity sha1-2OQfvL1AYGNmnr9sM9Vq6HIdDzw= +"vfile-location@^3.0.0", "vfile-location@^3.2.0": + "integrity" "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "resolved" "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" + "version" "3.2.0" -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.nlark.com/vfile-message/download/vfile-message-2.0.4.tgz" - integrity sha1-W0O4gXHUCerlhHfRPyPdQdUsNxo= +"vfile-message@^2.0.0": + "integrity" "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==" + "resolved" "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" + "version" "2.0.4" dependencies: "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" + "unist-util-stringify-position" "^2.0.0" -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.nlark.com/vfile/download/vfile-4.2.1.tgz" - integrity sha1-A/Hc4o/GJcYlvGUUNQ+9sA+p5iQ= +"vfile@^4.0.0": + "integrity" "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==" + "resolved" "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" + "version" "4.2.1" dependencies: "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" + "is-buffer" "^2.0.0" + "unist-util-stringify-position" "^2.0.0" + "vfile-message" "^2.0.0" -wait-on@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/wait-on/-/wait-on-6.0.1.tgz" - integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== +"wait-on@^6.0.1": + "integrity" "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==" + "resolved" "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz" + "version" "6.0.1" dependencies: - axios "^0.25.0" - joi "^17.6.0" - lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^7.5.4" + "axios" "^0.25.0" + "joi" "^17.6.0" + "lodash" "^4.17.21" + "minimist" "^1.2.5" + "rxjs" "^7.5.4" -warning@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== +"warning@^4.0.3": + "integrity" "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==" + "resolved" "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" + "version" "4.0.3" dependencies: - loose-envify "^1.0.0" + "loose-envify" "^1.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz" - integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= +"wbuf@^1.1.0", "wbuf@^1.7.3": + "integrity" "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==" + "resolved" "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + "version" "1.7.3" dependencies: - minimalistic-assert "^1.0.0" + "minimalistic-assert" "^1.0.0" -web-namespaces@^1.0.0: - version "1.1.4" - resolved "https://registry.npm.taobao.org/web-namespaces/download/web-namespaces-1.1.4.tgz?cache=0&sync_timestamp=1615458736003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fweb-namespaces%2Fdownload%2Fweb-namespaces-1.1.4.tgz" - integrity sha1-vJij3mDa3X+u/EA9EHbVKfXgMOw= +"web-namespaces@^1.0.0": + "integrity" "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "resolved" "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz" + "version" "1.1.4" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" -webpack-bundle-analyzer@^4.5.0: - version "4.9.0" - resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz" - integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== +"webpack-bundle-analyzer@^4.5.0": + "integrity" "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==" + "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz" + "version" "4.7.0" dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" + "acorn" "^8.0.4" + "acorn-walk" "^8.0.0" + "chalk" "^4.1.0" + "commander" "^7.2.0" + "gzip-size" "^6.0.0" + "lodash" "^4.17.20" + "opener" "^1.5.2" + "sirv" "^1.0.7" + "ws" "^7.3.1" -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== +"webpack-dev-middleware@^5.3.1": + "integrity" "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==" + "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + "version" "5.3.3" dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" + "colorette" "^2.0.10" + "memfs" "^3.4.3" + "mime-types" "^2.1.31" + "range-parser" "^1.2.1" + "schema-utils" "^4.0.0" -webpack-dev-server@^4.9.3: - version "4.15.1" - resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== +"webpack-dev-server@^4.9.3": + "integrity" "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==" + "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" + "version" "4.11.1" dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -7630,220 +7598,214 @@ webpack-dev-server@^4.9.3: "@types/serve-index" "^1.9.1" "@types/serve-static" "^1.13.10" "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" + "@types/ws" "^8.5.1" + "ansi-html-community" "^0.0.8" + "bonjour-service" "^1.0.11" + "chokidar" "^3.5.3" + "colorette" "^2.0.10" + "compression" "^1.7.4" + "connect-history-api-fallback" "^2.0.0" + "default-gateway" "^6.0.3" + "express" "^4.17.3" + "graceful-fs" "^4.2.6" + "html-entities" "^2.3.2" + "http-proxy-middleware" "^2.0.3" + "ipaddr.js" "^2.0.1" + "open" "^8.0.9" + "p-retry" "^4.5.0" + "rimraf" "^3.0.2" + "schema-utils" "^4.0.0" + "selfsigned" "^2.1.1" + "serve-index" "^1.9.1" + "sockjs" "^0.3.24" + "spdy" "^4.0.2" + "webpack-dev-middleware" "^5.3.1" + "ws" "^8.4.2" -webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.nlark.com/webpack-merge/download/webpack-merge-5.8.0.tgz" - integrity sha1-Kznb8ir4d3atdEw5AiNzHTCmj2E= +"webpack-merge@^5.8.0": + "integrity" "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + "version" "5.8.0" dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" + "clone-deep" "^4.0.1" + "wildcard" "^2.0.0" -webpack-sources@^3.2.2, webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +"webpack-sources@^3.2.2", "webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" -webpack@^5.73.0: - version "5.76.1" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.76.1.tgz" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^5.0.0", "webpack@^5.1.0", "webpack@^5.20.0", "webpack@^5.73.0", "webpack@>= 4", "webpack@>=2", "webpack@>=4.41.1 || 5.x", "webpack@3 || 4 || 5": + "integrity" "sha512-18Qv7uGPU8b2vqGeEEObnfICyw2g39CHlDEK4I7NK13LOur1d0HGmGNKGT58Eluwddpn3oEejwvBPoP4M7/KSA==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.76.3.tgz" + "version" "5.76.3" dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.7.6" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.10.0" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.1.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" -webpackbar@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/webpackbar/-/webpackbar-5.0.2.tgz" - integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== +"webpackbar@^5.0.2": + "integrity" "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==" + "resolved" "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz" + "version" "5.0.2" dependencies: - chalk "^4.1.0" - consola "^2.15.3" - pretty-time "^1.1.0" - std-env "^3.0.1" + "chalk" "^4.1.0" + "consola" "^2.15.3" + "pretty-time" "^1.1.0" + "std-env" "^3.0.1" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz" - integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= +"websocket-driver@^0.7.4", "websocket-driver@>=0.5.1": + "integrity" "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==" + "resolved" "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + "version" "0.7.4" dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" + "http-parser-js" ">=0.5.1" + "safe-buffer" ">=5.1.0" + "websocket-extensions" ">=0.1.1" -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz" - integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI= +"websocket-extensions@>=0.1.1": + "integrity" "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "resolved" "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + "version" "0.1.4" -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" -which@^1.3.1: - version "1.3.1" - resolved "https://registry.nlark.com/which/download/which-1.3.1.tgz" - integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= +"which@^1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" dependencies: - isexe "^2.0.0" + "isexe" "^2.0.0" -which@^2.0.1: - version "2.0.2" - resolved "https://registry.nlark.com/which/download/which-2.0.2.tgz" - integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" dependencies: - isexe "^2.0.0" + "isexe" "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.nlark.com/widest-line/download/widest-line-3.1.0.tgz?cache=0&sync_timestamp=1619001870221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwidest-line%2Fdownload%2Fwidest-line-3.1.0.tgz" - integrity sha1-gpIzO79my0X/DeFgOxNreuFJbso= +"widest-line@^3.1.0": + "integrity" "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + "version" "3.1.0" dependencies: - string-width "^4.0.0" + "string-width" "^4.0.0" -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/widest-line/-/widest-line-4.0.1.tgz" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== +"widest-line@^4.0.1": + "integrity" "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" + "version" "4.0.1" dependencies: - string-width "^5.0.1" + "string-width" "^5.0.1" -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/wildcard/download/wildcard-2.0.0.tgz" - integrity sha1-p30g5SAMb6qsl55LOq3Hs91/j+w= +"wildcard@^2.0.0": + "integrity" "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + "version" "2.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz" - integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" -wrap-ansi@^8.0.1: - version "8.1.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +"wrap-ansi@^8.0.1": + "integrity" "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz" + "version" "8.0.1" dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + "ansi-styles" "^6.1.0" + "string-width" "^5.0.1" + "strip-ansi" "^7.0.1" -wrappy@1: - version "1.0.2" - resolved "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz" - integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug= +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" -ws@^7.3.1: - version "7.5.3" - resolved "https://registry.nlark.com/ws/download/ws-7.5.3.tgz" - integrity sha1-Fgg1tjx9l7+rQY/BuKn87SrAGnQ= +"ws@^7.3.1": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" -ws@^8.13.0: - version "8.13.0" - resolved "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +"ws@^8.4.2": + "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + "version" "8.11.0" -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-4.0.0.tgz?cache=0&sync_timestamp=1617611782885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxdg-basedir%2Fdownload%2Fxdg-basedir-4.0.0.tgz" - integrity sha1-S8jZmEQDaWIl74OhVzy7y0552xM= +"xdg-basedir@^4.0.0": + "integrity" "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "resolved" "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" + "version" "4.0.0" -xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.npm.taobao.org/xml-js/download/xml-js-1.6.11.tgz" - integrity sha1-kn0vaUf38cGaMW3Y7qNhTosY+Ok= +"xml-js@^1.6.11": + "integrity" "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==" + "resolved" "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz" + "version" "1.6.11" dependencies: - sax "^1.2.4" + "sax" "^1.2.4" -xtend@^4.0.0, xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz" - integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= +"xtend@^4.0.0", "xtend@^4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz" - integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= +"yaml@^1.10.0", "yaml@^1.10.2", "yaml@^1.7.2": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.nlark.com/yaml/download/yaml-1.10.2.tgz?cache=0&sync_timestamp=1623653951938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyaml%2Fdownload%2Fyaml-1.10.2.tgz" - integrity sha1-IwHF/78StGfejaIzOkWeKeeSDks= +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npm.taobao.org/yocto-queue/download/yocto-queue-0.1.0.tgz?cache=0&sync_timestamp=1606290282107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyocto-queue%2Fdownload%2Fyocto-queue-0.1.0.tgz" - integrity sha1-ApTrPe4FAo0x7hpfosVWpqrxChs= - -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.npm.taobao.org/zwitch/download/zwitch-1.0.5.tgz?cache=0&sync_timestamp=1617357655901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzwitch%2Fdownload%2Fzwitch-1.0.5.tgz" - integrity sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA= +"zwitch@^1.0.0": + "integrity" "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "resolved" "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" + "version" "1.0.5"