├── .yarnrc.yml ├── .env.example ├── static ├── Pod Controls.png ├── download_icon.png ├── Pod Navigations.png ├── SampleCustomPod.zip └── petstore.json ├── README.md ├── src └── pages │ ├── guides │ ├── design_guidelines │ │ ├── pod_controls.png │ │ ├── pod_controls_1.png │ │ ├── pod_navigations.png │ │ ├── pod_navigations_1.png │ │ └── index.md │ ├── submission_guidelines │ │ ├── create_listing │ │ │ ├── screenshot_1.png │ │ │ ├── screenshot_2.png │ │ │ ├── screenshot_3.png │ │ │ ├── screenshot_4.png │ │ │ └── index.md │ │ ├── listing_details │ │ │ ├── screenshot_1.png │ │ │ ├── screenshot_2.png │ │ │ ├── screenshot_3.png │ │ │ ├── screenshot_4.png │ │ │ └── index.md │ │ ├── version_details │ │ │ ├── screenshot_1.png │ │ │ ├── screenshot_2.png │ │ │ ├── Screenshot 2025-03-19 125540.png │ │ │ └── index.md │ │ ├── index.md │ │ └── version_packaging │ │ │ └── index.md │ ├── brand_guidelines │ │ └── index.md │ ├── migrating │ │ └── index.md │ ├── development_considerations │ │ └── index.md │ ├── index.md │ ├── custom_pod_structure │ │ └── index.md │ ├── code_samples │ │ └── index.md │ └── message_handling │ │ └── index.md │ ├── config.md │ ├── index.md │ ├── redirects.json │ └── sdk │ └── index.md ├── COPYRIGHT ├── .github ├── workflows │ ├── lint.yml │ ├── deploy.yml │ └── algolia-indexing.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── missing_content.yaml │ ├── site_feature.yaml │ ├── incorrect_topic.yaml │ └── site_bug.yaml ├── dependabot.yml ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── CONTRIBUTING.md └── scripts │ ├── process-mds.sh │ └── get-path-prefix.js ├── .gitignore ├── dev.mjs ├── package.json ├── CODE_OF_CONDUCT.md └── LICENSE /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | nodeLinker: node-modules 3 | yarnPath: .yarn/releases/yarn-3.2.1.cjs 4 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | REPO_GITHUB_TOKEN= 2 | REPO_OWNER=AdobeDocs 3 | REPO_NAME=adobe-connect-sdk 4 | REPO_BRANCH=main 5 | -------------------------------------------------------------------------------- /static/Pod Controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/static/Pod Controls.png -------------------------------------------------------------------------------- /static/download_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/static/download_icon.png -------------------------------------------------------------------------------- /static/Pod Navigations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/static/Pod Navigations.png -------------------------------------------------------------------------------- /static/SampleCustomPod.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/static/SampleCustomPod.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | Please see the [centralized README](https://github.com/AdobeDocs/adp-devsite-utils/blob/main/README.md). 4 | -------------------------------------------------------------------------------- /src/pages/guides/design_guidelines/pod_controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/design_guidelines/pod_controls.png -------------------------------------------------------------------------------- /src/pages/guides/design_guidelines/pod_controls_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/design_guidelines/pod_controls_1.png -------------------------------------------------------------------------------- /src/pages/guides/design_guidelines/pod_navigations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/design_guidelines/pod_navigations.png -------------------------------------------------------------------------------- /src/pages/guides/design_guidelines/pod_navigations_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/design_guidelines/pod_navigations_1.png -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | © Copyright 2015-2020 Adobe. All rights reserved. 2 | 3 | Adobe holds the copyright for all the files found in this repository. 4 | 5 | See the LICENSE file for licensing information. -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/create_listing/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/create_listing/screenshot_1.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/create_listing/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/create_listing/screenshot_2.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/create_listing/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/create_listing/screenshot_3.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/create_listing/screenshot_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/create_listing/screenshot_4.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/listing_details/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/listing_details/screenshot_1.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/listing_details/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/listing_details/screenshot_2.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/listing_details/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/listing_details/screenshot_3.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/listing_details/screenshot_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/listing_details/screenshot_4.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/version_details/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/version_details/screenshot_1.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/version_details/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/version_details/screenshot_2.png -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/version_details/Screenshot 2025-03-19 125540.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdobeDocs/adobe-connect-sdk/main/src/pages/guides/submission_guidelines/version_details/Screenshot 2025-03-19 125540.png -------------------------------------------------------------------------------- /src/pages/guides/brand_guidelines/index.md: -------------------------------------------------------------------------------- 1 | # Brand Guidelines 2 | 3 | Brand guidelines for developing Adobe Connect Custom Pods 4 | 5 | Please refer to [Adobe Creative Cloud Brand Guidelines](https://developer.adobe.com/developer-distribution/creative-cloud/docs/guides/branding_guidelines/). 6 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Lint 3 | on: 4 | pull_request: 5 | branches: [main] 6 | paths: 7 | - 'src/pages/**' 8 | 9 | jobs: 10 | lint: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | 16 | - name: Lint 17 | run: npx --yes github:AdobeDocs/adp-devsite-utils runLint -v -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | blank_issues_enabled: false 3 | contact_links: 4 | - name: Help Center 5 | url: https://helpx.adobe.com/support.html 6 | about: Find help with issues unrelated to documentation here. 7 | - name: Community resources 8 | url: https://developer.adobe.com/open 9 | about: Find more resources here. 10 | - name: Adobe Developer Support 11 | url: https://developer.adobe.com/developer-support 12 | about: Ask and answer questions. 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .editorconfig 2 | .idea 3 | .DS_Store 4 | .vscode/* 5 | 6 | # npm yarn 7 | node_modules 8 | package.lock 9 | yarn-error.log 10 | .pnp.* 11 | .yarn/* 12 | 13 | # keep in repo 14 | !.gitignore 15 | !.yarn.lock 16 | !.yarnrc.yml 17 | !.yarn/patches 18 | !.yarn/plugins 19 | !.yarn/releases 20 | !.yarn/sdks 21 | !.yarn/versions 22 | 23 | # gatsby files 24 | .env 25 | .cache 26 | public 27 | 28 | # cypress 29 | cypress/videos 30 | cypress/screenshots 31 | 32 | # lerna 33 | lerna-debug.log -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: "npm" 5 | # Look for `package.json` and `lock` files in the `root` directory 6 | directory: "/" 7 | # Check the npm registry for updates every day (weekdays) 8 | schedule: 9 | interval: "daily" 10 | allow: 11 | - dependency-name: "@adobe/gatsby-theme-aio" 12 | versioning-strategy: increase 13 | open-pull-requests-limit: 25 14 | labels: 15 | - "dependencies" 16 | ignore: 17 | # Ignore updates to package 18 | - dependency-name: "gatsby" 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ### Expected Behaviour 5 | 6 | ### Actual Behaviour 7 | 8 | ### Reproduce Scenario (including but not limited to) 9 | 10 | #### Steps to Reproduce 11 | 12 | #### Platform and Version 13 | 14 | #### Sample Code that illustrates the problem 15 | 16 | #### Logs taken while reproducing problem 17 | -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/index.md: -------------------------------------------------------------------------------- 1 | # Submission Guidelines 2 | 3 | Learn how to create and submit your Custom Pod from Developer Distribution. 4 | 5 | Third-party developers can register on [Developer Distribution](https://developer.adobe.com/developer-distribution/) and start submitting their Custom Pods, if they wish for these Custom Pods to become available in the in-app Custom Pods marketplace. Developer Distribuition allows developers to add details of their Custom Pods, metadata, and pod packages. 6 | 7 | Once submitted, Adobe reviewers will review the submission. Depending on the details provided by the developer, and on the basis of review guidelines, reviewers will either approve the Custom Pod submission, or ask for more details from the developer. 8 | -------------------------------------------------------------------------------- /dev.mjs: -------------------------------------------------------------------------------- 1 | // content/docs 2 | // serve static on 3001 3 | 4 | import express from 'express'; 5 | import fs from 'fs'; 6 | import path from 'path'; 7 | import { fileURLToPath } from 'url'; 8 | 9 | const __dirname = path.dirname(fileURLToPath(import.meta.url)); 10 | 11 | const PORT = process.env.DEV_PORT || 3003; 12 | 13 | // TODO: ensure `DOCS_DIRECTORY` starts with `/` 14 | const DOCS_DIRECTORY = process.env.DIRECTORY || './src/pages'; 15 | 16 | const app = express(); 17 | console.log(path.resolve(__dirname, `./${DOCS_DIRECTORY}`)); 18 | app.use( 19 | express.static(path.resolve(__dirname, `./${DOCS_DIRECTORY}`), { 20 | setHeaders: (res) => { 21 | res.setHeader('last-modified', new Date().toGMTString()); 22 | }, 23 | }), 24 | ); 25 | 26 | app.listen(PORT, () => { 27 | console.debug(`Docs dev server is running on port ${PORT}`); 28 | }); -------------------------------------------------------------------------------- /src/pages/guides/migrating/index.md: -------------------------------------------------------------------------------- 1 | # Migrating 2 | 3 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eleifend ornare purus, vel dapibus augue suscipit in. Nam blandit vitae ante et auctor. Donec placerat egestas posuere. Aliquam erat volutpat. In condimentum massa eu pharetra porta. Nunc tempus massa sit amet nisl posuere sagittis. Mauris sit amet rhoncus neque. Phasellus ut vulputate est, vel auctor metus. 4 | 5 | Donec tincidunt turpis in congue vulputate. Suspendisse potenti. Phasellus feugiat eros sem, tristique sollicitudin lacus consectetur id. Cras tortor orci, venenatis ac vulputate sit amet, auctor sed ex. Ut vel convallis felis. Etiam luctus, diam sed venenatis tincidunt, ipsum turpis volutpat eros, nec interdum arcu mi molestie dolor. Donec id mauris sed odio mollis viverra sed lobortis quam. Aliquam mi metus, ultricies sagittis hendrerit eget, volutpat vel dui. Proin id urna hendrerit, scelerisque arcu sit amet, egestas neque. Sed fringilla odio tincidunt sapien malesuada facilisis. 6 | -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/create_listing/index.md: -------------------------------------------------------------------------------- 1 | # Create a new listing 2 | 3 | Learn how to create a new listing for Adobe Connect Custom Pod on Developer Distribution. 4 | 5 | A new listing can be created from the home page or the '**Your listings**' page. 6 | 7 | 8 | ![Screenshot of initiating a new listing in Developer Distribution](./screenshot_1.png) 9 | 10 | 11 | Clicking on ‘**Create a new listing**’ lands the developer on the modal overlay where they must choose the type of listing they want to create. Click on the '**Adobe Connect Custom Pods**' Card. Click on '**Next**'. 12 | 13 | 14 | ![Screenshot of selecting the Adobe Connect card while creating a new listing](./screenshot_3.png) 15 | 16 | 17 | Once the listing type has been chosen, a new pod listing gets created. 18 | 19 | 20 | ![Screenshot of selecting the Adobe Connect card while creating a new listing](./screenshot_4.png) 21 | 22 | 23 | From here, the next step is to add the details of the Custom Pod listing. 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "adobe-connect-sdk", 4 | "version": "1.0.0", 5 | "license": "Apache-2.0", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/AdobeDocs/adobe-connect-sdk" 9 | }, 10 | "author": { 11 | "name": "Stephan Ringel", 12 | "url": "https://github.com/icaraps" 13 | }, 14 | "scripts": { 15 | "dev": "node ./dev.mjs", 16 | "buildNavigation": "npx --yes github:AdobeDocs/adp-devsite-utils buildNavigation -v", 17 | "buildRedirections": "npx --yes github:AdobeDocs/adp-devsite-utils buildRedirections -v", 18 | "renameFiles": "npx --yes github:AdobeDocs/adp-devsite-utils renameFiles -v", 19 | "normalizeLinks": "npx --yes github:AdobeDocs/adp-devsite-utils normalizeLinks -v", 20 | "buildSiteWideBanner": "npx --yes github:AdobeDocs/adp-devsite-utils buildSiteWideBanner -v", 21 | "lint": "npx --yes github:AdobeDocs/adp-devsite-utils runLint -v" 22 | }, 23 | "packageManager": "yarn@3.2.1", 24 | "devDependencies": { 25 | "express": "5.1.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/guides/development_considerations/index.md: -------------------------------------------------------------------------------- 1 | # Development Considerations 2 | 3 | Learn about the development considerations while using Adobe Connect SDK to develop Custom Pods. 4 | 5 | Broadly speaking, there are two types of custom pods that you can create: 6 | 7 | - Applications that do not require synchronization, such as a clock that displays the users local time. This type of custom pod does not use or require the Custom Pod SDK, but your pod will still need to be packaged correctly with the required structure explained below. 8 | 9 | - Applications designed specifically for Adobe Connect. These pods can be synchronized across all participants in an Adobe Connect room. In addition to synchonization, developers have some additional capabilities to get information about the user - such as their name and role, the virtual room, and events. 10 | 11 | You can create your custom pod with plain (vanilla) JavaScript or use a web framework. While you could use any framework for your JavaScript development, the Adobe Connect meeting interface uses React.js and there may be performance advantages to using this framework for your Custom Pod development. 12 | -------------------------------------------------------------------------------- /src/pages/config.md: -------------------------------------------------------------------------------- 1 | - pathPrefix: 2 | - /adobe-connect-sdk/ 3 | 4 | - pages: 5 | - [Adobe Connect SDK](https://developer.adobe.com/adobe-connect-sdk/) 6 | - [Guides](guides/index.md) 7 | - SDK Reference 8 | - [SDK v11.0](sdk/index.md) 9 | 10 | - subPages: 11 | - [Getting Started](guides/index.md) 12 | - [Development Considerations](guides/development_considerations/index.md) 13 | - [Custom Pod Structure](guides/custom_pod_structure/index.md) 14 | - [Message Handling](guides/message_handling/index.md) 15 | - [Design Guidelines ](guides/design_guidelines/index.md) 16 | - [Code Samples](guides/code_samples/index.md) 17 | - [Submission Guidelines](guides/submission_guidelines/index.md) 18 | - [Creating a listing](guides/submission_guidelines/create_listing/index.md) 19 | - [Listing details](guides/submission_guidelines/listing_details/index.md) 20 | - [Version Details](guides/submission_guidelines/version_details/index.md) 21 | - [Version Packaging](guides/submission_guidelines/version_packaging/index.md) 22 | - [Brand Guidelines](guides/brand_guidelines/index.md) 23 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Deployment 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | env: 7 | description: "Select environment to deploy to" 8 | type: choice 9 | required: true 10 | default: "stage" 11 | options: 12 | - stage 13 | - prod 14 | - stage & prod 15 | baseSha: 16 | description: "Use base SHA commit to deploy from (empty string defaults to last commit before HEAD)" 17 | type: string 18 | required: false 19 | default: "" 20 | deployAll: 21 | description: "Force deploy all files" 22 | type: boolean 23 | default: false 24 | jobs: 25 | deployment: 26 | name: Deployment 27 | uses: AdobeDocs/adp-devsite-workflow/.github/workflows/deploy.yml@main 28 | with: 29 | env: ${{ inputs.env }} 30 | baseSha: ${{ inputs.baseSha }} 31 | deployAll: ${{ inputs.deployAll }} 32 | lint: 33 | name: Lint 34 | runs-on: ubuntu-latest 35 | steps: 36 | - name: Checkout 37 | uses: actions/checkout@v4 38 | - name: Lint 39 | run: npx --yes github:AdobeDocs/adp-devsite-utils runLint -v 40 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/missing_content.yaml: -------------------------------------------------------------------------------- 1 | name: Missing content 2 | description: Undocumented feature, service, command, API, UI component, procedure, etc. 3 | body: 4 | - type: markdown 5 | attributes: 6 | value: | 7 | Thank you for taking the time to report this issue! 8 | This request should only relate to the content of the developer.adobe.com website. 9 | Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. 10 | - type: checkboxes 11 | attributes: 12 | label: Is there an existing issue for this? 13 | description: Please search to see if an issue already exists for the documentation you are requesting. 14 | options: 15 | - label: I have searched the existing issues 16 | required: true 17 | - type: textarea 18 | attributes: 19 | label: What's missing? 20 | placeholder: | 21 | - In the or ... 22 | - Missing explanation of how ... works. 23 | - Missing steps or guidelines for .... 24 | - Missing code samples to demonstrate .... 25 | - Something else ... 26 | validations: 27 | required: true 28 | -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/version_details/index.md: -------------------------------------------------------------------------------- 1 | # Version Details 2 | 3 | Learn about how to add version details for your Custom pod. 4 | 5 | Adobe Connect custom pod requires a package to be uploaded and validated before the developer can submit the listing for Adobe’s review. The developer will see the option to '**Add new version**' in the left navigation bar. Clicking on ‘Add new version’ creates a new version and takes the developer to the '**Version Details**' page. 6 | 7 | ![Screenshot of version details page](./screenshot_1.png) 8 | 9 | Add the custom pod package, select the languages supported by the custom pod, and add release notes for the version being submitted. Once this is done, you can click on **Submit**. 10 | 11 | 12 | ![Screenshot of Submit for Review modal](./screenshot_2.png) 13 | 14 | At this point, a modal will open to seek additional details around the submission. Once these details are filled, the listing can be submitted to Adobe for review. Once submitted, you will receive a confirmation mail on your registed email. Adobe will typically take less than 10 days to review a Custom Pod submission. If we need additional details or changes to the custom pod package, we will request more details. The details can be shared and the listing or version can be resubmitted on Developer Distribution. 15 | 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/site_feature.yaml: -------------------------------------------------------------------------------- 1 | name: Site feature request 2 | description: Propose a new functionality or an improvement of the developer.adobe.com website or of the local development tools. 3 | body: 4 | - type: markdown 5 | attributes: 6 | value: | 7 | Thank you for taking the time to report this issue! 8 | This feature request should only relate to the developer.adobe.com website itself and its behavior. 9 | Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. 10 | - type: checkboxes 11 | attributes: 12 | label: Is there an existing issue for this? 13 | description: Please search to see if an issue already exists for the feature you are requesting. 14 | options: 15 | - label: I have searched the existing issues 16 | required: true 17 | - type: textarea 18 | attributes: 19 | label: What feature should be added? 20 | validations: 21 | required: true 22 | - type: textarea 23 | attributes: 24 | label: What is the expected behavior? 25 | validations: 26 | required: true 27 | - type: textarea 28 | attributes: 29 | label: How will this feature improve the user experience? 30 | validations: 31 | required: true 32 | - type: textarea 33 | attributes: 34 | label: What would a solution for this issue look like? 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/incorrect_topic.yaml: -------------------------------------------------------------------------------- 1 | name: Incorrect or unclear topic 2 | description: "Unclear or incorrect documentation: ambiguous guidelines, wrong or obsolete examples, typos, etc." 3 | body: 4 | - type: markdown 5 | attributes: 6 | value: | 7 | Thank you for taking the time to report this issue! 8 | This request should only relate to the content of the developer.adobe.com website. 9 | Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. 10 | - type: checkboxes 11 | attributes: 12 | label: Is there an existing issue for this? 13 | description: Please search to see if an issue already exists for the documentation you are requesting. 14 | options: 15 | - label: I have searched the existing issues 16 | required: true 17 | - type: input 18 | attributes: 19 | label: Which topic? 20 | description: A link to the topic that needs clarification or correction 21 | placeholder: "Example: https://developer.adobe.com/commerce/webapi/rest/use-rest/search-endpoint/" 22 | validations: 23 | required: true 24 | - type: textarea 25 | attributes: 26 | label: What's wrong with the content? 27 | validations: 28 | required: true 29 | - type: textarea 30 | attributes: 31 | label: What changes do you propose? 32 | - type: textarea 33 | attributes: 34 | label: Anything else that can help to cover this? 35 | -------------------------------------------------------------------------------- /src/pages/guides/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides - Overview 3 | description: This is the overview page of Adobe Connect Custom Pods SDK 4 | --- 5 | 6 | # Overview 7 | 8 | The Adobe Connect SDK provides developers with the tools to integrate and extend the capabilities of Adobe Connect. Developers can create applications using standard HTML and JavaScript programming. The SDK is a javascript library which provides a set of standard programming interfaces (Methods, Events, Properties, and Constants). 9 | 10 | ## What are custom pods? 11 | 12 | Adobe Connect custom pods are third-party applications that extend the functionality of Adobe Connect virtual meeting rooms. These custom pods can be added to enhance interactivity and provide specialized tools that standard pods may not offer. 13 | 14 | Custom pods can be used to allow multi-user interactions within a session, they can provide a synchronized display of information for all users and can even send and receive data from external websites. Simple examples include a countdown-timer that lets a host show everyone when the meeting will start, or an interactive game that displays a leaderboard with all the participants’ scores, or a map application that combines user location data with map data from an external mapping website. 15 | 16 | The developer of a custom pod might want choose which variables are synchronized for all users in the meeting (such as the countdown timer value), or to limit the permissions to view certain UI elements or enter data in a field (so only hosts can set the time in the countdown), or even to change the behavior of a custom pod when it is being viewed in a recording. 17 | 18 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Description 4 | 5 | 6 | 7 | ## Related Issue 8 | 9 | 10 | 11 | 12 | 13 | 14 | ## Motivation and Context 15 | 16 | 17 | 18 | ## How Has This Been Tested? 19 | 20 | 21 | 22 | 23 | 24 | ## Screenshots (if appropriate): 25 | 26 | ## Types of changes 27 | 28 | 29 | 30 | - [ ] Bug fix (non-breaking change which fixes an issue) 31 | - [ ] New feature (non-breaking change which adds functionality) 32 | - [ ] Breaking change (fix or feature that would cause existing functionality to change) 33 | 34 | ## Checklist: 35 | 36 | 37 | 38 | 39 | - [ ] I have signed the [Adobe Open Source CLA](https://opensource.adobe.com/cla.html). 40 | - [ ] My code follows the code style of this project. 41 | - [ ] My change requires a change to the documentation. 42 | - [ ] I have updated the documentation accordingly. 43 | - [ ] I have read the **CONTRIBUTING** document. 44 | - [ ] I have added tests to cover my changes. 45 | - [ ] All new and existing tests passed. 46 | -------------------------------------------------------------------------------- /.github/workflows/algolia-indexing.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Search Indexing 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | mode: 7 | description: 'Type of indexing. "index" to push to Algolia, "console" for dry run.' 8 | required: true 9 | default: "index" 10 | type: choice 11 | options: 12 | - console 13 | - index 14 | 15 | jobs: 16 | build-and-index: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - name: Setup Node v18 for Yarn v4 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: "18.19.0" # Current LTS version 26 | 27 | - name: Enable Corepack for Yarn 28 | run: corepack enable 29 | 30 | - name: Install Dependencies 31 | run: yarn install 32 | env: 33 | YARN_ENABLE_IMMUTABLE_INSTALLS: false 34 | 35 | - name: Build site 36 | run: yarn build 37 | 38 | env: 39 | NODE_OPTIONS: "--max_old_space_size=8192" 40 | PREFIX_PATHS: true # equivalent to --prefix-paths flag for 'gatsby build' 41 | REPO_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | REPO_OWNER: ${{ github.repository_owner }} 43 | REPO_NAME: ${{ github.event.repository.name }} 44 | REPO_BRANCH: ${{ github.ref_name }} 45 | GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.AIO_ALGOLIA_APPLICATION_ID }} 46 | GATSBY_ALGOLIA_SEARCH_API_KEY: ${{ secrets.AIO_ALGOLIA_SEARCH_API_KEY }} 47 | ALGOLIA_WRITE_API_KEY: ${{ secrets.AIO_ALGOLIA_WRITE_API_KEY }} 48 | ALGOLIA_INDEXATION_MODE: ${{ github.event.inputs.mode || 'index' }} 49 | GATSBY_ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME || github.event.repository.name }} 50 | GATSBY_FEDS_PRIVACY_ID: ${{ secrets.AIO_FEDS_PRIVACY_ID }} 51 | GATSBY_SITE_DOMAIN_URL: https://developer.adobe.com 52 | -------------------------------------------------------------------------------- /src/pages/guides/custom_pod_structure/index.md: -------------------------------------------------------------------------------- 1 | # Custom Pod Structure 2 | Understand the structure of a Custom Pods package. 3 | 4 | A custom pod is delivered as a compressed package containing source files, a manifest, and libraries. We recommend renaming the custom pod with a `.pod` extension to make downloading and distrubution easier. If you would like to submit the custom pod to the Adobe Connect marketplace, renaming to a `.pod` extension is required. Meeting hosts simply load this `.pod` or `.zip` package into an empty Share pod to install the application into any meeting room. The Custom Pod can also be uploaded to the Content library to make it easily accessible across meeting rooms. Custom Pods which have been submitted and accepted to the Adobe Connect marketplace can be discovered from the in-app marketplace. 5 | 6 | 1. A custom pod must include both an HTML file with a `.htm` extension, and a manifest file to list all of the files as assets called **breeze-manifest.xml**. 7 | 2. Pods that use the Custom Pod SDK, will also need to include the SDK as part of the package. We recommend adding `connect_customPodSDK.js` in a folder called `lib`. Download the Adobe Connect Custom Pod SDK from [Adobe Developer Console](https://developer.adobe.com/console/14257/servicesandapis). **Do not modify the SDK File**. 8 | 3. Additional files and directories can be added such as images, CSS stylesheets, JavaScript files and other web libraries and technologies. Remember to reference all of your files in the **breeze-manifest.xml**. Adobe Connect may generate an error if files are not properly listed. 9 | 4. HTML documents require a `.htm` extension, **do not use `.html`**. If a file is listed within the breeze-manifest.xml but not present in the package, Adobe Connect will produce a conversion error when the pod is uploaded. These documents must be compressed into a single ZIP archive prior to being uploaded to Adobe Connect. Adobe Connect supports both the `.zip` and `.pod` extensions. 10 | -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/listing_details/index.md: -------------------------------------------------------------------------------- 1 | # Listing Details 2 | 3 | Add details of your listing like Custom Pod name, media details, categories, and legal information. 4 | 5 | The developer can navigate to the “Listing details” page to add listing-level metadata details that help users discover their listing in the marketplace once it’s published. 6 | 7 | Below is the landing page to add listing details. Note the following items for Adobe Connect Custom Pod listings: 8 | 9 | 1. The navigation panel on the left confirms that this is the Listing Details screen. 10 | 2. The developer's role and organization name are listed in the upper right-hand corner. If any profile details need to be edited, click the "Edit Profile" tab. 11 | 3. The menu at the top of the screen indicates the listing status, the platform, the last modified date, and the Pod ID. The listing details for the app are ready to be added now. 12 | 13 | ![Screenshot of listing details page - General](./screenshot_1.png) 14 | 15 | Once details are added to the **General** tab, the developer can move onto the **Media** tab to add details like Custom Pod icon and screenshots. 16 | 17 | ![Screenshot of listing details page - Media](./screenshot_2.png) 18 | 19 | After adding the Custom Pod icon, screenshots, and screenshot captions, the developer can move onto next tab - **Tags**. 20 | 21 | ![Screenshot of listing details page - Tags](./screenshot_3.png) 22 | 23 | Here, the category is a required field, and tags are optional. Select the categories (upto two) relevant for your custom pod, and then move onto the next section - **Miscellaneous**. 24 | 25 | ![Screenshot of listing details page - Miscellaneous](./screenshot_4.png) 26 | 27 | While privacy policy and terms of use are optional fields on Developer Distribution, we highly recommend linking to your privacy policy and terms of use documents. At this point, Adobe Connect Custom Pod reviewers will reject any Custom Pods submission without a valid privacy policy or terms of use documents. 28 | 29 | Once this is completed, the next step is to add **Version details**. Click on **Save draft & add version** on the top-right of the screen. 30 | 31 | 32 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks for choosing to contribute! 4 | 5 | The following are a set of guidelines to follow when contributing to this project. 6 | 7 | ## Code Of Conduct 8 | 9 | This project adheres to the Adobe [code of conduct](../CODE_OF_CONDUCT.md). By participating, 10 | you are expected to uphold this code. Please report unacceptable behavior to 11 | [Grp-opensourceoffice@adobe.com](mailto:Grp-opensourceoffice@adobe.com). 12 | 13 | ## Have A Question? 14 | 15 | Start by filing an issue. The existing committers on this project work to reach 16 | consensus around project direction and issue solutions within issue threads 17 | (when appropriate). 18 | 19 | ## Contributor License Agreement 20 | 21 | All third-party contributions to this project must be accompanied by a signed contributor 22 | license agreement. This gives Adobe permission to redistribute your contributions 23 | as part of the project. [Sign our CLA](https://opensource.adobe.com/cla.html). You 24 | only need to submit an Adobe CLA one time, so if you have submitted one previously, 25 | you are good to go! 26 | 27 | ## Code Reviews 28 | 29 | All submissions should come in the form of pull requests and need to be reviewed 30 | by project committers. Read [GitHub's pull request documentation](https://help.github.com/articles/about-pull-requests/) 31 | for more information on sending pull requests. 32 | 33 | Lastly, please follow the [pull request template](PULL_REQUEST_TEMPLATE.md) when 34 | submitting a pull request! 35 | 36 | ## From Contributor To Committer 37 | 38 | We love contributions from our community! If you'd like to go a step beyond contributor 39 | and become a committer with full write access and a say in the project, you must 40 | be invited to the project. The existing committers employ an internal nomination 41 | process that must reach lazy consensus (silence is approval) before invitations 42 | are issued. If you feel you are qualified and want to get more deeply involved, 43 | feel free to reach out to existing committers to have a conversation about that. 44 | 45 | ## Security Issues 46 | 47 | Security issues shouldn't be reported on this issue tracker. Instead, [file an issue to our security experts](https://helpx.adobe.com/security/alertus.html). 48 | -------------------------------------------------------------------------------- /src/pages/guides/submission_guidelines/version_packaging/index.md: -------------------------------------------------------------------------------- 1 | # Version Packaging 2 | 3 | Learn about how to package your custom pod for successfully submitting to Developer Distribution. 4 | 5 | ## Organizing the files 6 | 7 | Ensure all the necessary files for your custom pod are in a single directory. This includes: 8 | - **HTML files**: The main files that contain the code for your custom pod. 9 | - **Assets**: Any images, stylesheets, scripts, or other resources your custom pod needs. 10 | - **Configuration files**: Any XML files that define settings or parameters for your pod. 11 | 12 | ## Create a manifest 13 | 14 | The custom pod package should include a breeze-manifest.xml file in the root directory. The manifest file should include the following information: 15 | 16 | - **Document type**: Specify the type as `custom-pod`. 17 | - **ID and version**: Unique identifier and version number for your pod. The ID should be have a reverse domain name notation like com.adobe.connect.podName. Version should be of the form `x.y.z` where x, y, and z are numeric. 18 | - **minimumConnectServerVersion**: The minimum version of Adobe Connect required to run your custom pod. 19 | - **minimumSDKversion**: The minimum Adobe Connect SDK version required to run your custom pod. 20 | - **Assets**: List all the assets (files and directories) your pod uses. 21 | 22 | ## Compress the file 23 | 24 | Once you have all your files organized and tested, compress them into a ZIP file. Ensure the ZIP file maintains the directory structure. Change the extension type from `.zip` to `.pod`. Please note that renaming the custom pod package to a `.pod` extension is required if you are submitting the Custom Pod to Developer Distribution. 25 | 26 | ## Test and verify locally 27 | 28 | Upload the `.pod` file into a share pod inside an Adobe Connect room to test it locally. If the Custom Pod works as expected, you are now ready to submit the Custom Pod package through Developer Distribution. 29 | 30 | ## Example Directory Structure 31 | 32 | 33 | #### 34 | ``` 35 | MyCustomPod/ 36 | ├── index.html 37 | ├── breeze-manifest.xml 38 | ├── assets/ 39 | │ ├── style.css 40 | │ ├── script.js 41 | │ └── image.png 42 | └── lib/ 43 | └── connect_customPodSDK.js 44 | ``` 45 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/site_bug.yaml: -------------------------------------------------------------------------------- 1 | name: Site bug 2 | description: Something isn't working on developer.adobe.com or when building the website locally. 3 | labels: ["bug"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to report this issue! 9 | This bug report should only relate to the developer.adobe.com website itself or non-content issues such as rendering, 404 pages, or other unexpected behavior. 10 | Issues that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. 11 | SECURITY DISCLOSURE: If this is a security disclosure please follow the guidelines in CONTRIBUTING.md. This helps keep folks from accidentally releasing vulnerabilities before the maintainers get a chance to fix the issue. 12 | - type: checkboxes 13 | attributes: 14 | label: Is there an existing issue for this? 15 | description: Please search to see if an issue already exists for the bug you encountered. 16 | options: 17 | - label: I have searched the existing issues 18 | required: true 19 | - type: textarea 20 | attributes: 21 | label: Expected behavior 22 | description: | 23 | Tell us what you expected to happen. 24 | validations: 25 | required: true 26 | - type: textarea 27 | attributes: 28 | label: Actual behavior 29 | description: | 30 | Tell us what happened. Include error messages and issues. 31 | validations: 32 | required: true 33 | - type: textarea 34 | attributes: 35 | label: Steps to reproduce 36 | description: | 37 | Provide a set of clear steps to reproduce this bug. 38 | validations: 39 | required: true 40 | - type: textarea 41 | attributes: 42 | label: Environment 43 | description: | 44 | Describe your environment such as platform, browser, and versions. 45 | Provide all the details that will help us to reproduce the bug. 46 | value: | 47 | - Browser: 48 | - OS: 49 | validations: 50 | required: true 51 | - type: textarea 52 | attributes: 53 | label: Sample code 54 | description: Sample Code that illustrates the problem 55 | - type: textarea 56 | attributes: 57 | label: Logs 58 | description: Logs taken while reproducing problem 59 | -------------------------------------------------------------------------------- /.github/scripts/process-mds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | fail() { 4 | echo "$@" 1>&2 5 | exit 1 6 | } 7 | 8 | ROOT="./src/pages" 9 | OPERATION=$1 10 | ENV=$2 11 | CONTENT_REPO_BRANCH=$3 12 | PATH_PREFIX=$4 13 | 14 | # conditional http_method 15 | case "$OPERATION" in 16 | cache | preview | live) 17 | http_method="POST" 18 | ;; 19 | *) 20 | fail "Unknown operation" 21 | ;; 22 | esac 23 | 24 | # conditional site and code_repo_branch 25 | case "$ENV" in 26 | stage) 27 | site="adp-devsite-stage" 28 | code_repo_branch="stage" 29 | ;; 30 | prod) 31 | site="adp-devsite" 32 | code_repo_branch="main" 33 | ;; 34 | *) 35 | fail "Unknown env" 36 | ;; 37 | esac 38 | 39 | # conditional args 40 | if [ "$ENV" == "stage" ] && [ "$OPERATION" == "preview" ] 41 | then 42 | args="--header \"x-content-source-authorization: ${CONTENT_REPO_BRANCH}\"" 43 | else 44 | args="" 45 | fi 46 | 47 | process() 48 | { 49 | filename=$1 50 | path="${PATH_PREFIX:1}/${filename#$ROOT/}" 51 | url="https://admin.hlx.page/${OPERATION}/adobedocs/${site}/${code_repo_branch}/${path}" 52 | cmd="curl -X${http_method} -vi ${args} ${url}" 53 | 54 | echo "" 55 | echo "" 56 | echo "--------------------------------------------------------------------------------" 57 | echo "" 58 | echo "${cmd}" 59 | echo "" 60 | 61 | # run command and extract failure string 62 | failure=$(eval "${cmd} | grep -e \"x-error:\"") 63 | 64 | # append to failures 65 | if [ "$failure" != "" ] 66 | then 67 | failures="${failures}\n${cmd}\n${failure}\n" 68 | fi 69 | 70 | # write failures to stderr so it can be accessed outside this subshell later 71 | echo $failures > 2 72 | } 73 | 74 | summarize() { 75 | echo "" 76 | echo "" 77 | echo "================================================================================" 78 | echo "" 79 | 80 | # read failures from stderr to access it from this parent shell 81 | read -r failures < 2 82 | 83 | if [ "${failures}" == "" ] 84 | then 85 | echo "Success!" 86 | else 87 | echo "Failures:" 88 | echo -e "${failures}" 89 | fi 90 | 91 | echo "" 92 | } 93 | 94 | # process mds in root 95 | # TODO: may want to only process certain types of files 96 | find "${ROOT}" -type f \( -name "*.md" -o -name "*.json" \) -exec echo "{}" \; | while read i; do process $i; done 97 | 98 | summarize 99 | -------------------------------------------------------------------------------- /src/pages/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Adobe Connect - SDK Documentation 3 | description: This is the overview page of Adobe Connect SDK Documentation 4 | contributors: 5 | - https://github.com/skhadiya 6 | --- 7 | 8 | 9 | 10 | # Adobe Connect SDK 11 | 12 | Adobe Connect enables customers to extend the out-of-the-box functionality of Adobe Connect using custom pods developed with standard web technologies such as HTML, Javascript, and CSS. 13 | 14 | 15 | 16 | #### Resources 17 | 18 | * [SDK Reference](https://developer.adobe.com/adobe-connect-sdk/sdk/) 19 | * [Code Samples](https://developer.adobe.com/adobe-connect-sdk/guides/code_samples/) 20 | 21 | ## Overview 22 | 23 | This documentation provides instructions for Adobe Connect Custom Pods SDK v11. For detailed SDK reference, see [Adobe Connect SDK reference](https://developer.adobe.com/adobe-connect-sdk/sdk/). 24 | 25 | Custom pods can be used to allow multi-user interactions within a session, they can provide a synchronized display of information for all users and can even send and receive data from external websites. Simple examples include a countdown-timer that lets a host show everyone when the meeting will start, or an interactive game that displays a leaderboard with all the participants’ scores, or a map application that combines user location data with map data from an external mapping website. 26 | 27 | ## Getting Started 28 | 29 | 30 | 31 | ### Development Basics 32 | 33 | [Development Considerations](guides/development_considerations/index.md) 34 | 35 | Provides the development considerations while using Adobe Connect SDK to develop custom pods 36 | 37 | 38 | 39 | [Custom Pods Structure](guides/custom_pod_structure/index.md) 40 | 41 | Understand the structure of a Custom Pods package 42 | 43 | 44 | 45 | [Message Handling](guides/message_handling/index.md) 46 | 47 | Learn how Custom Pods can communicate with other components of a room using Messages 48 | 49 | [Design Guidelines](guides/design_guidelines/index.md) 50 | 51 | Learn how to design your custom pods for a modern and accessible experience. 52 | 53 | 54 | 55 | ### Guides 56 | 57 | [Create a New Listing](guides/submission_guidelines/create_listing/index.md) 58 | 59 | Learn about creating and submitting a custom pod listing on Developer Distribution 60 | 61 | 62 | 63 | [SDK Reference](/sdk/index.md) 64 | 65 | Read through the complete reference to the Methods, Properties, and Events available in the SDK. 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /src/pages/guides/code_samples/index.md: -------------------------------------------------------------------------------- 1 | # Code Samples 2 | Learn how to initialize the SDK library, structure the breeze-manifest file, and download a sample custom pods package. 3 | 4 | ## Initialize SDK Library 5 | 6 | 7 | 8 | #### Initialize SDK Library 9 | 10 | ```javascript 11 | //Initialize library 12 | 13 | // while using React it is recommended that you initialize the library 14 | // inside componentDidMount method 15 | var cpu = ConnectCustomSDK.SyncConnector || {}; 16 | 17 | // to inform the main client that library is getting initialised 18 | cpu.init( 19 | onConfigured, 20 | "com.adobe.connect.basiclistsync", 21 | "10.5", 22 | "connectsdkhook" 23 | ); 24 | cpu.registerCallback("userLeft", updateUserList); 25 | cpu.registerCallback("userJoined", updateUserList); 26 | cpu.registerCallback("userDetailsChanged", updateUserList); 27 | cpu.registerCallback("userStatusChanged", updateUserList); 28 | cpu.registerCallback("roleChanged", updateUserList); 29 | cpu.registerCallback("syncMessageReceived", syncMessageReceived); 30 | cpu.registerCallback("caughtUp", caughtUp); 31 | cpu.registerCallback("update", breakOutSession); 32 | onConfigured = function () { 33 | /*code to load the content of html*/ 34 | }; 35 | 36 | ``` 37 | ## Breeze Manifest File 38 | 39 | 40 | 41 | #### breeze-manifest.xml 42 | 43 | ```xml 44 | 45 | 47 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | ``` 64 | 65 | ## Sample Custom Pod Package 66 | 67 | To help you kickstart development of a Custom Pod, included below is a sample Custom Pod package. 68 | 69 | To test the functionality, you can drag and drop the pod as a ZIP package to an empty Share pod in an Adobe Connect room. You can unzip the package to examine the code and structure of the package. 70 | 71 | The sample custom pod includes a **breeze-manifest.xml** file you can use as a starting point for your own pod as well as an HTML file that includes some JavaScript examples of functions to send and receive Sync Messages as well as to list all users in the room. 72 | 73 | Note, that since the `allowParticipantPublish` option was not used, only Hosts and Presenters will be able to send the custom sync messages. The ability to list all users is also restricted to hosts only. 74 | -------------------------------------------------------------------------------- /src/pages/redirects.json: -------------------------------------------------------------------------------- 1 | {"total":28,"offset":0,"limit":28,"data":[{"Source":"/adobe-connect-sdk","Destination":"/adobe-connect-sdk/"},{"Source":"/adobe-connect-sdk/index","Destination":"/adobe-connect-sdk/"},{"Source":"/adobe-connect-sdk/sdk","Destination":"/adobe-connect-sdk/sdk/"},{"Source":"/adobe-connect-sdk/sdk/index","Destination":"/adobe-connect-sdk/sdk/"},{"Source":"/adobe-connect-sdk/guides","Destination":"/adobe-connect-sdk/guides/"},{"Source":"/adobe-connect-sdk/guides/index","Destination":"/adobe-connect-sdk/guides/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines","Destination":"/adobe-connect-sdk/guides/submission_guidelines/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/index","Destination":"/adobe-connect-sdk/guides/submission_guidelines/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/version_packaging","Destination":"/adobe-connect-sdk/guides/submission_guidelines/version_packaging/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/version_packaging/index","Destination":"/adobe-connect-sdk/guides/submission_guidelines/version_packaging/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/version_details","Destination":"/adobe-connect-sdk/guides/submission_guidelines/version_details/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/version_details/index","Destination":"/adobe-connect-sdk/guides/submission_guidelines/version_details/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/listing_details","Destination":"/adobe-connect-sdk/guides/submission_guidelines/listing_details/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/listing_details/index","Destination":"/adobe-connect-sdk/guides/submission_guidelines/listing_details/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/create_listing","Destination":"/adobe-connect-sdk/guides/submission_guidelines/create_listing/"},{"Source":"/adobe-connect-sdk/guides/submission_guidelines/create_listing/index","Destination":"/adobe-connect-sdk/guides/submission_guidelines/create_listing/"},{"Source":"/adobe-connect-sdk/guides/migrating","Destination":"/adobe-connect-sdk/guides/migrating/"},{"Source":"/adobe-connect-sdk/guides/migrating/index","Destination":"/adobe-connect-sdk/guides/migrating/"},{"Source":"/adobe-connect-sdk/guides/message_handling","Destination":"/adobe-connect-sdk/guides/message_handling/"},{"Source":"/adobe-connect-sdk/guides/message_handling/index","Destination":"/adobe-connect-sdk/guides/message_handling/"},{"Source":"/adobe-connect-sdk/guides/development_considerations","Destination":"/adobe-connect-sdk/guides/development_considerations/"},{"Source":"/adobe-connect-sdk/guides/development_considerations/index","Destination":"/adobe-connect-sdk/guides/development_considerations/"},{"Source":"/adobe-connect-sdk/guides/custom_pod_structure","Destination":"/adobe-connect-sdk/guides/custom_pod_structure/"},{"Source":"/adobe-connect-sdk/guides/custom_pod_structure/index","Destination":"/adobe-connect-sdk/guides/custom_pod_structure/"},{"Source":"/adobe-connect-sdk/guides/code_samples","Destination":"/adobe-connect-sdk/guides/code_samples/"},{"Source":"/adobe-connect-sdk/guides/code_samples/index","Destination":"/adobe-connect-sdk/guides/code_samples/"},{"Source":"/adobe-connect-sdk/guides/brand_guidelines","Destination":"/adobe-connect-sdk/guides/brand_guidelines/"},{"Source":"/adobe-connect-sdk/guides/brand_guidelines/index","Destination":"/adobe-connect-sdk/guides/brand_guidelines/"}],":type":"sheet"} -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Adobe Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language. 18 | * Being respectful of differing viewpoints and experiences. 19 | * Gracefully accepting constructive criticism. 20 | * Focusing on what is best for the community. 21 | * Showing empathy towards other community members. 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances. 27 | * Trolling, insulting/derogatory comments, and personal or political attacks. 28 | * Public or private harassment. 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission. 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting. 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at Grp-opensourceoffice@adobe.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [https://contributor-covenant.org/version/1/4][version]. 72 | 73 | [homepage]: https://contributor-covenant.org 74 | [version]: https://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /src/pages/guides/message_handling/index.md: -------------------------------------------------------------------------------- 1 | # Message Handling 2 | Learn how Custom Pods can communicate with other components of a room using Messages. 3 | 4 | ## Sending Messages 5 | 6 | Each participant loads their own instance of the pod you build. The documentation reference outlines all of the Methods, Events, and Properties available in the Custom Pod SDK. The core functionality is sending messages to other instances of the pod and listening for those messages from other pods. In this way, a custom pod can communicate with other instances of itself. 7 | 8 | There are two functions that enable this: 9 | 10 | - **dispatchSyncMessage** 11 | - **syncMessageReceived** 12 | 13 | **dispatchSyncMessage** sends messages to other pods. Those messages include: 14 | - A message `name` to differentiate it from other messages 15 | - A message `value` - the contents of the message. A payload that can be a string, boolean, array, object or other data type. 16 | - A boolean value, called `isDelta`, to indicate if it is a stateful message or not. (Defaults to `False` if not specified) 17 | - A boolean value, called `echoBack`, to indicate if the sender of the message should aslo receive the message. (Defaults to `False` if not specified). 18 | 19 | So, a typical way to send a message might be: 20 | 21 | 22 | 23 | #### Dispatching Sync Messages 24 | 25 | ```javascript 26 | customPodObject.dispatchSyncMessage( 27 | "update-note", 28 | "this is my new note text", 29 | false, 30 | false 31 | ); 32 | 33 | ``` 34 | By default, only hosts and presenters can send sync messages. To enable participants to send a specific sync messge, use the following syntax in your code for each of the message types they should be able to send: 35 | 36 | 37 | 38 | #### Allowing participants to dispatch Sync Messages 39 | 40 | ```javascript 41 | customPodObject.allowParticipantPublish( 42 | "update-note", 43 | true 44 | ); 45 | 46 | ``` 47 | 48 | ## Stateful vs Delta Messages 49 | 50 | To determine whether your message is a **Delta** message or a **Stateful** message, consider the following: 51 | - A stateful message reflects the entire state for this message name. When the pod is loaded by someone who joined late, only the last message will be received. 52 | - A delta message only reflects a part of the entire state. When the pod is loaded by someone who joined late, they will receive all of the delta messages for this message name. 53 | 54 | So for a chat application, the Sync Messages to set an option or show who is typing a message would be **stateful**, but each chat message would be a **delta** message. In general, the large majority of your messages will be stateful and `isDelta` should be `false`. 55 | 56 | ## Receiving Messages 57 | 58 | The pod you create can listen for messages sent by the Adobe Connect room as well as from other instances of itself. 59 | 60 | **syncMessageReceived** will listen for messages sent by other instances of the pod. It includes a payload with an object that includes the message name and message value sent from the **dispatchSyncMessage** call. You can use these values to synchronize your pod. 61 | 62 | 63 | 64 | #### Receiving Sync Messages from other pod instances 65 | 66 | ```javascript 67 | function syncMessageReceived(evt) { 68 | if (evt.msgNm ==="update-note") { 69 | document.getElementById("notes") += evt.msgVal 70 | } 71 | } 72 | ```` 73 | -------------------------------------------------------------------------------- /src/pages/guides/design_guidelines/index.md: -------------------------------------------------------------------------------- 1 | # Design Guidelines for Custom Pod Development 2 | 3 | ## Introduction 4 | 5 | The updated Adobe Connect pod UI is a complete redesign based on Spectrum 2, aimed at delivering a cleaner, more lightweight, and intuitive experience. It replaces the older blocky layout with modern visuals rounded corners, transparent and blurred backgrounds, and consolidated headers for better clarity and control. Interaction feedback is improved with clear hover and focus states, and the layout is optimized for touch devices. Accessibility has been significantly enhanced to meet WCAG standards. To ensure visual and functional consistency across the room, it’s recommended that all custom pods be developed using Spectrum 2 components, enabling seamless integration and synergy with the native pod experience. 6 | 7 | ## Design Philosophy 8 | 9 | The redesigned Adobe Connect pod UI is guided by the principles of Spectrum 2, Adobe’s unified design system. It emphasizes clarity, consistency, and adaptability across devices and user contexts. By adopting Spectrum 2, the UI achieves a modern, lightweight feel with accessible interactions, scalable components, and a cohesive visual language. To maintain synergy across the room, custom pods should also be developed using Spectrum 2 components, ensuring seamless integration and a unified user experience. 10 | 11 | 12 | [Read more on Spectrum 2](https://react-spectrum.adobe.com/s2/index.html?path=/) 13 | 14 | 15 | ## Pod Structure Overview 16 | 17 | To ensure consistency, usability, and visual harmony across all pods in Adobe Connect, we recommend structuring custom pods according to the updated pod architecture and Spectrum 2 design principles. Each pod may include: 18 | 19 | - Pod Controls in the header for essential pod-level actions, compact and consistent across pod types. 20 | 21 | - Content Controls placed contextually below the header, limited to four, logically grouped (left-first), and styled with icon+label buttons. 22 | 23 | - A Content Area that remains visually stable and responsive, with support for empty states using Spectrum Express illustrations. 24 | 25 | - A Pod Frame that subtly highlights on focus to indicate active collaboration zones. 26 | 27 | - Footer Controls for persistent input or navigation, anchored and unobtrusive. 28 | 29 | Below, you will find a few images to help you understand the pod structure better. Please note that this is pod structure is what we currently recommend you use on your pods to stay in line with the native pods, and thus provide a consistent experience to Adobe Connect users. 30 | 31 | 32 | 33 | 34 | ![Pod Navigations](pod_navigations_1.png) 35 | 36 | ![Pod Controls](pod_controls_1.png) 37 | 38 | ## Best practices 39 | 40 | When creating custom pods with the new UI framework, follow these guidelines to ensure consistency and a seamless experience within Connect rooms: 41 | 42 | - Use Spectrum 2 Components for UI Workflows. 43 | 44 | - Always prefer Spectrum 2 components from the open-source library for workflow-related UI (buttons, menus, dialogs, etc.). 45 | - This ensures visual consistency, accessibility, and behaviour alignment with in-built pods. 46 | - Avoid building custom UI elements unless Spectrum 2 does not cover the use case. 47 | 48 | - Leverage the Content Control Section for Navigation & Actions 49 | - Place content-related navigation and actions inside the content control section. 50 | - This keeps controls predictable and consistent across pods, helping users quickly adapt between in-built and custom pods. 51 | - Avoid scattering navigation or actions across the pod surface. 52 | 53 | - Avoid Explicit Background Colours 54 | - By default, pods get a white background with transparency and blur effects for focus and layering states. 55 | - Setting an explicit background colour can break this behaviour and feel inconsistent inside Connect rooms. 56 | - Only use background overrides when absolutely necessary (e.g., branding requirements), and test carefully in both focused and unfocused states. 57 | -------------------------------------------------------------------------------- /.github/scripts/get-path-prefix.js: -------------------------------------------------------------------------------- 1 | // This script retrieves the pathPrefix from the config.md file and validates it against the pathPrefix from devsite-paths.json. 2 | // It serves as an example for how to set up external javascript functions 3 | // outside workflow .yml files when they get too big or complex to keep them inline. 4 | 5 | // Documentation for the actions/github-script: 6 | // https://github.com/actions/github-script#run-a-separate-file 7 | 8 | const CONFIG_PATH = `./src/pages/config.md`; 9 | const DEVSITE_STAGE_HOST = `https://main--adp-devsite-stage--adobedocs.aem.page`; 10 | const DEVSITE_PROD_HOST = `https://main--adp-devsite--adobedocs.aem.live`; 11 | const DEVSITE_PATHNAME = `/franklin_assets/devsitepaths.json`; 12 | 13 | module.exports = async ({ core, isStage, isProd }) => { 14 | const fs = await require('fs'); 15 | if (!fs.existsSync(CONFIG_PATH)) { 16 | core.setFailed( 17 | `The site's config.md file is missing. 18 | 19 | To fix this, either create one in ./src/pages, or auto-generate one from the site's gatsby-config.md file by building navigation file.` 20 | ); 21 | return; 22 | } 23 | 24 | const string = fs.readFileSync(CONFIG_PATH).toString() ?? ""; 25 | const lines = string.split('\n'); 26 | 27 | // find the pathPrefix key 28 | const keyIndex = lines.findIndex(line => line.includes("pathPrefix:")); 29 | 30 | if (keyIndex < 0) { 31 | core.setFailed( 32 | `The pathPrefix in the site's config.md file is missing. 33 | 34 | To fix this, open your config.md file, and add it to the config object: 35 | 36 | - pathPrefix: 37 | ...` 38 | ); 39 | return; 40 | } 41 | 42 | // find the pathPrefix value 43 | const line = lines.slice(keyIndex + 1)?.find(line => line.trimStart().startsWith("-")) ?? ""; 44 | 45 | // remove whitespace at start, remove dash (i.e. first non-whitespace character), and remove whitespace at start and end 46 | const pathPrefix = line.trimStart().substring(1).trim(); 47 | 48 | if (!pathPrefix) { 49 | core.setFailed( 50 | `The pathPrefix in the site's config.md file is missing. 51 | 52 | To fix this, open your config.md file, and add it to the config object: 53 | 54 | - pathPrefix: 55 | - /commerce/frontend-core/ 56 | ...` 57 | ); 58 | } else if (pathPrefix === '/') { 59 | core.setFailed( 60 | `The pathPrefix in the site's config.md file is set to "/". This is not allowed. 61 | 62 | To fix this, change the pathPrefix to include a name that starts and ends with "/". 63 | 64 | For example: "/commerce/frontend - core/" 65 | 66 | This name identifies the site within the developer.adobe.com domain: 67 | https://developer.adobe.com/document-services/. 68 | ` 69 | ); 70 | } else if (!pathPrefix.startsWith('/') || !pathPrefix.endsWith('/')) { 71 | core.setFailed( 72 | `The pathPrefix in the site's config.md file does not start or end with "/". 73 | 74 | pathPrefix: "${pathPrefix}" 75 | 76 | To fix this, change the pathPrefix to include a name that starts and ends with "/". 77 | For example: "/document-services/" or "/commerce/cloud-tools/". 78 | 79 | This is required by convention because of the way we construct site URLs. 80 | For example: https://developer.adobe.com + /document-services/ + path/to/files/. 81 | ` 82 | ); 83 | } 84 | 85 | // TODO: devsitepaths pathPrefix currently do not have a trailing slash 86 | // will need to refactor all path prefix listings to include them 87 | // but for now checked with a popped trailing slash 88 | 89 | const poppedPathPrefix = pathPrefix.substring(0, pathPrefix.length-1); 90 | // must convert values to boolean from string 91 | if(isStage.toLowerCase() === 'true') { 92 | const stageEntries = await (await fetch(`${DEVSITE_STAGE_HOST}${DEVSITE_PATHNAME}`)).json(); 93 | const stageEntry = stageEntries?.data?.find(entry => entry.pathPrefix === poppedPathPrefix); 94 | 95 | if(!stageEntry) { 96 | core.setFailed( 97 | `The pathPrefix in the site's config.md file was not found in the STAGE gdrive's devsitepaths.json. 98 | 99 | pathPrefix from config.md: "${pathPrefix}" 100 | devsitepath.json location: "${DEVSITE_STAGE_HOST}/${DEVSITE_PATHNAME}" 101 | 102 | To fix this, make sure the pathPrefix listed in the config.md is in the devsitepath.json location. 103 | ` 104 | ); 105 | } 106 | } 107 | 108 | // must convert values to boolean from string 109 | if(isProd.toLowerCase() === 'true') { 110 | const prodEntries = await (await fetch(`${DEVSITE_PROD_HOST}${DEVSITE_PATHNAME}`)).json(); 111 | const prodEntry = prodEntries?.data?.find(entry => entry.pathPrefix === poppedPathPrefix); 112 | 113 | if(!prodEntry) { 114 | core.setFailed( 115 | `The pathPrefix in the site's config.md file was not found in the PROD gdrive's devsitepaths.json. 116 | 117 | pathPrefix from config.md: "${pathPrefix}" 118 | devsitepath.json location: "${DEVSITE_PROD_HOST}${DEVSITE_PATHNAME}" 119 | 120 | To fix this, make sure the pathPrefix listed in the config.md is in the devsitepath.json location. 121 | ` 122 | ); 123 | } 124 | } 125 | 126 | core.setOutput('path_prefix', poppedPathPrefix); 127 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2020 Adobe 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /static/petstore.json: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": "2.0", 3 | "info": { 4 | "description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.", 5 | "version": "1.0.6", 6 | "title": "Swagger Petstore", 7 | "termsOfService": "http://swagger.io/terms/", 8 | "contact": { "email": "apiteam@swagger.io" }, 9 | "license": { 10 | "name": "Apache 2.0", 11 | "url": "http://www.apache.org/licenses/LICENSE-2.0.html" 12 | } 13 | }, 14 | "host": "petstore.swagger.io", 15 | "basePath": "/v2", 16 | "tags": [ 17 | { 18 | "name": "pet", 19 | "description": "Everything about your Pets", 20 | "externalDocs": { 21 | "description": "Find out more", 22 | "url": "http://swagger.io" 23 | } 24 | }, 25 | { "name": "store", "description": "Access to Petstore orders" }, 26 | { 27 | "name": "user", 28 | "description": "Operations about user", 29 | "externalDocs": { 30 | "description": "Find out more about our store", 31 | "url": "http://swagger.io" 32 | } 33 | } 34 | ], 35 | "schemes": ["https", "http"], 36 | "paths": { 37 | "/pet/{petId}/uploadImage": { 38 | "post": { 39 | "tags": ["pet"], 40 | "summary": "uploads an image", 41 | "description": "", 42 | "operationId": "uploadFile", 43 | "consumes": ["multipart/form-data"], 44 | "produces": ["application/json"], 45 | "parameters": [ 46 | { 47 | "name": "petId", 48 | "in": "path", 49 | "description": "ID of pet to update", 50 | "required": true, 51 | "type": "integer", 52 | "format": "int64" 53 | }, 54 | { 55 | "name": "additionalMetadata", 56 | "in": "formData", 57 | "description": "Additional data to pass to server", 58 | "required": false, 59 | "type": "string" 60 | }, 61 | { 62 | "name": "file", 63 | "in": "formData", 64 | "description": "file to upload", 65 | "required": false, 66 | "type": "file" 67 | } 68 | ], 69 | "responses": { 70 | "200": { 71 | "description": "successful operation", 72 | "schema": { "$ref": "#/definitions/ApiResponse" } 73 | } 74 | }, 75 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 76 | } 77 | }, 78 | "/pet": { 79 | "post": { 80 | "tags": ["pet"], 81 | "summary": "Add a new pet to the store", 82 | "description": "", 83 | "operationId": "addPet", 84 | "consumes": ["application/json", "application/xml"], 85 | "produces": ["application/json", "application/xml"], 86 | "parameters": [ 87 | { 88 | "in": "body", 89 | "name": "body", 90 | "description": "Pet object that needs to be added to the store", 91 | "required": true, 92 | "schema": { "$ref": "#/definitions/Pet" } 93 | } 94 | ], 95 | "responses": { "405": { "description": "Invalid input" } }, 96 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 97 | }, 98 | "put": { 99 | "tags": ["pet"], 100 | "summary": "Update an existing pet", 101 | "description": "", 102 | "operationId": "updatePet", 103 | "consumes": ["application/json", "application/xml"], 104 | "produces": ["application/json", "application/xml"], 105 | "parameters": [ 106 | { 107 | "in": "body", 108 | "name": "body", 109 | "description": "Pet object that needs to be added to the store", 110 | "required": true, 111 | "schema": { "$ref": "#/definitions/Pet" } 112 | } 113 | ], 114 | "responses": { 115 | "400": { "description": "Invalid ID supplied" }, 116 | "404": { "description": "Pet not found" }, 117 | "405": { "description": "Validation exception" } 118 | }, 119 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 120 | } 121 | }, 122 | "/pet/findByStatus": { 123 | "get": { 124 | "tags": ["pet"], 125 | "summary": "Finds Pets by status", 126 | "description": "Multiple status values can be provided with comma separated strings", 127 | "operationId": "findPetsByStatus", 128 | "produces": ["application/json", "application/xml"], 129 | "parameters": [ 130 | { 131 | "name": "status", 132 | "in": "query", 133 | "description": "Status values that need to be considered for filter", 134 | "required": true, 135 | "type": "array", 136 | "items": { 137 | "type": "string", 138 | "enum": ["available", "pending", "sold"], 139 | "default": "available" 140 | }, 141 | "collectionFormat": "multi" 142 | } 143 | ], 144 | "responses": { 145 | "200": { 146 | "description": "successful operation", 147 | "schema": { 148 | "type": "array", 149 | "items": { "$ref": "#/definitions/Pet" } 150 | } 151 | }, 152 | "400": { "description": "Invalid status value" } 153 | }, 154 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 155 | } 156 | }, 157 | "/pet/findByTags": { 158 | "get": { 159 | "tags": ["pet"], 160 | "summary": "Finds Pets by tags", 161 | "description": "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", 162 | "operationId": "findPetsByTags", 163 | "produces": ["application/json", "application/xml"], 164 | "parameters": [ 165 | { 166 | "name": "tags", 167 | "in": "query", 168 | "description": "Tags to filter by", 169 | "required": true, 170 | "type": "array", 171 | "items": { "type": "string" }, 172 | "collectionFormat": "multi" 173 | } 174 | ], 175 | "responses": { 176 | "200": { 177 | "description": "successful operation", 178 | "schema": { 179 | "type": "array", 180 | "items": { "$ref": "#/definitions/Pet" } 181 | } 182 | }, 183 | "400": { "description": "Invalid tag value" } 184 | }, 185 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }], 186 | "deprecated": true 187 | } 188 | }, 189 | "/pet/{petId}": { 190 | "get": { 191 | "tags": ["pet"], 192 | "summary": "Find pet by ID", 193 | "description": "Returns a single pet", 194 | "operationId": "getPetById", 195 | "produces": ["application/json", "application/xml"], 196 | "parameters": [ 197 | { 198 | "name": "petId", 199 | "in": "path", 200 | "description": "ID of pet to return", 201 | "required": true, 202 | "type": "integer", 203 | "format": "int64" 204 | } 205 | ], 206 | "responses": { 207 | "200": { 208 | "description": "successful operation", 209 | "schema": { "$ref": "#/definitions/Pet" } 210 | }, 211 | "400": { "description": "Invalid ID supplied" }, 212 | "404": { "description": "Pet not found" } 213 | }, 214 | "security": [{ "api_key": [] }] 215 | }, 216 | "post": { 217 | "tags": ["pet"], 218 | "summary": "Updates a pet in the store with form data", 219 | "description": "", 220 | "operationId": "updatePetWithForm", 221 | "consumes": ["application/x-www-form-urlencoded"], 222 | "produces": ["application/json", "application/xml"], 223 | "parameters": [ 224 | { 225 | "name": "petId", 226 | "in": "path", 227 | "description": "ID of pet that needs to be updated", 228 | "required": true, 229 | "type": "integer", 230 | "format": "int64" 231 | }, 232 | { 233 | "name": "name", 234 | "in": "formData", 235 | "description": "Updated name of the pet", 236 | "required": false, 237 | "type": "string" 238 | }, 239 | { 240 | "name": "status", 241 | "in": "formData", 242 | "description": "Updated status of the pet", 243 | "required": false, 244 | "type": "string" 245 | } 246 | ], 247 | "responses": { "405": { "description": "Invalid input" } }, 248 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 249 | }, 250 | "delete": { 251 | "tags": ["pet"], 252 | "summary": "Deletes a pet", 253 | "description": "", 254 | "operationId": "deletePet", 255 | "produces": ["application/json", "application/xml"], 256 | "parameters": [ 257 | { 258 | "name": "api_key", 259 | "in": "header", 260 | "required": false, 261 | "type": "string" 262 | }, 263 | { 264 | "name": "petId", 265 | "in": "path", 266 | "description": "Pet id to delete", 267 | "required": true, 268 | "type": "integer", 269 | "format": "int64" 270 | } 271 | ], 272 | "responses": { 273 | "400": { "description": "Invalid ID supplied" }, 274 | "404": { "description": "Pet not found" } 275 | }, 276 | "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] 277 | } 278 | }, 279 | "/store/order": { 280 | "post": { 281 | "tags": ["store"], 282 | "summary": "Place an order for a pet", 283 | "description": "", 284 | "operationId": "placeOrder", 285 | "consumes": ["application/json"], 286 | "produces": ["application/json", "application/xml"], 287 | "parameters": [ 288 | { 289 | "in": "body", 290 | "name": "body", 291 | "description": "order placed for purchasing the pet", 292 | "required": true, 293 | "schema": { "$ref": "#/definitions/Order" } 294 | } 295 | ], 296 | "responses": { 297 | "200": { 298 | "description": "successful operation", 299 | "schema": { "$ref": "#/definitions/Order" } 300 | }, 301 | "400": { "description": "Invalid Order" } 302 | } 303 | } 304 | }, 305 | "/store/order/{orderId}": { 306 | "get": { 307 | "tags": ["store"], 308 | "summary": "Find purchase order by ID", 309 | "description": "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", 310 | "operationId": "getOrderById", 311 | "produces": ["application/json", "application/xml"], 312 | "parameters": [ 313 | { 314 | "name": "orderId", 315 | "in": "path", 316 | "description": "ID of pet that needs to be fetched", 317 | "required": true, 318 | "type": "integer", 319 | "maximum": 10, 320 | "minimum": 1, 321 | "format": "int64" 322 | } 323 | ], 324 | "responses": { 325 | "200": { 326 | "description": "successful operation", 327 | "schema": { "$ref": "#/definitions/Order" } 328 | }, 329 | "400": { "description": "Invalid ID supplied" }, 330 | "404": { "description": "Order not found" } 331 | } 332 | }, 333 | "delete": { 334 | "tags": ["store"], 335 | "summary": "Delete purchase order by ID", 336 | "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", 337 | "operationId": "deleteOrder", 338 | "produces": ["application/json", "application/xml"], 339 | "parameters": [ 340 | { 341 | "name": "orderId", 342 | "in": "path", 343 | "description": "ID of the order that needs to be deleted", 344 | "required": true, 345 | "type": "integer", 346 | "minimum": 1, 347 | "format": "int64" 348 | } 349 | ], 350 | "responses": { 351 | "400": { "description": "Invalid ID supplied" }, 352 | "404": { "description": "Order not found" } 353 | } 354 | } 355 | }, 356 | "/store/inventory": { 357 | "get": { 358 | "tags": ["store"], 359 | "summary": "Returns pet inventories by status", 360 | "description": "Returns a map of status codes to quantities", 361 | "operationId": "getInventory", 362 | "produces": ["application/json"], 363 | "parameters": [], 364 | "responses": { 365 | "200": { 366 | "description": "successful operation", 367 | "schema": { 368 | "type": "object", 369 | "additionalProperties": { "type": "integer", "format": "int32" } 370 | } 371 | } 372 | }, 373 | "security": [{ "api_key": [] }] 374 | } 375 | }, 376 | "/user/createWithArray": { 377 | "post": { 378 | "tags": ["user"], 379 | "summary": "Creates list of users with given input array", 380 | "description": "", 381 | "operationId": "createUsersWithArrayInput", 382 | "consumes": ["application/json"], 383 | "produces": ["application/json", "application/xml"], 384 | "parameters": [ 385 | { 386 | "in": "body", 387 | "name": "body", 388 | "description": "List of user object", 389 | "required": true, 390 | "schema": { 391 | "type": "array", 392 | "items": { "$ref": "#/definitions/User" } 393 | } 394 | } 395 | ], 396 | "responses": { "default": { "description": "successful operation" } } 397 | } 398 | }, 399 | "/user/createWithList": { 400 | "post": { 401 | "tags": ["user"], 402 | "summary": "Creates list of users with given input array", 403 | "description": "", 404 | "operationId": "createUsersWithListInput", 405 | "consumes": ["application/json"], 406 | "produces": ["application/json", "application/xml"], 407 | "parameters": [ 408 | { 409 | "in": "body", 410 | "name": "body", 411 | "description": "List of user object", 412 | "required": true, 413 | "schema": { 414 | "type": "array", 415 | "items": { "$ref": "#/definitions/User" } 416 | } 417 | } 418 | ], 419 | "responses": { "default": { "description": "successful operation" } } 420 | } 421 | }, 422 | "/user/{username}": { 423 | "get": { 424 | "tags": ["user"], 425 | "summary": "Get user by user name", 426 | "description": "", 427 | "operationId": "getUserByName", 428 | "produces": ["application/json", "application/xml"], 429 | "parameters": [ 430 | { 431 | "name": "username", 432 | "in": "path", 433 | "description": "The name that needs to be fetched. Use user1 for testing. ", 434 | "required": true, 435 | "type": "string" 436 | } 437 | ], 438 | "responses": { 439 | "200": { 440 | "description": "successful operation", 441 | "schema": { "$ref": "#/definitions/User" } 442 | }, 443 | "400": { "description": "Invalid username supplied" }, 444 | "404": { "description": "User not found" } 445 | } 446 | }, 447 | "put": { 448 | "tags": ["user"], 449 | "summary": "Updated user", 450 | "description": "This can only be done by the logged in user.", 451 | "operationId": "updateUser", 452 | "consumes": ["application/json"], 453 | "produces": ["application/json", "application/xml"], 454 | "parameters": [ 455 | { 456 | "name": "username", 457 | "in": "path", 458 | "description": "name that need to be updated", 459 | "required": true, 460 | "type": "string" 461 | }, 462 | { 463 | "in": "body", 464 | "name": "body", 465 | "description": "Updated user object", 466 | "required": true, 467 | "schema": { "$ref": "#/definitions/User" } 468 | } 469 | ], 470 | "responses": { 471 | "400": { "description": "Invalid user supplied" }, 472 | "404": { "description": "User not found" } 473 | } 474 | }, 475 | "delete": { 476 | "tags": ["user"], 477 | "summary": "Delete user", 478 | "description": "This can only be done by the logged in user.", 479 | "operationId": "deleteUser", 480 | "produces": ["application/json", "application/xml"], 481 | "parameters": [ 482 | { 483 | "name": "username", 484 | "in": "path", 485 | "description": "The name that needs to be deleted", 486 | "required": true, 487 | "type": "string" 488 | } 489 | ], 490 | "responses": { 491 | "400": { "description": "Invalid username supplied" }, 492 | "404": { "description": "User not found" } 493 | } 494 | } 495 | }, 496 | "/user/login": { 497 | "get": { 498 | "tags": ["user"], 499 | "summary": "Logs user into the system", 500 | "description": "", 501 | "operationId": "loginUser", 502 | "produces": ["application/json", "application/xml"], 503 | "parameters": [ 504 | { 505 | "name": "username", 506 | "in": "query", 507 | "description": "The user name for login", 508 | "required": true, 509 | "type": "string" 510 | }, 511 | { 512 | "name": "password", 513 | "in": "query", 514 | "description": "The password for login in clear text", 515 | "required": true, 516 | "type": "string" 517 | } 518 | ], 519 | "responses": { 520 | "200": { 521 | "description": "successful operation", 522 | "headers": { 523 | "X-Expires-After": { 524 | "type": "string", 525 | "format": "date-time", 526 | "description": "date in UTC when token expires" 527 | }, 528 | "X-Rate-Limit": { 529 | "type": "integer", 530 | "format": "int32", 531 | "description": "calls per hour allowed by the user" 532 | } 533 | }, 534 | "schema": { "type": "string" } 535 | }, 536 | "400": { "description": "Invalid username/password supplied" } 537 | } 538 | } 539 | }, 540 | "/user/logout": { 541 | "get": { 542 | "tags": ["user"], 543 | "summary": "Logs out current logged in user session", 544 | "description": "", 545 | "operationId": "logoutUser", 546 | "produces": ["application/json", "application/xml"], 547 | "parameters": [], 548 | "responses": { "default": { "description": "successful operation" } } 549 | } 550 | }, 551 | "/user": { 552 | "post": { 553 | "tags": ["user"], 554 | "summary": "Create user", 555 | "description": "This can only be done by the logged in user.", 556 | "operationId": "createUser", 557 | "consumes": ["application/json"], 558 | "produces": ["application/json", "application/xml"], 559 | "parameters": [ 560 | { 561 | "in": "body", 562 | "name": "body", 563 | "description": "Created user object", 564 | "required": true, 565 | "schema": { "$ref": "#/definitions/User" } 566 | } 567 | ], 568 | "responses": { "default": { "description": "successful operation" } } 569 | } 570 | } 571 | }, 572 | "securityDefinitions": { 573 | "api_key": { "type": "apiKey", "name": "api_key", "in": "header" }, 574 | "petstore_auth": { 575 | "type": "oauth2", 576 | "authorizationUrl": "https://petstore.swagger.io/oauth/authorize", 577 | "flow": "implicit", 578 | "scopes": { 579 | "read:pets": "read your pets", 580 | "write:pets": "modify pets in your account" 581 | } 582 | } 583 | }, 584 | "definitions": { 585 | "ApiResponse": { 586 | "type": "object", 587 | "properties": { 588 | "code": { "type": "integer", "format": "int32" }, 589 | "type": { "type": "string" }, 590 | "message": { "type": "string" } 591 | } 592 | }, 593 | "Category": { 594 | "type": "object", 595 | "properties": { 596 | "id": { "type": "integer", "format": "int64" }, 597 | "name": { "type": "string" } 598 | }, 599 | "xml": { "name": "Category" } 600 | }, 601 | "Pet": { 602 | "type": "object", 603 | "required": ["name", "photoUrls"], 604 | "properties": { 605 | "id": { "type": "integer", "format": "int64" }, 606 | "category": { "$ref": "#/definitions/Category" }, 607 | "name": { "type": "string", "example": "doggie" }, 608 | "photoUrls": { 609 | "type": "array", 610 | "xml": { "wrapped": true }, 611 | "items": { "type": "string", "xml": { "name": "photoUrl" } } 612 | }, 613 | "tags": { 614 | "type": "array", 615 | "xml": { "wrapped": true }, 616 | "items": { "xml": { "name": "tag" }, "$ref": "#/definitions/Tag" } 617 | }, 618 | "status": { 619 | "type": "string", 620 | "description": "pet status in the store", 621 | "enum": ["available", "pending", "sold"] 622 | } 623 | }, 624 | "xml": { "name": "Pet" } 625 | }, 626 | "Tag": { 627 | "type": "object", 628 | "properties": { 629 | "id": { "type": "integer", "format": "int64" }, 630 | "name": { "type": "string" } 631 | }, 632 | "xml": { "name": "Tag" } 633 | }, 634 | "Order": { 635 | "type": "object", 636 | "properties": { 637 | "id": { "type": "integer", "format": "int64" }, 638 | "petId": { "type": "integer", "format": "int64" }, 639 | "quantity": { "type": "integer", "format": "int32" }, 640 | "shipDate": { "type": "string", "format": "date-time" }, 641 | "status": { 642 | "type": "string", 643 | "description": "Order Status", 644 | "enum": ["placed", "approved", "delivered"] 645 | }, 646 | "complete": { "type": "boolean" } 647 | }, 648 | "xml": { "name": "Order" } 649 | }, 650 | "User": { 651 | "type": "object", 652 | "properties": { 653 | "id": { "type": "integer", "format": "int64" }, 654 | "username": { "type": "string" }, 655 | "firstName": { "type": "string" }, 656 | "lastName": { "type": "string" }, 657 | "email": { "type": "string" }, 658 | "password": { "type": "string" }, 659 | "phone": { "type": "string" }, 660 | "userStatus": { 661 | "type": "integer", 662 | "format": "int32", 663 | "description": "User Status" 664 | } 665 | }, 666 | "xml": { "name": "User" } 667 | } 668 | }, 669 | "externalDocs": { 670 | "description": "Find out more about Swagger", 671 | "url": "http://swagger.io" 672 | } 673 | } 674 | -------------------------------------------------------------------------------- /src/pages/sdk/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Adobe Connect - SDK Documentation Page 3 | description: This is the page of Adobe Connect SDK Documentation 4 | --- 5 | 6 | # SDK References 7 | 8 | Read through the SDK methods, properties, and events. 9 | 10 | ## Methods 11 | 12 | #### allowParticipantPublish (`msgName`, `allowFlag`) 13 | **Available since**: 10.8 14 | 15 | **Host Only** | This method will allow/block the participants from sending a sync event. 16 | 17 | 18 | | Param | Type | Description | 19 | | ------ | ------------------- | ------------ | 20 | | msgName | `string` | Name of the message for which the permission will be set | 21 | | allowFlag | `boolean` | If `true` then participants will be allowed | 22 | 23 | **Returns**: `Void` 24 | #### Example: 25 | 26 | #### allowParticipantPublish 27 | 28 | ```javascript 29 | customPodObject.allowParticipantPublish("name", true) 30 | ``` 31 | 32 | 33 | #### dispatchSyncMessage (`msgName`, `msgValue`, `isDelta`, `echoBack`) 34 | **Available since**: 10.0 35 | 36 | Method to send a sync message to other participants 37 | 38 | 39 | | Param | Type | Description | 40 | | ------ | ------------------- | ------------ | 41 | | msgName | `string` | Name of the message to be sent -- should be meaningful to the pod running on other participant's machines | 42 | | msgValue | `object` | The contents of the message to be sent, the format to be determined by your own custom pod | 43 | | isDelta | `boolean` | If `true`, then all of the events matching this message name will be sent to new particpants. If `false`, then only the last known event will be sent. | 44 | | echoBack | `boolean` | if `true`, then this instance of the custom pod will receive a corresponding sync message back, otherwise only the other participants will receive this message. | 45 | 46 | #### Example: 47 | 48 | #### dispatchSyncMessage 49 | 50 | ```javascript 51 | customPodObject.dispatchSyncMessage("name", ["John"], true, true) 52 | ``` 53 | 54 | 55 | #### getBreakoutRoomDetails (`breakoutId`) 56 | **Available since**: 11.0 57 | 58 | **Host Only** | This method will return an object with information about a breakout room 59 | 60 | | Param | Type | Description | 61 | |------------|----------|-------------| 62 | | breakoutId | `number` | Breakout room ID | 63 | 64 | #### Returns: 65 | 66 | `Object`: Object that has two values: Breakout Room ID and Breakout Room Name; returns `null` if a participant calls this function. 67 | 68 | #### Example: 69 | 70 | 71 | #### getBreakoutRoomDetails 72 | 73 | ```javascript 74 | let borObj = customPodObject.getBreakoutRoomDetails(1) 75 | let name = borObj.name 76 | let id = borObj.id 77 | ``` 78 | 79 | 80 | #### getBreakoutRoomsList () 81 | **Available since**: 11.0 82 | 83 | **Host Only** | This method will return the list of breakout rooms 84 | 85 | #### Returns: 86 | 87 | `Array`: Array that contains the list of breakout rooms object that contains room id and name, returns `null` if a participant calls this function. 88 | 89 | #### Example: 90 | 91 | 92 | #### getBreakoutRoomsList 93 | 94 | ```javascript 95 | let borList = customPodObject.getBreakoutRoomsList() 96 | let room1Name = borList[0].name 97 | let room1Id = borList[0].id 98 | ```` 99 | 100 | 101 | #### getMyBreakoutRoomDetails () 102 | **Available since**: 11.0 103 | 104 | This method will return the Object that contains the details of the bor in which calling user is currently in 105 | 106 | #### Returns: 107 | 108 | `Object`: name, id 109 | 110 | #### Example: 111 | 112 | #### getMyBreakoutRoomDetails 113 | 114 | ```javascript 115 | let myBorObj = customPodObject.getMyBreakoutRoomDetails() 116 | let borId = myBorObj.id 117 | let borName = myBorObj.name 118 | ```` 119 | 120 | 121 | #### getConfig () 122 | **Available since**: 10.0 123 | 124 | This method returns configuration of the meeting like accountId, isAddin, isWhiteBoardOn, etc. 125 | 126 | #### Returns: 127 | 128 | `Object`: configuration 129 | 130 | #### Example: 131 | 132 | #### getConfig 133 | 134 | ```javascript 135 | let data = customPodObject.getConfig(); 136 | data.accountId 137 | data.archiveDuration 138 | data.isAddin 139 | data.isArchive 140 | data.isBreakOutSession 141 | data.isCaughtUp 142 | data.isPointerOn 143 | data.isSecure 144 | data.isWhiteBoardOn 145 | data.language 146 | data.playState 147 | data.podTitle 148 | data.role 149 | data.roomSCOID 150 | data.url 151 | data.userID 152 | data.userName 153 | ```` 154 | 155 | 156 | #### getMeetingInfo () 157 | **Available since**: 10.0 158 | 159 | This method will return a meeting info object. 160 | 161 | #### Returns: 162 | 163 | `Object`: object that has accountId, scoId, lang, url. 164 | 165 | #### Example: 166 | 167 | 168 | #### getMeetingInfo 169 | 170 | ```javascript 171 | let data = customPodObject.getMeetingInfo() 172 | data.accountId 173 | data.lang 174 | data.url 175 | ```` 176 | 177 | 178 | #### getMyUserDetails () 179 | **Available since**: 10.0 180 | 181 | This method will return a user data object for the current user 182 | 183 | #### Returns: 184 | 185 | `Object`: object that has two properties - `message` and `data`. 186 | 187 | #### Example: 188 | 189 | 190 | #### getMyUserDetails 191 | 192 | ```javascript 193 | let myUserData = customPodObject.getMyUserDetails() 194 | myUserData.message // "Success" for live meeting and "Access Denied" for recording 195 | myUserData.data.name 196 | myUserData.data.fullName 197 | myUserData.data.role 198 | myUserData.data.id 199 | myUserData.data.status // this will be an array containing all the status set by this user 200 | ```` 201 | 202 | 203 | #### getPodInfo () 204 | **Available since**: 10.0 205 | 206 | This method will return a pod info object 207 | 208 | #### Returns: 209 | 210 | `Object`: object that has `podTitle`, `isWhiteBoardOn` 211 | 212 | #### Example: 213 | 214 | #### getPodInfo 215 | 216 | ```javascript 217 | let data = customPodObject.getPodInfo() 218 | data.isWhiteBoardOn 219 | data.podTitle 220 | ```` 221 | 222 | 223 | #### getUserDetails (`userID`) 224 | **Available since**: 10.0 225 | 226 | **Host Only** | This method will return a user data object, assuming that the user is a host and that a valid UserID is provided 227 | 228 | | Param | Type | Description | 229 | |--------|----------|--------------| 230 | | userID | `string` | ID of the user | 231 | 232 | #### Returns: 233 | 234 | `Object`: object with user details, return null if participant call this function 235 | 236 | #### Example: 237 | 238 | #### getUserDetails 239 | 240 | ```javascript 241 | let userData = customPodObject.getUserDetails(userId) 242 | userData.message // "Success" for live meeting and "Access Denied" for recording 243 | userData.data.breakoutId 244 | userData.data.breakoutRoomName 245 | userData.data.fullName 246 | userData.data.name 247 | userData.data.role 248 | ```` 249 | 250 | 251 | #### getUserList () 252 | **Available since**: 10.0 253 | 254 | This method will return the object that has userIds of all the users in the meeting 255 | 256 | #### Returns: 257 | 258 | `Object`: object that has two properties - `message` and `data`. 259 | 260 | #### Example: 261 | 262 | #### getUserList 263 | 264 | ```javascript 265 | let userListData = customPodObject.getUserList() 266 | userListData.message // "Success" for live meeting and "Access Denied" for recording 267 | userListData.data // Array containing userIds of the user present in meeting 268 | ```` 269 | 270 | 271 | #### isBreakOutSessionOn () 272 | **Available since**: 10.0 273 | 274 | This method will return a boolean that denotes whether Breakouts are started or not. 275 | 276 | #### Returns: 277 | 278 | `Boolean`: flag that denotes whether breakoutSession is started or not 279 | 280 | #### Example: 281 | 282 | #### isBreakOutSessionOn 283 | 284 | ```javascript 285 | let flag = customPodObject.isBreakOutSessionOn() 286 | ```` 287 | 288 | 289 | #### isWhiteBoardOn () 290 | **Available since**: 10.0 291 | 292 | This method will return a boolean that denotes whether white board is started or not. 293 | 294 | #### Returns: 295 | 296 | `Boolean`: flag that denotes whether whiteboard is started or not 297 | 298 | #### Example: 299 | 300 | #### isWhiteBoardOn 301 | 302 | ```javascript 303 | let flag = customPodObject.isWhiteBoardOn() 304 | ```` 305 | 306 | 307 | ### maximize (`show`) 308 | **Available since**: 10.8 309 | 310 | **Host Only** | This method will switch Custom Pod between maximize and minimize state 311 | 312 | | Param | Type | Description | 313 | |-------|----------|-------------| 314 | | show | `boolean`| | 315 | 316 | #### Returns: 317 | 318 | `Void` 319 | 320 | #### Example: 321 | 322 | 323 | #### maximize 324 | 325 | ```javascript 326 | customPodObject.maximize(true) // this will maximize the pod but only if function called from host side 327 | customPodObject.maximize(false) // this will restore the pod but only if function called from host side 328 | ```` 329 | 330 | 331 | #### podVisible (`showFlag`) 332 | **Available since**: 10.8 333 | 334 | This method will show/hide the sharePod in which custom pod is loaded 335 | 336 | | Param | Type | Description | 337 | |----------|-----------|-------------| 338 | | showFlag | `boolean` | | 339 | 340 | #### Returns: 341 | 342 | `Void` 343 | 344 | #### Example: 345 | 346 | 347 | #### podVisible 348 | 349 | ```javascript 350 | customPodObject.podVisible = true // to show the pod 351 | customPodObject.podVisible = false // to hide the pod 352 | ```` 353 | 354 | 355 | #### setMenuBarControlsVisibility (`showFlag`) 356 | **Available since**: 10.8 357 | 358 | This method will show/hide the app bar items 359 | 360 | | Param | Type | Description | 361 | |----------|-----------|-------------| 362 | | showFlag | `boolean` | | 363 | 364 | #### Returns: 365 | 366 | `Void` 367 | 368 | #### Example: 369 | 370 | 371 | #### setMenuBarControlsVisibility 372 | 373 | ```javascript 374 | customPodObject.setMenuBarControlsVisibility(true) // to show the app bar items 375 | customPodObject.setMenuBarControlsVisibility(false) // to hide the app bar items 376 | ```` 377 | 378 | 379 | #### setMyStatus (`status`) 380 | **Available since**: 10.8 381 | 382 | Allows user to set his own status. 383 | 384 | Accepted Status Values are: 385 | - `speechQuestion` : Raise Hand 386 | - `speechQuestionLower` : Lower Raised Hand 387 | - `speechAgree` : Agree 388 | - `speechDisagree` : Disagree 389 | - `speechAgreeClear` : Clear Agree or Disagree 390 | - `steppedAway` : Step Away 391 | - `stepIn` : Step In 392 | - `speechLouder` : Speak Louder 393 | - `speechQuieter` : Speak Softer 394 | - `speechFaster` : Speed Up 395 | - `speechSlower` : Slow Down 396 | - `speechLaughter` : Laughter 397 | - `speechApplause` : Applause 398 | - `clearStatus` : Clear Status 399 | 400 | | Param | Type | Description | 401 | |--------|----------|--------------| 402 | | status | `string` | statusValue | 403 | 404 | #### Returns: 405 | 406 | `Void` 407 | 408 | #### Example: 409 | 410 | 411 | #### setMyStatus 412 | 413 | ```javascript 414 | setMyStatus("speechQuestion") 415 | ```` 416 | 417 | 418 | #### setPodControlsVisibility (`showFlag`) 419 | **Available since**: 10.8 420 | 421 | This method will show/hide the pod menu items. 422 | 423 | | Param | Type | Description | 424 | |----------|-----------|-------------| 425 | | showFlag | `boolean` | | 426 | 427 | #### Returns: 428 | 429 | `Void` 430 | 431 | #### Example: 432 | 433 | 434 | #### setPodControlsVisibility 435 | 436 | ```javascript 437 | customPodObject.setPodControlsVisibility(true) // to show the pod options 438 | customPodObject.setPodControlsVisibility(false) // to hide the pod options 439 | ```` 440 | 441 | 442 | ## Properties 443 | 444 | #### `AGREE` 445 | 446 | **Type:** `string` 447 | 448 | **Available since:** 10.8 449 | 450 | **Description:** A String value that is used to set the "Agree" user status. 451 | 452 | 453 | #### `AGREE_DISAGREE_CLEAR` 454 | **Type:** `string` 455 | 456 | **Available since:** 10.8 457 | 458 | **Description:** A String value that is used to clear the Agree or disagree status. 459 | 460 | **Example:** 461 | ````javascript 462 | sdkobject.setMyStatus(sdkObject.AGREE_DISAGREE_CLEAR) 463 | ```` 464 | 465 | 466 | #### `APPLAUSE` 467 | **Type:** `string` 468 | 469 | **Available since:** 10.8 470 | 471 | **Description:** A String value that is used to set the "Applause" status in connect. 472 | 473 | 474 | #### `archiveDuration` 475 | **Type:** `number` 476 | 477 | **Available since:** 10.5 478 | 479 | **Description:** This specifies the duration of the recording. 480 | 481 | 482 | #### `BUILD_NO` 483 | 484 | **Type:** `string` 485 | 486 | **Available since:** 10.8 487 | 488 | **Description:** This String defaults to "2.0". 489 | 490 | 491 | #### `CLEAR_STATUS` 492 | 493 | **Type:** `string` 494 | 495 | **Available since:** 10.8 496 | 497 | **Description:** User status value used as an argument of setMyStatus function. This String is used to clear the status. 498 | 499 | 500 | #### `connectVersion` 501 | 502 | **Type:** `number` 503 | 504 | **Available since:** 10.0 505 | 506 | **Description:** A boolean that tells which version of connect you are using. 507 | 508 | 509 | #### `DATE` 510 | 511 | **Type:** `string` 512 | 513 | **Available since:** 11.0 514 | 515 | **Description:** This String value will give today's date. 516 | 517 | 518 | #### `DISAGREE` 519 | 520 | **Type:** `string` 521 | 522 | **Available since:** 10.8 523 | 524 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Disagree" status. 525 | 526 | 527 | #### `isSynced` 528 | 529 | **Type:** `number` 530 | 531 | **Available since:** 10.0 532 | 533 | **Description:** A boolean that tells whether share pod is Synced or not. 534 | 535 | 536 | #### `k_HOST` 537 | 538 | **Type:** `string` 539 | 540 | **Available since:** 10.8 541 | 542 | **Description:** A String value that denotes the host role in connect application. 543 | 544 | 545 | #### `k_PARTICIPANT` 546 | 547 | **Type:** `string` 548 | 549 | **Available since:** 10.8 550 | 551 | **Description:** A String value that denotes the participant role in connect application. 552 | 553 | 554 | #### `k_PRESENTER` 555 | 556 | **Type:** `string` 557 | 558 | **Available since:** 10.8 559 | 560 | **Description:** A String value that denotes the presenter role in connect application. 561 | 562 | 563 | #### `language` 564 | 565 | **Type:** `string` 566 | 567 | **Available since:** 10.8 568 | 569 | **Description:** A String value that denotes the language set in connect application. 570 | 571 | 572 | #### `LAUGHTER` 573 | 574 | **Type:** `string` 575 | 576 | **Available since:** 10.8 577 | 578 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Laughter" status. 579 | 580 | 581 | #### `LOWER_HAND` 582 | 583 | **Type:** `string` 584 | 585 | **Available since:** 10.8 586 | 587 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to clear "Raise Hand" status. 588 | 589 | 590 | #### `playState` 591 | 592 | **Type:** `string` 593 | 594 | **Available since:** 10.5 595 | 596 | **Description:** A String that specifies the playState of the recording. 597 | 598 | 599 | #### `podHeight` 600 | 601 | **Type:** `number` 602 | 603 | **Available since:** 10.8 604 | 605 | **Description:** A number that specifies the height of the pod containing the application. 606 | 607 | 608 | #### `podID` 609 | 610 | **Type:** `number` 611 | 612 | **Available since:** 11.0 613 | 614 | **Description:** A number that specifies the podId in which custom pod is loaded. 615 | 616 | 617 | #### `podMinHeight` 618 | 619 | **Type:** `number` 620 | 621 | **Available since:** 10.8 622 | 623 | **Description:** A number that specifies the minimum height of the pod containing the application. 624 | 625 | 626 | #### `podMinWidth` 627 | 628 | **Type:** `number` 629 | 630 | **Available since:** 10.8 631 | 632 | **Description:** A number that specifies the minimum width of the pod containing the application. 633 | 634 | 635 | 636 | #### `podWidth` 637 | 638 | **Type:** `number` 639 | 640 | **Available since:** 10.8 641 | 642 | **Description:** A number that specifies the width of the pod containing the application. 643 | 644 | 645 | #### `RAISE_HAND` 646 | 647 | **Type:** `string` 648 | 649 | **Available since:** 10.8 650 | 651 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Raise Hand" status. 652 | 653 | 654 | #### `SLOW_DOWN` 655 | 656 | **Type:** `string` 657 | 658 | **Available since:** 10.8 659 | 660 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Slow Down" status. 661 | 662 | 663 | #### `SPEAK_LOUDER` 664 | 665 | **Type:** `string` 666 | 667 | **Available since:** 10.8 668 | 669 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Speak Louder" status. 670 | 671 | 672 | #### `SPEAK_SOFTER` 673 | 674 | **Type:** `string` 675 | 676 | **Available since:** 10.8 677 | 678 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Speak Softer" status. 679 | 680 | 681 | #### `SPEED_UP` 682 | 683 | **Type:** `string` 684 | 685 | **Available since:** 10.8 686 | 687 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Speed Up" status. 688 | 689 | 690 | #### `STEP_AWAY` 691 | 692 | **Type:** `string` 693 | 694 | **Available since:** 10.8 695 | 696 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Step Away" status. 697 | 698 | 699 | #### `STEP_IN` 700 | 701 | **Type:** `string` 702 | 703 | **Available since:** 10.8 704 | 705 | **Description:** User status value used as an argument of setMyStatus function. A String value that is used to set the "Step In" status. 706 | 707 | 708 | #### `VERSION` 709 | 710 | **Type:** `string` 711 | 712 | **Available since:** 10.8 713 | 714 | **Description:** This String value that defaults to "2.0". 715 | 716 | 717 | ## Events 718 | 719 | #### caughtUp 720 | 721 | **Available since**: 10.0 722 | 723 | **Description**: Event that indicates that the caughtUp phase is complete, but also is an indication that it is now safe to send messages more freely to the Connect application. 724 | 725 | **Event Payload**: 726 | - `UNKNOWN` (Void) 727 | 728 | #### Example: 729 | ```javascript 730 | customPodObject.registerCallback("caughtUp", () => ( this.caughtUp() )); 731 | this.caughtUp(){ 732 | console.log("Here my event got caught I will put my logic here"); 733 | } 734 | ```` 735 | 736 | 737 | #### playStateChanged 738 | 739 | **Available since**: 10.5 740 | 741 | **Description**: [RECORDING]: When playStateChanged from play to pause or vice versa. 742 | 743 | **Event Payload**: 744 | - `event` (Object): this object has playState property 745 | 746 | #### Example: 747 | ```javascript 748 | customPodObject.registerCallback("playStateChanged", (evt) => ( this.playStateChanged(evt) )); 749 | this.roleChanged(evt){ 750 | evt.playState 751 | evt.type // 'playStateChanged' 752 | } 753 | ```` 754 | 755 | 756 | #### podClosed 757 | 758 | **Available since**: 11.0 759 | 760 | **Description**: When pod is hidden / closed. 761 | 762 | **Event Payload**: 763 | - `event` (Object): this object only contains event type 764 | 765 | #### Example: 766 | ```javascript 767 | customPodObject.registerCallback("podClosed", (evt) => ( this.podClosed(evt) )); 768 | this.podClosed(evt){ 769 | evt.type // 'sizeChanged' 770 | } 771 | ```` 772 | 773 | 774 | #### podTitleChanged 775 | 776 | **Available since**: 10.0 777 | 778 | **Description**: When title of pod in which custom pod is shared is changed. 779 | 780 | **Event Payload**: 781 | - `event` (Object): this object has podTitle as property that gives the new title 782 | 783 | #### Example: 784 | ```javascript 785 | customPodObject.registerCallback("podTitleChanged", (evt) => ( this.podTitleChanged(evt) )); 786 | this.podTitleChanged(evt){ 787 | evt.podTitle 788 | evt.type // 'podTitleChanged' 789 | } 790 | ```` 791 | 792 | 793 | #### pointerToggle 794 | 795 | **Available since**: 10.0 796 | 797 | **Description**: When state of pointer is toggled. 798 | 799 | **Event Payload**: 800 | - `event` (Object): this object has isPointerOn property 801 | 802 | #### Example: 803 | ```javascript 804 | customPodObject.registerCallback("pointerToggle", (evt) => ( this.pointerToggle(evt) )); 805 | this.pointerToggle(evt){ 806 | evt.isPointerOn 807 | evt.type // 'pointerToggle' 808 | } 809 | ```` 810 | 811 | 812 | #### roleChanged 813 | 814 | **Available since**: 10.0 815 | 816 | **Description**: When role of a user is changed. 817 | 818 | **Event Payload**: 819 | - `event` (Object): this object has type, newRole and userId as property. 820 | 821 | #### Example: 822 | ```javascript 823 | customPodObject.registerCallback("roleChanged", (evt) => ( this.roleChanged(evt) )); 824 | this.roleChanged(evt){ 825 | evt.newRole 826 | evt.type // 'roleChanged' 827 | evt.userId 828 | } 829 | ```` 830 | 831 | 832 | #### sizeChanged 833 | 834 | **Available since**: 11.0 835 | 836 | **Description**: When pod Size is Changed. 837 | 838 | **Event Payload**: 839 | - `event` (Object): this object has updated width and height as property 840 | 841 | #### Example: 842 | ```javascript 843 | customPodObject.registerCallback("sizeChanged", (evt) => ( this.sizeChanged(evt) )); 844 | this.sizeChanged(evt){ 845 | evt.width 846 | evt.height 847 | evt.type // 'sizeChanged' 848 | } 849 | ```` 850 | 851 | 852 | #### syncMessageReceived 853 | 854 | **Available since**: 10.0 855 | 856 | **Description**: When sync messages are received. 857 | 858 | **Event Payload**: 859 | - `event` (Object): this object has msgNm and msgVal 860 | 861 | #### Example: 862 | ```javascript 863 | customPodObject.registerCallback("syncMessageReceived", (evt) => ( this.syncMessageReceived(evt) )); 864 | this.syncMessageReceived(evt){ 865 | evt.isDelta 866 | evt.msgNm 867 | evt.msgVal 868 | evt.type // 'syncMessageReceived' 869 | evt.uID // userId of the user sending the sync message 870 | } 871 | ```` 872 | 873 | 874 | #### syncModeChanged 875 | 876 | **Available since**: 10.0 877 | 878 | **Description**: When Sync Mode of share pod is changed. 879 | 880 | **Event Payload**: 881 | - `event` (Object): this object has two properties didISync and isSynced 882 | 883 | #### Example: 884 | ```javascript 885 | customPodObject.registerCallback("syncModeChanged", (evt) => ( this.syncModeChanged(evt) )); 886 | this.syncModeChanged(evt){ 887 | evt.didISync 888 | evt.isSynced 889 | evt.type // 'syncModeChanged' 890 | } 891 | ```` 892 | 893 | 894 | #### userDetailsChanged 895 | 896 | **Available since**: 10.0 897 | 898 | **Description**: When user details get changed such as name of the user is changed. 899 | 900 | **Event Payload**: 901 | - `event` (Object): this object has type property that denotes the type of the event, fullName and userId of the user 902 | 903 | #### Example: 904 | ```javascript 905 | customPodObject.registerCallback("userDetailsChanged", (evt) => ( this.userDetailsChanged(evt) )); 906 | this.userDetailsChanged(evt){ 907 | evt.fullName 908 | evt.name 909 | evt.type // 'userDetailsChanged' 910 | evt.userId 911 | } 912 | ```` 913 | 914 | 915 | #### userJoined 916 | 917 | **Available since**: 10.0 918 | 919 | **Description**: Event fired when user enters the meeting. 920 | 921 | **Event Payload**: 922 | - `event` (Object): this object has user property that holds details of the user joined and type property that shows type of event 923 | 924 | #### Example: 925 | ```javascript 926 | customPodObject.registerCallback("userJoined", (evt) => ( this.userJoined(evt) )); 927 | this.userJoined(evt){ 928 | evt.type // 'userJoined' 929 | evt.user.breakoutId 930 | evt.user.breakoutRoomName 931 | evt.user.fullName 932 | evt.user.id 933 | evt.user.name 934 | evt.user.role 935 | } 936 | ```` 937 | 938 | 939 | #### userLeft 940 | 941 | **Available since**: 10.0 942 | 943 | **Description**: When user joins the meeting. 944 | 945 | **Event Payload**: 946 | - `event` (Object): this object has type property and userId property 947 | 948 | #### Example: 949 | ```javascript 950 | customPodObject.registerCallback("userLeft", (evt) => ( this.userLeft(evt) )); 951 | this.userLeft(evt){ 952 | evt.type // "userLeft" 953 | evt.userID 954 | } 955 | ```` 956 | 957 | 958 | #### userStatusChanged 959 | 960 | **Available since**: 10.0 961 | 962 | **Description**: When user status gets changed. 963 | 964 | **Event Payload**: 965 | - `event` (Object): this object has userId and status as its property 966 | 967 | #### Example: 968 | ```javascript 969 | customPodObject.registerCallback("userStatusChanged", (evt) => ( this.userStatusChanged(evt) )); 970 | this.userStatusChanged(evt){ 971 | evt.type // 'userStatusChanged' 972 | evt.status // Array containing all the status of this user 973 | evt.userId 974 | } 975 | ```` 976 | 977 | 978 | #### whiteBoardToggle 979 | 980 | **Available since**: 10.0 981 | 982 | **Description**: When state of whiteboard is toggled. 983 | 984 | **Event Payload**: 985 | - `event` (Object): this object has isWhiteBoardOn property 986 | 987 | #### Example: 988 | ```javascript 989 | customPodObject.registerCallback("whiteBoardToggle", (evt) => ( this.whiteBoardToggle(evt) )); 990 | this.whiteBoardToggle(evt){ 991 | evt.isWhiteBoardOn 992 | evt.type // 'whiteBoardToggle' 993 | } 994 | ```` 995 | 996 | --------------------------------------------------------------------------------