Skip to content

Commit

Permalink
Merge pull request #312 from AdobeDocs/stage
Browse files Browse the repository at this point in the history
Add "Get credentials" to production
  • Loading branch information
calebk1 authored Nov 6, 2024
2 parents f262021 + 11bb789 commit 1b9f8b8
Show file tree
Hide file tree
Showing 49 changed files with 235 additions and 43 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ jobs:
GATSBY_FEDS_PRIVACY_ID: ${{ secrets.AIO_FEDS_PRIVACY_ID }}
GATSBY_SITE_DOMAIN_URL: https://developer-stage.adobe.com
GATSBY_REDOCLY_KEY: ${{ secrets.REDOCLY_LICENSE_KEY }}
GATSBY_TEMPLATE_ID: 667b0b6a6547797329d24f0d
- name: Deploy
uses: AdobeDocs/static-website-deploy@master
with:
Expand Down Expand Up @@ -259,6 +260,7 @@ jobs:
GATSBY_FEDS_PRIVACY_ID: ${{ secrets.AIO_FEDS_PRIVACY_ID }}
GATSBY_SITE_DOMAIN_URL: https://developer.adobe.com
GATSBY_REDOCLY_KEY: ${{ secrets.REDOCLY_LICENSE_KEY }}
GATSBY_TEMPLATE_ID: 671938c0a355389273dc7a8f
- name: Deploy
uses: AdobeDocs/static-website-deploy@master
with:
Expand Down
2 changes: 2 additions & 0 deletions gatsby-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

module.exports = {
siteMetadata: {
template_id: process.env.GATSBY_TEMPLATE_ID,

// versions: [
// {
// title: 'v2.0',
Expand Down
8 changes: 8 additions & 0 deletions gatsby-node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions
createTypes(`
type SiteSiteMetadata {
template_id: String
}
`)
}
56 changes: 33 additions & 23 deletions src/pages/credentials/GetCredentialOAuth2.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
import React from 'react'
import { GetCredential } from '@adobe/gatsby-theme-aio/src/components/GetCredential';
import { graphql, useStaticQuery } from 'gatsby';
import platform from "./images/platform.png";

const GetCredentialOAuthS2s = () => {

const data = useStaticQuery(
graphql`
query {
site {
siteMetadata{
template_id
}
}
}
`
)

const { template_id } = data?.site?.siteMetadata;

return (

<GetCredential className="getCredentialContainer" templateId="667b0b6a6547797329d24f0d" productName='Adobe Experience Platform' >
<GetCredential className="getCredentialContainer" templateId={template_id} productName='Adobe Experience Platform' >

<GetCredential.SignIn title="Get credentials" paragraph="Create unique credentials that you will use to call multiple APIs from your application." buttonText="Sign in to create credentials" />
<GetCredential.SignIn title="Get credentials" paragraph="After signing in, you can create credentials that can be used to call the Platform APIs." buttonText="Sign in" />

<GetCredential.Form title="Get credentials" paragraph="Create unique credentials that you will use to call multiple APIs from your application." className="formClass">
<GetCredential.Form title="Get credentials" paragraph="Create credentials that you can use to call the Platform APIs." className="formClass">

<GetCredential.Form.CredentialName label="Credential name" description="Credential name must be unique and between 6 and 45 characters long. A project will be automatically created with the same name in Adobe Developer Console." range="45" />
<GetCredential.Form.CredentialName label="Credential name" description="The credential name must be unique, use alphanumeric characters, and between 6 and 45 characters long. A project will be automatically created with the same name in Adobe Developer Console." range="45" />

<GetCredential.Form.Products label="Included products and services">
<GetCredential.Form.Product label="Adobe Experience Platform" icon={platform} />
Expand All @@ -26,9 +42,7 @@ const GetCredentialOAuthS2s = () => {
OAuth server-to-server credential
</h3>
<p className="spectrum-Body spectrum-Body--sizeM">
This credential allows you to use industry standard OAuth2.0
libraries to generate access tokens using the OAuth 2.0 client
credentials grant type.
This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.
</p>
</div>
<div style={{ display: "flex", gap: "16px", flexDirection: "column" }}>
Expand All @@ -52,7 +66,7 @@ const GetCredentialOAuthS2s = () => {

<GetCredential.UnknownError helpLink="https://some_help_link" helpLinkText="Get Help" className="unKnownError" />

<GetCredential.Card title="Your credential is ready to use" developerConsoleManage="Manage on Developer Console" className="card_developer_console" devConsoleDirection="/console">
<GetCredential.Card title="Your credential is ready to use" developerConsoleManage="Manage on Developer Console" className="card_developer_console" devConsoleDirection="/console" isCollapsable="true">

<GetCredential.Card.Side>
<div style={{ display: "flex", gap: "32px", flexDirection: "column" }}>
Expand Down Expand Up @@ -91,17 +105,18 @@ const GetCredentialOAuthS2s = () => {

<GetCredential.Card.DevConsoleLink heading="Developer Console Project" />

<GetCredential.Card.AccessToken helpText="" buttonLabel="Generate and copy token" heading="Access Token" />
<GetCredential.Card.AccessToken helpText="" buttonLabel="Generate and copy token" heading={(<>Access token<br/><br/> <span style="font-weight:normal"><small>After copying the access token, you must prepend the token with <code>Bearer</code> to use it with API calls.</small></span></>)} />


<GetCredential.Card.CredentialDetails heading="Credential details">
<GetCredential.Card.CredentialDetails.ClientId heading="ClientId" />
<GetCredential.Card.CredentialDetails.ClientSecret heading="Client Secret" buttonLabel="Retrieve and copy client secret" />
<GetCredential.Card.CredentialDetails heading={(<>Credential details<br/><br/> <span style="font-weight:normal"><small>You can use the following credential details to try out the Adobe Experience Platform APIs below.<ul><li>Client ID: Your public identifier for accessing the APIs. This acts as an API key when used with the Platform APIs, and corresponds with the <code>x-api-key</code> header.</li><li>Organization ID: The ID of the organization you're using with the Platform APIs. This corresponds with the <code>x-gw-ims-org-id</code> header.</li></ul></small></span></>)} orderBy="ClientId,ImsOrgID">
<GetCredential.Card.CredentialDetails.ClientId heading="Client ID (x-api-key)" />
<GetCredential.Card.CredentialDetails.ImsOrgID heading="Organization ID" />
<GetCredential.Card.CredentialDetails.Scopes heading="Scopes" scope="openid,session,AdobeID,read_organizations,additional_info.projectedProductContext" />
</GetCredential.Card.CredentialDetails>

</GetCredential.Card>

<GetCredential.Return title="Previously created projects" paragraph="Select a project and access your existing credentials for Adobe Experience Platform." className="card_developer_console">
<GetCredential.Return title="Previously created projects" paragraph="Select a project and access your existing credentials for Adobe Experience Platform." className="card_developer_console" isCollapsable="true">

<GetCredential.Return.Side>
<GetCredential.Return.Side.Custom>
Expand All @@ -113,28 +128,26 @@ const GetCredentialOAuthS2s = () => {
<GetCredential.Return.Side.NewCredential heading="Need another credential?" buttonLabel="Create new credential" />
</GetCredential.Return.Side>

<GetCredential.Return.CredentialDetails heading="Credential details">
<GetCredential.Return.CredentialDetails.ClientId heading="ClientId" />
<GetCredential.Return.CredentialDetails.ClientSecret heading="Client Secret" buttonLabel="Retrieve and copy client secret" />
<GetCredential.Return.CredentialDetails heading={(<>Credential details<br/><br/> <span style="font-weight:normal"><small>You can use the following credential details to try out the Adobe Experience Platform APIs below.<ul><li>Client ID: Your public identifier for accessing the APIs. This acts as an API key when used with the Platform APIs, and corresponds with the <code>x-api-key</code> header.</li><li>Organization ID: The ID of the organization you're using with the Platform APIs. This corresponds with the <code>x-gw-ims-org-id</code> header.</li></ul></small></span></>)} orderBy="ClientId,ImsOrgID">
<GetCredential.Return.CredentialDetails.ClientId heading="Client ID (x-api-key)" />
<GetCredential.Return.CredentialDetails.ImsOrgID heading="Organization ID" />
<GetCredential.Return.CredentialDetails.Scopes heading="Scopes" scope="openid,session,AdobeID,read_organizations,additional_info.projectedProductContext" />
</GetCredential.Return.CredentialDetails>

<GetCredential.Return.ProjectsDropdown label="Projects" subHeading="Only your projects that contain credentials are shown" />

<GetCredential.Return.ManageDeveloperConsole label="Manage all your projects and credentials on Adobe Developer Console" direction='/console/projects' />

<GetCredential.Return.AccessToken helpText="" buttonLabel="Generate and copy token" heading="Access Token" />
<GetCredential.Return.AccessToken helpText="" buttonLabel="Generate and copy token" heading={(<>Access token<br/><br/> <span style="font-weight:normal"><small>After copying the access token, you must prepend the token with <code>Bearer</code> to use it with API calls.</small></span></>)} />

<GetCredential.Return.DevConsoleLink heading="Developer Console Project" />
<GetCredential.Return.DevConsoleLink heading="Developer Console project" />

<GetCredential.Return.Products label="Included products and services">
<GetCredential.Return.Product label="Adobe Experience Platform" icon={platform} />
</GetCredential.Return.Products>

</GetCredential.Return>

<GetCredential.NoDeveloperAccessError title='Get Credentials' docsLinkText="How do I get developer permissions for the [Firefly - Firefly and Creative Cloud Automation API]?" docsLink="" />

<GetCredential.RequestAccess
title="Get credentials"
paragraph="Create unique credentials that you will use to call multiple APIs from your application."
Expand Down Expand Up @@ -183,9 +196,6 @@ const GetCredentialOAuthS2s = () => {
</div>
</GetCredential.RequestAccess.RequestAccessSide>
</GetCredential.RequestAccess>

<GetCredential.ErrorCode helpLink="Get help" title="Error code ###" description="Your personal account does not have Developer role permission to access the [Org Name, Inc.] organization in the Adobe Developer Console." buttonLabel="Contact Adobe" buttonLink="https://some_help_link" />

</GetCredential>

)
Expand Down
2 changes: 2 additions & 0 deletions src/pages/references/access-control.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/access-control.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/audit-query.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/audit-query.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/batch-ingestion.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/batch-ingestion.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/catalog.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/data-access.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/data-access.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/data-hygiene.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/data-hygiene.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/data-prep.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/data-prep.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/dataset-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/dataset-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/destination-authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/destination-authoring.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/destinations.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/destinations.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/flow-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/flow-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/identity-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/identity-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/mtls-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/mtls-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/observability-insights.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/observability-insights.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/policy-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/policy-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/privacy-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/privacy-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/profile.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/profile.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/query-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/query-service.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/reactor.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/reactor.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/sandbox.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/sandbox.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/schema-registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/schema-registry.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/segmentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/segmentation.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/sensei-machine-learning.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/sensei-machine-learning.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/streaming-ingestion.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/streaming-ingestion.yaml"/>
2 changes: 2 additions & 0 deletions src/pages/references/unified-tags.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ layout: none

import GetCredentialsOauth2 from "../credentials/GetCredentialOAuth2.js"

<GetCredentialsOauth2 />

<RedoclyAPIBlock src="/experience-platform-apis/swagger-specs/unified-tags.yaml"/>
8 changes: 7 additions & 1 deletion static/swagger-specs/access-control.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ info:
version: "1.0"

servers:
- url: //platform.adobe.io/data/foundation/access-control
- url: //{environment}.adobe.io/data/foundation/access-control
variables:
environment:
default: platform
enum:
- platform
- platform-stage

tags:
- name: (NEW) Interactive API documentation
Expand Down
8 changes: 7 additions & 1 deletion static/swagger-specs/audit-query.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@ info:
\n- **Visualize API calls with Postman (a free, third-party software)**:\n - [Audit Query API Postman collection on GitHub](https://github.com/adobe/experience-platform-postman-samples/blob/master/apis/experience-platform/Audit%20Query%20API.postman_collection.json)\n - [Video guide for creating the Postman environment](https://video.tv.adobe.com/v/28832)\n - [Steps for importing environments and collections in Postman](https://learning.postman.com/docs/getting-started/importing-and-exporting-data/)\n \n- **API paths**:\n - PLATFORM Gateway URL: https://<span>platform.adobe.io/\n - Base path for this API: /data/foundation\n - Example of a complete path: https://<span>platform.adobe.io/data/foundation/audit/events\n\n- **Required headers**:\n - All calls require the headers `Authorization`, `x-gw-ims-org-id`, and `x-api-key`. For more information on how to obtain these values, see the [authentication tutorial](http://www.adobe.com/go/platform-api-authentication-en).\n - All resources in Experience Platform are isolated to specific virtual sandboxes. All requests to Platform APIs require the header `x-sandbox-name` whose value is the all-lowercase name of the sandbox the operation will take place in (for example, \"prod\"). See the [sandboxes overview](https://adobe.com/go/sandbox-overview-en) for more information.\n - **API error handling**: \n - Refer to the Experience Platform API troubleshooting guide for [FAQs](https://experienceleague.adobe.com/docs/experience-platform/landing/troubleshooting.html#faq), [API status codes](https://experienceleague.adobe.com/docs/experience-platform/landing/troubleshooting.html#api-status-codes), and [request header errors](https://experienceleague.adobe.com/docs/experience-platform/landing/troubleshooting.html#request-header-errors)."
version: "1.0"
servers:
- url: //platform.adobe.io/data/foundation
- url: //{environment}.adobe.io/data/foundation
variables:
environment:
default: platform
enum:
- platform
- platform-stage
tags:
- name: (NEW) Interactive API documentation
description: You can now interact with the Experience Platform API endpoints directly from this API reference page. Get your [authentication credentials](http://www.adobe.com/go/platform-api-authentication-en) and use the **Try it** functionality in the right rail. Note that by using this functionality, you are making real API calls. Keep this in mind when you interact with production sandboxes.
Expand Down
8 changes: 7 additions & 1 deletion static/swagger-specs/batch-ingestion.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,13 @@ info:
version: "1.0"
servers:
- url: //platform.adobe.io/data/foundation/import
- url: //{environment}.adobe.io/data/foundation/import
variables:
environment:
default: platform
enum:
- platform
- platform-stage
tags:
- name: (NEW) Interactive API documentation
description: You can now interact with the Experience Platform API endpoints directly from this API reference page. Get your [authentication credentials](http://www.adobe.com/go/platform-api-authentication-en) and use the **Try it** functionality in the right rail. Note that by using this functionality, you are making real API calls. Keep this in mind when you interact with production sandboxes.
Expand Down
8 changes: 7 additions & 1 deletion static/swagger-specs/catalog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,13 @@ info:
version: "1.0"
servers:
- url: //platform.adobe.io/data/foundation/catalog
- url: //{environment}.adobe.io/data/foundation/catalog
variables:
environment:
default: platform
enum:
- platform
- platform-stage
tags:
- name: Batches
description: Batches allow users to understand which operations and applications have been performed on objects tracked by the system.
Expand Down
Loading

0 comments on commit 1b9f8b8

Please sign in to comment.