diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 2a2c3bb31..ac225d765 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -39,5 +39,5 @@ jobs: - run: npm run compile - run: npm run slice - run: npm run validate:compiled - - run: npm run sdks + - run: npm run sdk - run: npm run test diff --git a/.github/workflows/run-standalone-mfos-tests.yml b/.github/workflows/run-standalone-mfos-tests.yml index 675202521..7560c4f02 100644 --- a/.github/workflows/run-standalone-mfos-tests.yml +++ b/.github/workflows/run-standalone-mfos-tests.yml @@ -14,21 +14,21 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Run tests and create assets - env: - EVENT_NAME: ${{ github.event_name }} - GITHUB_REF: ${{ github.ref }} - PR_HEAD_REF: ${{ github.event.pull_request.head.ref }} - INTENT: ${{ secrets.INTENT }} - run: | - ./.github/workflows/utils.sh runTests + # - name: Run tests and create assets + # env: + # EVENT_NAME: ${{ github.event_name }} + # GITHUB_REF: ${{ github.ref }} + # PR_HEAD_REF: ${{ github.event.pull_request.head.ref }} + # INTENT: ${{ secrets.INTENT }} + # run: | + # ./.github/workflows/utils.sh runTests - - name: Upload report.json as an artifact - uses: actions/upload-artifact@v2 - with: - name: report - path: ${{ github.workspace }}/report + # - name: Upload report.json as an artifact + # uses: actions/upload-artifact@v2 + # with: + # name: report + # path: ${{ github.workspace }}/report - - name: Get results from report.json - run: | - ./.github/workflows/utils.sh getResults \ No newline at end of file + # - name: Get results from report.json + # run: | + # ./.github/workflows/utils.sh getResults \ No newline at end of file diff --git a/README.md b/README.md index ed0fcaaae..6d63e22e0 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,4 @@ title: Firebolt APIs Firebolt APIs are defined by [OpenRPC schemas](https://spec.open-rpc.org). The schemas are used to generate SDK and Documentation artifacts. + diff --git a/package-lock.json b/package-lock.json index d749e0c1a..fb990c50d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@firebolt-js/sdks", - "version": "1.2.0-next.4", + "version": "2.0.0-next.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@firebolt-js/sdks", - "version": "1.2.0-next.4", + "version": "2.0.0-next.4", "license": "Apache-2.0", "workspaces": [ "src/sdks/core", @@ -19,7 +19,7 @@ "devDependencies": { "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.3", - "@firebolt-js/openrpc": "3.0.0-next.4", + "@firebolt-js/openrpc": "../firebolt-openrpc", "@firebolt-js/schemas": "2.0.0", "@saithodev/semantic-release-backmerge": "^3.2.0", "@semantic-release/changelog": "^6.0.1", @@ -37,137 +37,88 @@ "typescript": "^4.6.4" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "../firebolt-openrpc": { + "version": "3.0.0-next.4", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "Apache-2.0", + "dependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "array.prototype.groupby": "^1.1.0", + "crocks": "^0.12.4", + "deepmerge": "^4.2.2", + "fs-extra": "^10.1.0", + "highland": "^2.13.5", + "mkdirp": "^0.5.6", + "node-fetch": "^3.2.10", + "nopt": "^5.0.0", + "util": "^0.12.4" + }, + "bin": { + "firebolt-openrpc": "src/cli.mjs" + }, + "devDependencies": { + "@commitlint/cli": "^17.1.2", + "@commitlint/config-conventional": "^17.1.0", + "@semantic-release/changelog": "^6.0.1", + "@semantic-release/git": "^10.0.1", + "@semantic-release/npm": "^9.0.1", + "husky": "^8.0.1", + "jest": "^27.3.1", + "semantic-release": "^19.0.5" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -198,14 +149,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -213,14 +164,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -238,62 +189,66 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -303,88 +258,89 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -431,15 +387,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -462,9 +409,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -621,12 +568,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -636,34 +583,34 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -671,13 +618,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -750,15 +697,15 @@ } }, "node_modules/@commitlint/config-validator/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -1075,95 +1022,8 @@ "link": true }, "node_modules/@firebolt-js/openrpc": { - "version": "3.0.0-next.4", - "resolved": "https://registry.npmjs.org/@firebolt-js/openrpc/-/openrpc-3.0.0-next.4.tgz", - "integrity": "sha512-Q3GZpaA2Gmhx5UOh7cOMpDjZZtbutVfTUUis0FrOKceVMVllRhHz/XeqZrpmKo4EX0hn4OPWOmVek34WO68jQg==", - "dev": true, - "dependencies": { - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "array.prototype.groupby": "^1.1.0", - "crocks": "^0.12.4", - "deepmerge": "^4.2.2", - "fs-extra": "^10.1.0", - "highland": "^2.13.5", - "mkdirp": "^0.5.6", - "node-fetch": "^3.2.10", - "nopt": "^5.0.0", - "util": "^0.12.4" - }, - "bin": { - "firebolt-openrpc": "src/cli.mjs" - } - }, - "node_modules/@firebolt-js/openrpc/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/@firebolt-js/openrpc/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@firebolt-js/openrpc/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@firebolt-js/openrpc/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@firebolt-js/openrpc/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/@firebolt-js/openrpc/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } + "resolved": "../firebolt-openrpc", + "link": true }, "node_modules/@firebolt-js/schemas": { "version": "2.0.0", @@ -1177,15 +1037,15 @@ } }, "node_modules/@firebolt-js/schemas/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -1581,32 +1441,32 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1619,9 +1479,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1673,16 +1533,16 @@ } }, "node_modules/@octokit/core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", - "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -1691,13 +1551,12 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.2.tgz", - "integrity": "sha512-qhKW8YLIi+Kmc92FQUFGr++DYtkx/1fBv+Thua6baqnjnOsgBYJDCvWZR1YcINuHGOEQt416WOfE+A/oG60NBQ==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, "dependencies": { - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1705,13 +1564,13 @@ } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1719,24 +1578,39 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.2.tgz", - "integrity": "sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.2.tgz", - "integrity": "sha512-euDbNV6fxX6btsCDnZoZM4vw3zO1nj1Z7TskHAulO6mZ9lHoFTpwll6farf+wh31mlBabgU81bBYdflp0GLVAQ==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", "dev": true, "dependencies": { - "@octokit/types": "^12.1.1" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/plugin-retry": { @@ -1756,13 +1630,28 @@ "@octokit/core": ">=5" } }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/plugin-throttling": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.2.tgz", - "integrity": "sha512-oFba+ioR6HGb0fgqxMta7Kpk/MdffUTuUxNY856l1nXPvh7Qggp8w4AksRx1SDA8SGd+4cbrpkY4k1J/Xz8nZQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", "dev": true, "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" }, "engines": { @@ -1772,16 +1661,30 @@ "@octokit/core": "^5.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/request": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", - "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1789,12 +1692,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -1803,12 +1706,12 @@ } }, "node_modules/@octokit/types": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.1.1.tgz", - "integrity": "sha512-qnJTldJ1NyGT5MTsCg/Zi+y2IFHZ1Jo5+njNCjJ9FcainV7LjuHgmB697kA0g4MjZeDAJsM3B45iqCVsCLVFZg==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^19.0.2" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@pnpm/config.env-replace": { @@ -2013,9 +1916,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.2.1.tgz", - "integrity": "sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.2.6.tgz", + "integrity": "sha512-shi+Lrf6exeNZF+sBhK+P011LSbhmIAoUEgEY6SsxF8irJ+J2stwI5jkyDQ+4gzYyDImzV6LCKdYB9FXnQRWKA==", "dev": true, "dependencies": { "@octokit/core": "^5.0.0", @@ -2026,13 +1929,13 @@ "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", - "globby": "^13.1.4", + "globby": "^14.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "issue-parser": "^6.0.0", "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", + "mime": "^4.0.0", + "p-filter": "^4.0.0", "url-join": "^5.0.0" }, "engines": { @@ -2052,9 +1955,9 @@ } }, "node_modules/@semantic-release/github/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -2094,27 +1997,59 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/github/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "node_modules/@semantic-release/github/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { "node": ">= 14" @@ -2132,6 +2067,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@semantic-release/github/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/npm": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", @@ -2222,6 +2181,18 @@ "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -2250,9 +2221,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true }, "node_modules/@tsconfig/node12": { @@ -2274,9 +2245,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", - "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -2287,18 +2258,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", - "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", - "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2306,42 +2277,42 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", - "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", - "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", - "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", - "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" @@ -2365,9 +2336,9 @@ "dev": true }, "node_modules/@types/minimist": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.4.tgz", - "integrity": "sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, "node_modules/@types/node": { @@ -2377,9 +2348,9 @@ "dev": true }, "node_modules/@types/normalize-package-data": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz", - "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/parse5": { @@ -2395,36 +2366,37 @@ "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/tough-cookie": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", - "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.30", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.30.tgz", - "integrity": "sha512-3SJLzYk3yz3EgI9I8OLoH06B3PdXIoU2imrBZzaGqUtUXf5iUNDtmAfCGuQrny1bnmyjh/GM/YNts6WK5jR5Rw==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", - "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, "node_modules/abbrev": { @@ -2437,9 +2409,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2547,15 +2519,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -2654,13 +2626,16 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2673,15 +2648,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -2736,32 +2712,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.groupby": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.groupby/-/array.prototype.groupby-1.1.0.tgz", - "integrity": "sha512-p+QtvmnNEBqajQWLG3kPls8cLPBfJgvayzc/qplsX8Vchtevtq+TR2gyav5xs5h+mdUjfgOvYoCdTsVxu3b5sA==", - "deprecated": "This proposal has been altered; please use https://npmjs.com/object.groupby instead!", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.1" - } - }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -2796,10 +2759,13 @@ "dev": true }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2927,12 +2893,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2945,9 +2911,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -2964,10 +2930,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -2992,14 +2958,19 @@ "dev": true }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3041,9 +3012,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "version": "1.0.30001632", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz", + "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==", "dev": true, "funding": [ { @@ -3114,9 +3085,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true }, "node_modules/clean-stack": { @@ -3129,9 +3100,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -3375,12 +3346,6 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/crocks": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/crocks/-/crocks-0.12.4.tgz", - "integrity": "sha512-paln6xJUrR9e/OWMFsyTi4dLyr+q99C5f7PQbGgSDHtwsfW0sCNZvnpHzvniI2dAE0uoBgeIP1Ukmme8Z0HxxA==", - "dev": true - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3437,15 +3402,6 @@ "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", @@ -3473,6 +3429,57 @@ "node": ">=12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -3483,9 +3490,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -3570,17 +3577,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -3622,26 +3632,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/del/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -3727,6 +3717,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { "webidl-conversions": "^7.0.0" @@ -3757,9 +3748,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.576", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz", - "integrity": "sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==", + "version": "1.4.796", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", + "integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==", "dev": true }, "node_modules/emittery": { @@ -3863,9 +3854,9 @@ } }, "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -3926,50 +3917,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -3978,15 +3976,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -4019,24 +4050,21 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/escodegen": { @@ -4185,9 +4213,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -4798,9 +4826,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4815,29 +4843,6 @@ "bser": "2.1.1" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, "node_modules/figures": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", @@ -4854,6 +4859,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4867,9 +4884,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -4910,9 +4927,9 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { "flatted": "^3.2.9", @@ -4920,13 +4937,13 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -4952,22 +4969,10 @@ "node": ">= 6" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -4975,9 +4980,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -5069,16 +5074,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5117,13 +5126,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5188,6 +5198,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5238,12 +5249,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5253,31 +5265,20 @@ } }, "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { + "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5359,21 +5360,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -5395,12 +5396,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -5410,9 +5411,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -5421,15 +5422,6 @@ "node": ">= 0.4" } }, - "node_modules/highland": { - "version": "2.13.5", - "resolved": "https://registry.npmjs.org/highland/-/highland-2.13.5.tgz", - "integrity": "sha512-dn2flPapIIAa4BtkB2ahjshg8iSJtrJtdhEb9/oiOrS5HMQTR/GuhFpqJ+11YBdtnl3AwWKvbZd1Uxr8uAmA7A==", - "dev": true, - "dependencies": { - "util-deprecate": "^1.0.2" - } - }, "node_modules/hook-std": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", @@ -5554,9 +5546,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -5640,6 +5632,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -5659,12 +5652,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -5688,14 +5681,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -5704,20 +5697,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5776,6 +5755,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -5818,21 +5812,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5846,9 +5825,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -5917,15 +5896,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -5949,12 +5919,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6015,12 +5988,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6082,9 +6055,9 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.1.tgz", - "integrity": "sha512-opCrKqbthmq3SKZ10mFMQG9dk3fTa3quaOLD35kJa5ejwZHd9xAr+kLuziiZz2cG32s4lMZxNdmdcEQnTDP4+g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -6144,9 +6117,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -7226,13 +7199,10 @@ } }, "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, "engines": { "node": ">=14.16" }, @@ -7252,18 +7222,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/marked-terminal/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -7317,12 +7275,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -7330,15 +7288,18 @@ } }, "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz", + "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], "bin": { - "mime": "cli.js" + "mime": "bin/cli.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16" } }, "node_modules/mime-db": { @@ -7463,25 +7424,6 @@ "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", "dev": true }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -7491,24 +7433,6 @@ "lodash": "^4.17.21" } }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7516,15 +7440,15 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "dependencies": { "abbrev": "^2.0.0" @@ -10151,9 +10075,9 @@ "license": "ISC" }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", "dev": true }, "node_modules/object-assign": { @@ -10184,13 +10108,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -10202,28 +10126,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10233,27 +10158,31 @@ } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10287,17 +10216,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -10316,15 +10245,15 @@ } }, "node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "dependencies": { - "p-map": "^5.1.0" + "p-map": "^7.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10370,58 +10299,12 @@ } }, "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", + "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10524,9 +10407,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -10782,6 +10665,15 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10792,9 +10684,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -10973,9 +10865,9 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/read-pkg": { @@ -11145,14 +11037,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -11282,6 +11175,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -11317,13 +11211,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -11347,15 +11241,18 @@ "dev": true }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11623,14 +11520,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", @@ -11675,9 +11584,9 @@ } }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "dependencies": { "lru-cache": "^10.0.1" @@ -11748,18 +11657,18 @@ } }, "node_modules/semantic-release/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/semantic-release/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -11781,9 +11690,9 @@ } }, "node_modules/semantic-release/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -11802,9 +11711,9 @@ } }, "node_modules/semantic-release/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", + "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", "dev": true, "dependencies": { "hosted-git-info": "^7.0.0", @@ -11817,9 +11726,9 @@ } }, "node_modules/semantic-release/node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "engines": { "node": ">=14.16" @@ -11829,9 +11738,9 @@ } }, "node_modules/semantic-release/node_modules/npm": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.0.tgz", - "integrity": "sha512-wkd7sjz4KmdmddYQcd0aTP73P1cEuPlekeulz4jTDeMVx/Zo5XZ5KQ1z3eUzV3Q/WZpEO0NJXTrD5FNFe6fhCA==", + "version": "9.9.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.3.tgz", + "integrity": "sha512-Z1l+rcQ5kYb17F3hHtO601arEpvdRYnCLtg8xo3AGtyj3IthwaraEOexI9903uANkifFbqHC8hT53KIrozWg8A==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -11916,21 +11825,21 @@ "@npmcli/run-script": "^6.0.2", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^17.1.3", + "cacache": "^17.1.4", "chalk": "^5.3.0", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", + "fs-minipass": "^3.0.3", + "glob": "^10.3.10", "graceful-fs": "^4.2.11", "hosted-git-info": "^6.1.1", "ini": "^4.1.1", "init-package-json": "^5.0.0", "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", + "json-parse-even-better-errors": "^3.0.1", "libnpmaccess": "^7.0.2", "libnpmdiff": "^5.0.20", "libnpmexec": "^6.0.4", @@ -11938,20 +11847,20 @@ "libnpmhook": "^9.0.3", "libnpmorg": "^5.0.4", "libnpmpack": "^5.0.20", - "libnpmpublish": "^7.5.0", + "libnpmpublish": "^7.5.1", "libnpmsearch": "^6.0.2", "libnpmteam": "^5.0.3", "libnpmversion": "^4.0.2", "make-fetch-happen": "^11.1.1", "minimatch": "^9.0.3", - "minipass": "^5.0.0", + "minipass": "^7.0.4", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^9.4.0", + "node-gyp": "^9.4.1", "nopt": "^7.2.0", "normalize-package-data": "^5.0.0", "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.2.0", + "npm-install-checks": "^6.3.0", "npm-package-arg": "^10.1.0", "npm-pick-manifest": "^8.0.2", "npm-profile": "^7.0.1", @@ -11964,12 +11873,12 @@ "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", "read": "^2.1.0", - "semver": "^7.5.4", + "semver": "^7.6.0", "sigstore": "^1.9.0", "spdx-expression-parse": "^3.0.1", - "ssri": "^10.0.4", + "ssri": "^10.0.5", "supports-color": "^9.4.0", - "tar": "^6.1.15", + "tar": "^6.2.0", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", @@ -11986,9 +11895,9 @@ } }, "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -12010,6 +11919,12 @@ "node": ">=0.1.90" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/semantic-release/node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -12084,7 +11999,7 @@ "license": "ISC" }, "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.5.0", + "version": "6.5.1", "dev": true, "inBundle": true, "license": "ISC", @@ -12097,7 +12012,7 @@ "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", + "@npmcli/query": "^3.1.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", "cacache": "^17.0.4", @@ -12131,13 +12046,13 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/config": { - "version": "6.4.0", + "version": "6.4.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "ini": "^4.1.0", "nopt": "^7.0.0", "proc-log": "^3.0.0", @@ -12238,6 +12153,19 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", "dev": true, @@ -12287,7 +12215,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -12412,18 +12340,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/semantic-release/node_modules/npm/node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -12437,13 +12353,11 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", + "version": "4.5.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -12500,14 +12414,10 @@ "license": "MIT" }, "node_modules/semantic-release/node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -12518,28 +12428,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/semantic-release/node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/semantic-release/node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -12571,30 +12461,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/semantic-release/node_modules/npm/node_modules/builtins": { "version": "5.0.1", "dev": true, @@ -12605,7 +12471,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/cacache": { - "version": "17.1.3", + "version": "17.1.4", "dev": true, "inBundle": true, "license": "ISC", @@ -12614,7 +12480,7 @@ "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -12649,7 +12515,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", + "version": "4.0.0", "dev": true, "funding": [ { @@ -12722,7 +12588,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -12870,17 +12736,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/semantic-release/node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/semantic-release/node_modules/npm/node_modules/diff": { - "version": "5.1.0", + "version": "5.2.0", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -12925,24 +12782,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/semantic-release/node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/semantic-release/node_modules/npm/node_modules/events": { - "version": "3.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/semantic-release/node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "dev": true, @@ -12975,12 +12814,12 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.2", + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -12993,10 +12832,13 @@ "license": "ISC" }, "node_modules/semantic-release/node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", + "version": "1.1.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/semantic-release/node_modules/npm/node_modules/gauge": { "version": "5.0.1", @@ -13018,19 +12860,19 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/glob": { - "version": "10.2.7", + "version": "10.3.10", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -13045,24 +12887,24 @@ "inBundle": true, "license": "ISC" }, - "node_modules/semantic-release/node_modules/npm/node_modules/has": { - "version": "1.0.3", + "node_modules/semantic-release/node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/semantic-release/node_modules/npm/node_modules/hasown": { + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/semantic-release/node_modules/npm/node_modules/hosted-git-info": { "version": "6.1.1", "dev": true, @@ -13130,28 +12972,8 @@ "node": ">=0.10.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/semantic-release/node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", + "version": "6.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -13180,6 +13002,12 @@ "node": ">=8" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/semantic-release/node_modules/npm/node_modules/inflight": { "version": "1.0.6", "dev": true, @@ -13223,11 +13051,24 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/ip": { - "version": "2.0.0", + "node_modules/semantic-release/node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" }, "node_modules/semantic-release/node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", @@ -13251,12 +13092,12 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/is-core-module": { - "version": "2.12.1", + "version": "2.13.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13284,7 +13125,7 @@ "license": "ISC" }, "node_modules/semantic-release/node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", + "version": "2.3.6", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", @@ -13301,8 +13142,14 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/semantic-release/node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -13341,7 +13188,7 @@ "license": "MIT" }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -13354,7 +13201,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmdiff": { - "version": "5.0.20", + "version": "5.0.21", "dev": true, "inBundle": true, "license": "ISC", @@ -13374,14 +13221,14 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.4", + "version": "6.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/arborist": "^6.5.0", "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", + "ci-info": "^4.0.0", "npm-package-arg": "^10.1.0", "npmlog": "^7.0.1", "pacote": "^15.0.8", @@ -13396,7 +13243,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmfund": { - "version": "4.2.1", + "version": "4.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -13408,7 +13255,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", + "version": "9.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -13421,7 +13268,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", + "version": "5.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -13434,7 +13281,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.20", + "version": "5.0.21", "dev": true, "inBundle": true, "license": "ISC", @@ -13449,12 +13296,12 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.0", + "version": "7.5.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ci-info": "^3.6.1", + "ci-info": "^4.0.0", "normalize-package-data": "^5.0.0", "npm-package-arg": "^10.1.0", "npm-registry-fetch": "^14.0.3", @@ -13468,7 +13315,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmsearch": { - "version": "6.0.2", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -13480,7 +13327,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -13493,7 +13340,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -13543,6 +13390,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/minimatch": { "version": "9.0.3", "dev": true, @@ -13559,12 +13415,12 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/minipass": { - "version": "5.0.0", + "version": "7.0.4", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/semantic-release/node_modules/npm/node_modules/minipass-collect": { @@ -13592,12 +13448,12 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", + "version": "3.0.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -13764,7 +13620,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", + "version": "9.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -13773,7 +13629,7 @@ "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", + "make-fetch-happen": "^10.0.3", "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -13788,6 +13644,19 @@ "node": "^12.13 || ^14.13 || >=16" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", "dev": true, @@ -13817,55 +13686,192 @@ "concat-map": "0.0.1" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "*" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/nopt": { @@ -13898,25 +13904,47 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "minipass": "^3.1.1" }, "engines": { - "node": ">= 6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/which": { "version": "2.0.2", @@ -13985,7 +14013,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/npm-install-checks": { - "version": "6.2.0", + "version": "6.3.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -14078,6 +14106,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", "dev": true, @@ -14158,6 +14195,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", "dev": true, @@ -14191,13 +14237,13 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", + "version": "1.10.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -14207,7 +14253,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", + "version": "10.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14216,7 +14262,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", + "version": "6.0.15", "dev": true, "inBundle": true, "license": "MIT", @@ -14237,15 +14283,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/semantic-release/node_modules/npm/node_modules/process": { - "version": "0.11.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/semantic-release/node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", "dev": true, @@ -14353,18 +14390,17 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/readable-stream": { - "version": "4.4.0", + "version": "3.6.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" } }, "node_modules/semantic-release/node_modules/npm/node_modules/retry": { @@ -14461,7 +14497,7 @@ "optional": true }, "node_modules/semantic-release/node_modules/npm/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14515,7 +14551,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14556,16 +14592,16 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/socks": { - "version": "2.7.1", + "version": "2.8.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -14594,7 +14630,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "dev": true, "inBundle": true, "license": "CC-BY-3.0" @@ -14610,18 +14646,18 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", + "version": "3.0.17", "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/semantic-release/node_modules/npm/node_modules/ssri": { - "version": "10.0.4", + "version": "10.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -14703,7 +14739,7 @@ } }, "node_modules/semantic-release/node_modules/npm/node_modules/tar": { - "version": "6.1.15", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14743,6 +14779,15 @@ "node": ">=8" } }, + "node_modules/semantic-release/node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/semantic-release/node_modules/npm/node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -15220,9 +15265,9 @@ } }, "node_modules/semantic-release/node_modules/type-fest": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", - "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.0.tgz", + "integrity": "sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==", "dev": true, "engines": { "node": ">=16" @@ -15319,29 +15364,32 @@ "dev": true }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -15369,14 +15417,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15443,15 +15495,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/signale/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/signale/node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -15553,9 +15596,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -15569,9 +15612,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split": { @@ -15878,34 +15921,41 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15915,28 +15965,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16040,9 +16093,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -16056,15 +16109,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -16219,9 +16272,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "dependencies": { "psl": "^1.1.33", @@ -16255,10 +16308,18 @@ } }, "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", "dev": true, + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16273,9 +16334,9 @@ } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -16316,18 +16377,18 @@ } }, "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -16391,29 +16452,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16423,16 +16485,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16442,14 +16505,40 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16469,9 +16558,9 @@ } }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true, "optional": true, "bin": { @@ -16496,6 +16585,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -16524,9 +16625,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -16543,8 +16644,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -16581,19 +16682,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -16613,9 +16701,9 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -16673,15 +16761,6 @@ "makeerror": "1.0.12" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -16757,16 +16836,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16775,6 +16854,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -16818,9 +16906,9 @@ } }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "engines": { "node": ">=10.0.0" @@ -16956,7 +17044,7 @@ }, "src/sdks/core": { "name": "@firebolt-js/sdk", - "version": "1.2.0-next.3", + "version": "2.0.0-next.4", "license": "Apache-2.0", "devDependencies": { "jest": "^28.1.0", @@ -16967,7 +17055,7 @@ }, "src/sdks/discovery": { "name": "@firebolt-js/discovery-sdk", - "version": "1.2.0-next.2", + "version": "2.0.0-next.4", "license": "Apache-2.0", "devDependencies": { "jest": "^28.1.0", @@ -16978,7 +17066,7 @@ }, "src/sdks/manage": { "name": "@firebolt-js/manage-sdk", - "version": "1.2.0-next.3", + "version": "2.0.0-next.4", "license": "Apache-2.0", "devDependencies": { "jest": "^28.1.0", diff --git a/package.json b/package.json index b63abe049..52e4c4ef5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@firebolt-js/sdks", - "version": "1.2.0-next.4", + "version": "2.0.0-next.4", "description": "The Firebolt JS SDK", "type": "module", "bin": { @@ -13,19 +13,20 @@ ], "scripts": { "fs:setup": "npm run clean && mkdir -p dist", - "validate:each": "npx firebolt-openrpc validate --input src/openrpc --schemas src/schemas --transformations", - "validate:compiled": "npx firebolt-openrpc validate --input dist/firebolt-open-rpc.json --pass-throughs && npm run validate --workspaces", + "validate:each": "npx firebolt-openrpc validate --input src/openrpc --schemas src/schemas --transformations --bidirectional", + "validate:compiled": "npx firebolt-openrpc validate --server dist/firebolt-open-rpc.json --client dist/firebolt-app-open-rpc.json --pass-throughs && npm run validate --workspaces", "validate": "npm run validate:each && npm run validate:compiled ", - "compile": "npx firebolt-openrpc openrpc --input src --template src/template/openrpc/template.json --output ./dist/firebolt-open-rpc.json --schemas src/schemas", + "compile": "npx firebolt-openrpc openrpc --input src --template src/template/openrpc/template.json --server ./dist/firebolt-open-rpc.json --client ./dist/firebolt-app-open-rpc.json --schemas src/schemas", + "update": "npx firebolt-openrpc update --input src --schemas src/schemas", "slice": "npm run slice --workspaces", - "sdks": "npm run sdk --workspaces", + "sdk": "npm run sdk --workspaces", "docs": "npm run docs --workspaces", "wiki": "npm run wiki --workspaces", - "test:setup": "npm run test:setup --workspaces", + "test:setup": "rm -rf test/transpiled-suite && npx tsc --target es6 --moduleResolution node --outDir test/transpiled-suite && npm run test:setup --workspaces", "test": "npm run test:setup && NODE_OPTIONS=--experimental-vm-modules npx --config=jest.config.json --detectOpenHandles jest", "clean": "rm -rf dist && npm run clean --workspaces", "dist": "npm run fs:setup && npm run validate:each && npm run compile && npm run specification && npm run version && npm run dist:notest --workspaces && npm run test", - "specification": "node ./src/js/version-specification/index.mjs --source ./src/json/firebolt-specification.json", + "specification": "node ./src/js/version-specification/index.mjs --source ./src/json/firebolt-specification.json --legacy-versions 0", "specification:report": "node ./src/js/version-specification/index.mjs --source ./dist/firebolt-specification.json --report", "version": "node ./src/js/version.mjs sync", "dev:setup": "husky install", @@ -45,7 +46,7 @@ "devDependencies": { "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.3", - "@firebolt-js/openrpc": "3.0.0-next.4", + "@firebolt-js/openrpc": "rdkcentral/firebolt-openrpc#major/rpc", "@firebolt-js/schemas": "2.0.0", "@saithodev/semantic-release-backmerge": "^3.2.0", "@semantic-release/changelog": "^6.0.1", diff --git a/requirements/glossary.md b/requirements/glossary.md index 5f8d7d4c8..d7f7c227f 100644 --- a/requirements/glossary.md +++ b/requirements/glossary.md @@ -1,18 +1,25 @@ # Glossary -Document Status: Working Draft - -| Contributor | Organization | -| -------------- | -------------- | -| Jeremy LaCivita | Comcast | +Document Status: Working Draft +| Contributor | Organization | +| --------------- | ------------ | +| Jeremy LaCivita | Comcast | ## 1. Overview -This document describes various terms used as part of Firebolt APIs, e.g. method names or parameters, and how they are used by Firebolt, for consistency. -The terms are this document are commonly used across multiple modules. However, new APIs should be deferential to all existing APIs, not just words listed here. +This document describes various terms used as part of Firebolt APIs, e.g. +method names or parameters, and how they are used by Firebolt, for consistency. -The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in [BCP 14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. +The terms are this document are commonly used across multiple modules. However, +new APIs should be deferential to all existing APIs, not just words listed +here. +The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL +NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT +RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be +interpreted as described in [BCP +14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and +only when, they appear in all capitals, as shown here. ## 2. Table of Contents - [1. Overview](#1-overview) - [2. Table of Contents](#2-table-of-contents) @@ -35,43 +42,77 @@ The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL ## 3. Firebolt Terms ### 3.1. app -noun. - A Firebolt app. Any component that calls [Firebolt APIs](https://github.com/rdkcentral/firebolt-apis), either directly, or by running inside of a container that calls Firebolt APIs, is a Firebolt app. +noun. - A Firebolt app. Any component that calls [Firebolt +APIs](https://github.com/rdkcentral/firebolt-apis), either directly, or by +running inside of a container that calls Firebolt APIs, is a Firebolt app. ### 3.2. available -adj. - Used in the context of a [capability](#34-capability) to denote that the capability *could* be leveraged now if it is [permitted](#311-permitted) and either [granted](#38-granted) or is not gated by a [user grant](#313-user-grant). Available capabilities are, by definition, [supported](#314-supported). +adj. - Used in the context of a [capability](#34-capability) to denote that the +capability *could* be leveraged now if it is [permitted](#311-permitted) and +either [granted](#38-granted) or is not gated by a [user +grant](#313-user-grant). Available capabilities are, by definition, +[supported](#314-supported). ### 3.3. availability -noun. - Used in the context of [content](#36-content) to denote that the content *could* be consumed if either the device has an [entitlement](#37-entitlement) to the content, or the content does not require any entitlement. +noun. - Used in the context of [content](#36-content) to denote that the +content *could* be consumed if either the device has an +[entitlement](#37-entitlement) to the content, or the content does not require +any entitlement. ### 3.4. capability -noun. - A discrete unit of functionality that a Firebolt device might be able to perform. It is granular enough to enable appropriate access controls across all Firebolt Apps, but useful enough to be a meaningful functional unit that an App might care about. +noun. - A discrete unit of functionality that a Firebolt device might be able +to perform. It is granular enough to enable appropriate access controls across +all Firebolt Apps, but useful enough to be a meaningful functional unit that an +App might care about. ### 3.5. closed captions -noun. - Closed Captions are text tracks rendered over or near [content](#36-content) with the intention of making the audio track of the content more accessible, for example to deaf or hard-of-hearing individuals. +noun. - Closed Captions are text tracks rendered over or near +[content](#36-content) with the intention of making the audio track of the +content more accessible, for example to deaf or hard-of-hearing individuals. ### 3.6. content -noun. - Content consumed on Firebolt platforms, e.g. video, games, music, etc. +noun. - Content consumed on Firebolt platforms, e.g. video, games, music, etc. ### 3.7. entitlement -noun. - Used in the context of [content](#36-content) to denote that the device or user has acquired the *right* to consume the content. Content may also have [availability](#33-availability) requirements for consumption, e.g. a user may have pre-orded a piece of content, and therefor have an entitlement to it, that becomes available in the future. +noun. - Used in the context of [content](#36-content) to denote that the device +or user has acquired the *right* to consume the content. Content may also have +[availability](#33-availability) requirements for consumption, e.g. a user may +have pre-orded a piece of content, and therefor have an entitlement to it, that +becomes available in the future. ### 3.8. granted -adj. - Used in the context of a [capability](#34-capability) to denote that the capability has been granted to an app by the user. Capabilities that are gated by [user grant](#313-user-grant) cannot be leveraged by any app w/out being granted. +adj. - Used in the context of a [capability](#34-capability) to denote that the +capability has been granted to an app by the user. Capabilities that are gated +by [user grant](#313-user-grant) cannot be leveraged by any app w/out being +granted. ### 3.9. lifecycle -noun. - Used to describe the life, from being loaded to unloaded, of a Firebolt [app](#31-app). The app lifecycle has many states that inform the app how it is being percieved and how it should behave. +noun. - Used to describe the life, from being loaded to unloaded, of a Firebolt +[app](#31-app). The app lifecycle has many states that inform the app how it is +being percieved and how it should behave. ### 3.10. media -noun. - [Content](#36-content) that that plays back over time without requiring interaction from the user, e.g. video or music. Media must have a start-time, or a duration, or both. +noun. - [Content](#36-content) that that plays back over time without requiring +interaction from the user, e.g. video or music. Media must have a start-time, +or a duration, or both. ### 3.11. permitted -adj. - Used in the context of a [capability](#34-capability) to denote that the capability has been permitted to an app by the distributor of the device. +adj. - Used in the context of a [capability](#34-capability) to denote that the +capability has been permitted to an app by the distributor of the device. ### 3.12. policy -noun. - A group of user, device, and/or distributor settings that affect a particular domain, e.g. Advertising. +noun. - A group of user, device, and/or distributor settings that affect a +particular domain, e.g. Advertising. ### 3.13. user grant -noun. - A secure process in which a user of a device grants an app on the device access to a capability. +noun. - A secure process in which a user of a device grants an app on the +device access to a capability. ### 3.14. supported -adj. - Used in the context of a [capability](#34-capability) to denote that the capability *could* be leveraged at some point on this device, because the distributor offers it as part of this device's feature set. Leveraging a capability also requires that it is [available](#32-available), [permitted](#311-permitted), and either [granted](#38-granted) or is not gated by a [user grant](#313-user-grant). + +adj. - Used in the context of a [capability](#34-capability) to denote that the +capability *could* be leveraged at some point on this device, because the +distributor offers it as part of this device's feature set. Leveraging a +capability also requires that it is [available](#32-available), +[permitted](#311-permitted), and either [granted](#38-granted) or is not gated +by a [user grant](#313-user-grant). diff --git a/requirements/governance.md b/requirements/governance.md index 2f3f2e404..7869b937d 100644 --- a/requirements/governance.md +++ b/requirements/governance.md @@ -1,11 +1,16 @@ # Requirements Governance -This document outlines the governance model for the Firebolt® Open-Source Project, including the structure of an Advisory Board and Working Groups, as well as the process used to codify Requirements Specifications and Architectural Decision Records. +This document outlines the governance model for the Firebolt® Open-Source +Project, including the structure of an Advisory Board and Working Groups, as +well as the process used to codify Requirements Specifications and +Architectural Decision Records. ## 1. Overview -The Firebolt Open-Source Project is governed by an Advisory Board that creates and delegates work to Working Groups, which then create proposals for Requirements Specifications and Architectural Decision Records. -![Governance Structure](./images/governance/structure.png) +The Firebolt Open-Source Project is governed by an Advisory Board that creates +and delegates work to Working Groups, which then create proposals for +Requirements Specifications and Architectural Decision Records. +![Governance Structure](./images/governance/structure.png) ## 2. Table of Contents - [1. Overview](#1-overview) - [2. Table of Contents](#2-table-of-contents) @@ -31,10 +36,13 @@ The Firebolt Open-Source Project is governed by an Advisory Board that creates a - [4.12. Release Versions](#412-release-versions) ## 3. Goals -The goal of the Firebolt Open-Source Project is to provide a Distributor-configurable set of integration APIs and functional requirements for those APIs so that Apps can integrate with the APIs once and run their app on every Firebolt platform (regardless of distributor) consistently. -Specifically, Firebolt provides: +The goal of the Firebolt Open-Source Project is to provide a +Distributor-configurable set of integration APIs and functional requirements +for those APIs so that Apps can integrate with the APIs once and run their app +on every Firebolt platform (regardless of distributor) consistently. +Specifically, Firebolt provides: - Write Apps once, run on all Firebolt distributors - Discovery and launching of Apps - Detection of, and access control for, Firebolt APIs and features @@ -42,10 +50,10 @@ Specifically, Firebolt provides: - Platform integration APIs, (e.g. captions, media info, etc.) - Device and account management - Integration APIs for broader eco-system integrations -(e.g. user experience, advertising, voice, etc.) -While enabling Distributors to: +(e.g. user experience, advertising, voice, etc.) +While enabling Distributors to: - Provide differentiating Discovery and Settings experiences - Configure Firebolt features to meet their business needs - Configure Firebolt user privacy & opt-in settings @@ -53,29 +61,38 @@ While enabling Distributors to: - Negotiate access to features and APIs with each app ## 4. Governance -The Firebolt Open-Source Project is governed by an Advisory Board. The purpose of the Advisory Board is to ensure that each major, minor, and patch version of the Firebolt Requirements is aligned with the goals of the Firebolt Open-Source Project. -The Firebolt Requirements are the collection of all Requirements Specifications and all Architectural Decision Records that are ratified by the Advisory Board (and contained in this repository). - +The Firebolt Open-Source Project is governed by an Advisory Board. The purpose +of the Advisory Board is to ensure that each major, minor, and patch version of +the Firebolt Requirements is aligned with the goals of the Firebolt Open-Source +Project. + +The Firebolt Requirements are the collection of all Requirements Specifications +and all Architectural Decision Records that are ratified by the Advisory Board +(and contained in this repository). ### 4.1. Scope -This document describes the governance model for the following components: +This document describes the governance model for the following components: - Firebolt RPC APIs & SDKs - Firebolt Media Pipeline (aka Rialto) - Firebolt API Reference Implementation (Ripple) ### 4.2. Firebolt Version -A Firebolt Version is a snapshot of the Firebolt Requirements that has been ratified as an official release of the requirements. Note that the requirements are decoupled from any implementation of those requirements, and iterations to the requirements will occur with input from any teams implementing them. -Firebolt Versions **MUST** follow Semantic Versioning. +A Firebolt Version is a snapshot of the Firebolt Requirements that has been +ratified as an official release of the requirements. Note that the requirements +are decoupled from any implementation of those requirements, and iterations to +the requirements will occur with input from any teams implementing them. +Firebolt Versions **MUST** follow Semantic Versioning. ### 4.3. Advisory Board -The Advisory Board oversees all aspects of Firebolt Requirements Governance. -Advisory Board decisions should aim to be unanimous whenever possible, but in cases of deadlock, may be decided by simple majority. +The Advisory Board oversees all aspects of Firebolt Requirements Governance. -The Advisory Board is responsible for: +Advisory Board decisions should aim to be unanimous whenever possible, but in +cases of deadlock, may be decided by simple majority. +The Advisory Board is responsible for: - Prioritization of Working Groups needed - Creation of balanced Working Groups with relevant subject matter experts - Solicitation of peer review by SMEs that are not from the working group @@ -85,141 +102,220 @@ The Advisory Board is responsible for: - Determination of when a sanctioned fork is warranted ### 4.4. Advisory Board Members -The Firebolt Advisory Board is currently being formed and will be published soon. -Contact the `rdkcentral/firebolt-apis` maintainer, [Jeremy LaCivita](https://github.com/jlacivita), to submit proposals to the Advisory Board. +The Firebolt Advisory Board is currently being formed and will be published +soon. +Contact the `rdkcentral/firebolt-apis` maintainer, [Jeremy +LaCivita](https://github.com/jlacivita), to submit proposals to the Advisory +Board. ### 4.5. Working Group -Working Groups build consensus on requirements for Firebolt features or architectural solutions. They should ideally be three to five individuals spanning technical and product experts. Further recommendations on working group composition are left to the Advisory Board. -As new features are prioritized, Working Groups should be formed to gather and document requirements for those features. Working groups may be self-forming or selected by the Advisory Board, but all working groups must have their membership reviewed and approved by the board to ensure that they are well balanced. +Working Groups build consensus on requirements for Firebolt features or +architectural solutions. They should ideally be three to five individuals +spanning technical and product experts. Further recommendations on working +group composition are left to the Advisory Board. -The Advisory Board **MAY** appoint a Working Group Chair or instruct the Working Group to select a chair amongst themselves. +As new features are prioritized, Working Groups should be formed to gather and +document requirements for those features. Working groups may be self-forming or +selected by the Advisory Board, but all working groups must have their +membership reviewed and approved by the board to ensure that they are well +balanced. -The Working Group Chair is responsible for driving consensus and reporting back to the Advisory Board +The Advisory Board **MAY** appoint a Working Group Chair or instruct the +Working Group to select a chair amongst themselves. +The Working Group Chair is responsible for driving consensus and reporting back +to the Advisory Board ### 4.6. Requirements Specification -A Requirements Specification includes all details necessary for multiple, disassociated teams to build a consistent implementation of a feature, including API signatures, validation, and functionality, as well as functional and behavioral requirements of the feature that are not directly exposed by an API. -Requirements and APIs may be targeted towards traditional 3rd party apps, as well as more foundational 1st party apps. +A Requirements Specification includes all details necessary for multiple, +disassociated teams to build a consistent implementation of a feature, +including API signatures, validation, and functionality, as well as functional +and behavioral requirements of the feature that are not directly exposed by an +API. -The level of detail in an acceptable Requirements Specification should be such that any App should run consistently on any implementation of the feature that is based on the Specification. +Requirements and APIs may be targeted towards traditional 3rd party apps, as +well as more foundational 1st party apps. -Requirements Specifications are written using the [IETF Best Common Practice 14](https://www.rfc-editor.org/rfc/rfc2119.txt) and should include the following at the end of the Overview: +The level of detail in an acceptable Requirements Specification should be such +that any App should run consistently on any implementation of the feature that +is based on the Specification. -The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in [BCP 14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. +Requirements Specifications are written using the [IETF Best Common Practice +14](https://www.rfc-editor.org/rfc/rfc2119.txt) and should include the +following at the end of the Overview: -Requirements Specification move through several [stages](#48-approval-stages) from being a draft, to being an official versioned requirements specification. +The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL +NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT +RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be +interpreted as described in [BCP +14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and +only when, they appear in all capitals, as shown here. +Requirements Specification move through several [stages](#48-approval-stages) +from being a draft, to being an official versioned requirements specification. ### 4.7. Architectural Decision Record -An Architectural Decision Record includes all details necessary to ensure that Firebolt Requirements are fulfilled with an architecturally sound design. This is often used in cases where listing out explicit requirements, e.g. performance or operational requirements, is not possible or realistic, e.g. Requiring use of a well-known open source component to fulfill some aspect of the platform, or requiring adherence to a high level modular breakdown of concerns to keep platform maintenance manageable. - -Since ADRs included in the Firebolt Requirements **MUST** be adhered to, not every architectural decision made in order to fulfill the Firebolt Requirements needs to have a formal ADR in the Firebolt Requirements repository. It is up to the Advisory Board which ADRs warrent a formal inclusion in the Firebolt Requirements. - -ADRs move through the same [stages](#48-approval-stages) as Requirements Specifications. +An Architectural Decision Record includes all details necessary to ensure that +Firebolt Requirements are fulfilled with an architecturally sound design. This +is often used in cases where listing out explicit requirements, e.g. +performance or operational requirements, is not possible or realistic, e.g. +Requiring use of a well-known open source component to fulfill some aspect of +the platform, or requiring adherence to a high level modular breakdown of +concerns to keep platform maintenance manageable. + +Since ADRs included in the Firebolt Requirements **MUST** be adhered to, not +every architectural decision made in order to fulfill the Firebolt Requirements +needs to have a formal ADR in the Firebolt Requirements repository. It is up to +the Advisory Board which ADRs warrent a formal inclusion in the Firebolt +Requirements. + +ADRs move through the same [stages](#48-approval-stages) as Requirements +Specifications. ### 4.8. Approval Stages -Requirements specifications and ADRs are written by working groups and go through several stages of approval before becoming official requirements documents. -![Approval Track](./images/governance/approval-track.png) +Requirements specifications and ADRs are written by working groups and go +through several stages of approval before becoming official requirements +documents. +![Approval Track](./images/governance/approval-track.png) #### 4.8.1. Draft -This is any first draft of a requirements specification submitted by an individual or individuals to a Working Group. -Artifacts: +This is any first draft of a requirements specification submitted by an +individual or individuals to a Working Group. +Artifacts: - A markdown document, ready to be presented to the Working Group -Note that a Draft **MUST** not be committed to any public location, e.g. the Requirements Repository, because it has not yet been reviewed by the Working Group and could mistakenly contain sensative, private information related to a specific Firebolt distributor. +Note that a Draft **MUST** not be committed to any public location, e.g. the +Requirements Repository, because it has not yet been reviewed by the Working +Group and could mistakenly contain sensative, private information related to a +specific Firebolt distributor. #### 4.8.2. Working Draft -A version of the requirements specification that is approved by the Working Group for feedback and review by individuals not on the Working Group. Individuals are selected for review at the discretion of the Working Group. Working drafts may or may not satisfy all requirements of the feature and should not be used for derivative works. -Artifacts: +A version of the requirements specification that is approved by the Working +Group for feedback and review by individuals not on the Working Group. +Individuals are selected for review at the discretion of the Working Group. +Working drafts may or may not satisfy all requirements of the feature and +should not be used for derivative works. +Artifacts: - Markdown specification in a named feature branch of the Requirements Repository - Working Group members identified - Working Group progress is being tracked via GitHub project in the Requirements Repository #### 4.8.3. Candidate Specification -A version of the requirements specification that is approved by the Working Group for proof-of-concept implementations and peer-review by the larger Community. Candidate Specifications have been through significant review by the Working Group and are ready for feedback from the larger community. -Once this is published to the peer group for review, they’ll have two weeks to add their comments, make amendments requests, etc. +A version of the requirements specification that is approved by the Working +Group for proof-of-concept implementations and peer-review by the larger +Community. Candidate Specifications have been through significant review by the +Working Group and are ready for feedback from the larger community. -Artifacts: +Once this is published to the peer group for review, they’ll have two weeks to +add their comments, make amendments requests, etc. +Artifacts: - Markdown specification in a named feature branch of the Requirements Repository - Domain experts for peer-review identified and notified - Repeat process for any C.S. Drafts that are formalized into the C.S. (see below) - JSON-Schema API changes outlined by the document are in the OpenRPC schemas #### 4.8.4. Candidate Specification Draft -A fork of the current Candidate Specification that has changes requested, but not yet approved, by the Working Group. -Artifacts: +A fork of the current Candidate Specification that has changes requested, but +not yet approved, by the Working Group. +Artifacts: - A Pull Request into the feature branch containing in-progress changes - Previous Candidate Specification does not include changes until approved by W.G. #### 4.8.5. Proposed Specification -A version of the requirements specification that is considered, by the Working Group, to be the final Candidate Specification, and has been submitted to the Advisory Board for final approval. This version may be used for experimental implementations and final peer-review by the larger community. -Artifacts: +A version of the requirements specification that is considered, by the Working +Group, to be the final Candidate Specification, and has been submitted to the +Advisory Board for final approval. This version may be used for experimental +implementations and final peer-review by the larger community. + +Artifacts: - Markdown specification merged into the #proposed branch of the Requirements Repository - A Pull Request into the #next branch of Requirements Repository - JSON-Schema API changes outlined by the document are in the OpenRPC schemas - Unit tests for any API changes #### 4.8.6. Specification -An official versioned stage of the requirements specification that is done and will not change until a future version is created. This version may be used for official production implementations. -Artifacts: +An official versioned stage of the requirements specification that is done and +will not change until a future version is created. This version may be used for +official production implementations. +Artifacts: - Markdown specification merged into the #main branch of the Requirements Repository - Spec Review notes and green light from implementation teams of all member organizations with a vested interest in the specification - Status tracking link for any Open Source implementations of the spec, if appropriate ### 4.9. Requirements Repository -A public GitHub repository used to manage the progress of a requirements specification. Requirements Specification **MUST** live in their own repository, and not along side of the code that is implementing them. -The Requirements Repository **MUST** be located at: +A public GitHub repository used to manage the progress of a requirements +specification. Requirements Specification **MUST** live in their own +repository, and not along side of the code that is implementing them. -[https://github.com/rdkcentral/firebolt-apis](https://github.com/rdkcentral/firebolt-apis) +The Requirements Repository **MUST** be located at: +[https://github.com/rdkcentral/firebolt-apis](https://github.com/rdkcentral/firebolt-apis) + ### 4.10. Requirements Repository Branching -The Requirements Repository **MUST** have the following branches: -| Branch | Purpose | -| ------ | ------- | -| main | For officially approved specifications that have been released under a version. | -| next | For all approved specifications, even those that have not been released under a version. | -| proposed | An experimental branch containing all proposed specifications. | +The Requirements Repository **MUST** have the following branches: +| Branch | Purpose | +| -------- | ---------------------------------------------------------------------------------------- | +| main | For officially approved specifications that have been released under a version. | +| next | For all approved specifications, even those that have not been released under a version. | +| proposed | An experimental branch containing all proposed specifications. | -Working Drafts and Candidate Specification Drafts **MUST** be housed in a named feature branch in the Requirements Repository (see below). +Working Drafts and Candidate Specification Drafts **MUST** be housed in a named +feature branch in the Requirements Repository (see below). -Branches are merged based on the approval process: - -![Branching](./images/governance/branching.png) +Branches are merged based on the approval process: + +![Branching](./images/governance/branching.png) ### 4.11. Sanctioned Forks -From time to time an organization with access to the Requirements Repository may want to spearhead a new feature without going through the formal approval process. -In this case the member may submit a request to the Approval Board for a sanctioned fork inside the Requirements Repository, so that research and development can be done on the feature. +From time to time an organization with access to the Requirements Repository +may want to spearhead a new feature without going through the formal approval +process. -The Approval Board **MAY** grant or deny the request for a sanctioned fork. +In this case the member may submit a request to the Approval Board for a +sanctioned fork inside the Requirements Repository, so that research and +development can be done on the feature. -After the R&D is complete, the forking organization **MUST** submit the resulting requirements to the formal process and work to have them approved. +The Approval Board **MAY** grant or deny the request for a sanctioned fork. -The organization requesting the fork **MUST** be willing to migrate to the approved APIs, which may be different than the API in the fork. +After the R&D is complete, the forking organization **MUST** submit the +resulting requirements to the formal process and work to have them approved. -The Advisory Board, and selected Working Group, **SHOULD** be willing to avoid unnecessary changes to make migration as easy as possible, without sacrificing the integrity of the Firebolt Open-Source Project’s goals. +The organization requesting the fork **MUST** be willing to migrate to the +approved APIs, which may be different than the API in the fork. + +The Advisory Board, and selected Working Group, **SHOULD** be willing to avoid +unnecessary changes to make migration as easy as possible, without sacrificing +the integrity of the Firebolt Open-Source Project’s goals. ### 4.12. Release Versions -The Advisory Board has ownership of when to do major, minor, and patch releases of the Firebolt Requirements. -Releases **MUST** follow Semantic Versioning. +The Advisory Board has ownership of when to do major, minor, and patch releases +of the Firebolt Requirements. + +Releases **MUST** follow Semantic Versioning. -Approved changes are all housed in the next branch until the Advisory Board decides that the next branch warrants an officially released version of the requirements. +Approved changes are all housed in the next branch until the Advisory Board +decides that the next branch warrants an officially released version of the +requirements. -If a feature that requires a major version increment, i.e. a breaking change, is proposed, the Advisory Board may decide to keep it unapproved so that any features requiring a minor version change can be pushed through the process. Management of this is the responsibility of the Advisory Board. +If a feature that requires a major version increment, i.e. a breaking change, +is proposed, the Advisory Board may decide to keep it unapproved so that any +features requiring a minor version change can be pushed through the process. +Management of this is the responsibility of the Advisory Board. diff --git a/requirements/images/specifications/lifecycle/lifecycle-states.png b/requirements/images/specifications/lifecycle/lifecycle-states.png new file mode 100644 index 000000000..4a06d3314 Binary files /dev/null and b/requirements/images/specifications/lifecycle/lifecycle-states.png differ diff --git a/requirements/images/specifications/lifecycle/lifecycle-transitions.png b/requirements/images/specifications/lifecycle/lifecycle-transitions.png new file mode 100644 index 000000000..a3ea09887 Binary files /dev/null and b/requirements/images/specifications/lifecycle/lifecycle-transitions.png differ diff --git a/requirements/specifications/discovery/user-interest.md b/requirements/specifications/discovery/user-interest.md index f53e239ba..637243f8c 100644 --- a/requirements/specifications/discovery/user-interest.md +++ b/requirements/specifications/discovery/user-interest.md @@ -168,6 +168,13 @@ EntityDetails, which is returned as the result to the pending ![](../../../requirements/images/specifications/intents/user-interest/media/image4.png) +**TODO**: clean this up and add to spec + +1. When an Aggregated Experience app calls `Content.requestUserInterst` the platform MUST dispatch a `Discovery.onRequestUserInterest` notification to the best candidated provider app. +2. The Firebolt SDK embedded in the provider app parses out the parameters from onRequestUserInterest API and calls the apps `Provider.userInterest` method, which was passed in via Discovery.provide() +3. The SDK waits for the response from `Provider.userInterest` and then it calls `Discovery.userInterestResponse` +4. If the app threw an error, the SDK calls `Discovery.userInterestError` + Once an App's callback is invoked, that app will have `interestTimeout` milliseconds to return a value or throw an error. Values returned after that time **MUST** be ignored. The timeout value is stored in the diff --git a/requirements/specifications/lifecycle/index.md b/requirements/specifications/lifecycle/index.md new file mode 100644 index 000000000..b525477ad --- /dev/null +++ b/requirements/specifications/lifecycle/index.md @@ -0,0 +1,927 @@ +# App Lifecycle Management + +Document Status: Candidate Specification + +See [Firebolt Requirements Governance](../../governance.md) for more info. + +| Contributor | Organization | +|---------------------------|--------------| +| Andrew Bennett | Sky | +| Cody Bonney | Charter | +| Bart Catrysse | Liberty | +| Tim Dibben | Sky | +| Piotr Kobzda | Liberty | +| Jeremy LaCivita | Comcast | +| Ramprasad Lakshminarayana | Sky | +| Kevin Pearson | Comcast | +| Jan Pedersen | Sky | +| Peter Yu | Comcast | + +## 1. Overview + +This document describes the requirements that Firebolt platforms and Firebolt +applications must fulfill when managing App Lifecycles. *App Lifecycle* refers +to the lifecycle of an individual app from the time it is launched/loaded to +the time it is destroyed and all runtime resources are discarded. + +*Initializing* an app refers to fetching the initial resources, e.g. the +app-manifest and index.html, and loading them into a container capable of +running the app, e.g. a web browser. + +*Activating* an app refers to the process of getting an app into a state where +it is given full resources, e.g. media pipeline. This may include *initializing* the app +first, if needed. + +*Closing* an app refers to the process of getting an app out of a state where +it is the primary user experience (e.g. not visible, not audible, and not +responding to input). This **does not** involve *destroying* the app. + +*Suspending* an app refers to reducing the app's memory and CPU usage, and +deallocating its graphics surface so that other apps will have more resources +available. + +*Resuming* an app refers to reallocating its graphics surface and resuming +normal CPU and memory allocations. + +*Destroying* an app refers to the process of notifying an app to do any needed +clean up, and then *terminating* it. + +*Terminating* an app refers to shutting down the app's container and reclaiming +any memory, CPU, etc. that it was consuming. + +*Hibernating* an app refers to putting the app into a state where it does not use +CPU cycles, which allows the platform to optimise memory consumption. + +*Restoring* an app refers to copying a Hibernated app back into the memory space of +a compatible process so that it resumes where it left off. + +## 2. Table of Contents +- [1. Overview](#1-overview) +- [2. Table of Contents](#2-table-of-contents) +- [3. Lifecycle States](#3-lifecycle-states) + - [3.1. Initializing](#31-initializing) + - [3.2. Running](#32-running) + - [3.3. Active](#33-active) + - [3.4. Suspended](#34-suspended) + - [3.5. Hibernated](#35-hibernated) +- [4. Getting the current state](#4-getting-the-current-state) +- [5. Lifecycle State Transitions](#5-lifecycle-state-transitions) + - [5.1. Initializing an app](#51-initializing-an-app) + - [5.2. Activating an app](#52-activating-an-app) + - [5.3. Deactivating an app](#53-deactivating-an-app) + - [5.4. Suspending an app](#54-suspending-an-app) + - [5.5. Resuming an app](#55-resuming-an-app) + - [5.6. Putting an app into hibernation](#56-putting-an-app-into-hibernation) + - [5.7. Restoring an app from hibernation](#57-restoring-an-app-from-hibernation) + - [5.8. Destroying an app](#58-destroying-an-app) + - [5.9. Terminating an app](#59-terminating-an-app) +- [6. Create Parameters](#6-create-parameters) +- [7. Core SDK APIs](#7-core-sdk-apis) + - [7.1. Application Interface](#71-application-interface) + - [7.2. Activatable Interface](#72-activatable-interface) + - [7.3. Hibernation Interface](#73-hibernation-interface) + - [7.4. Example App](#74-example-app) + - [7.5. Close](#75-close) + - [7.6. State](#76-state) +- [8. Lifecycle Configuration](#8-lifecycle-configuration) + + +## 3. Lifecycle States + +Firebolt platforms **MUST** support running one or more apps concurrently. The +platform **MUST** manage transition of apps from state to state. + +A Firebolt app, once running, **MUST** be in one of several states and **MUST +NOT** be in more than one state at a time. + +As an app changes states the platform will invoke specific app-provided +transition methods, see [Transitions](#5-lifecycle-state-transitions), for more +on this. + +![Lifecycle States](../../images/specifications/lifecycle/lifecycle-states.png) + +| | CPU | RAM | F/S | Net | GFX | SFC | A/V | Description | +|--------------|-----|-----|-----|-----|-----|-----|-----|----------------------------------------------------------------------------| +| Initializing | ✔ | ✔ | ✔ | ✔ | | | | Started executing, but is not yet instantiated as a Firebolt app. | +| Running | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | Full access to resources, except A/V, and registered as a Firebolt app. | +| Active | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | Full access to resources and is a perceptible part of the user experience. | +| Suspended | ↓ | ↓ | ✔ | ✔ | | | | Reduced memory footprint and no access to graphics or A/V. | +| Hibernated | | | | | | | | No CPU cycles are given to the app. App may stay in RAM or be stored. | + +| | Legend | +|-----|-------------------------| +| CPU | Central Processing Unit | +| RAM | Ramdon Access Memory | +| F/S | File System | +| Net | Network | +| GFX | Graphics rendering | +| SFC | Graphics surface | +| A/V | Audio Video Decoder | +| ↓ | Limited | +| ✔ | Normal access | +| ? | Unknown | + +### 3.1. Initializing + +This is the initial state an app exists from the moment it starts receiving CPU +cycles. + +When an app starts running it **MUST** initialize the Firebolt SDK as quickly +as possible and then wait for the `Application.create()` interface to be called +before doing further setup. + +Apps in this state **MUST NOT** have a graphics surface allocated yet. + +Apps in this state **MUST NOT** be visible. + +Apps in this state **MUST NOT** receive RCU key presses. + +Apps in this state **MUST NOT** have access to the audio-video decoder. + +Apps in this state **MUST NOT** use the media pipeline. + +See [Initializing an app](#51-initializing-an-app) for more information. + +### 3.2. Running + +This state allows an app to be running and ready to go, but not actively part +of the user-perceptible experience. + +Running apps can execute code, but are not presented to the user, do not +receive any input from RCUs, and cannot use the video decoder. + +Apps in this state **MUST** have access to the graphics surface. + +Apps in this state **MAY** have created, allocated a graphics surface, but it +will not be made visible by platform compositor. + +Apps in this state **MUST NOT** be visible. + +Apps in this state **MUST NOT** receive RCU key presses. + +Apps in this state **MUST NOT** have access to the audio-video decoder. + +Apps in this state **MUST NOT** use the media pipeline and the platform +**MUST** tear down any Media Pipeline sessions associated with this app. + +Apps **MUST** only enter this state from: + + - the `INITIALIZING` state, via the `create()` method + - the `ACTIVE` state, via the `deactivate()` method + - the `SUSPENDED` state, via the `resume()` method + +When an app transitions to this state, the platform **MUST** dispatch the +`Lifecycle.onStateChanged` notification with the current state. + +### 3.3. Active + +This state allows an app to be presented as part of the user-perceptible +experience. + +To determine if an app is the *primary* experience, e.g. fullscreen, etc., see +[Presentation](./presentation.md#5-display). + +It is a platform decision as to how many apps may be in this state at once. + +Apps in this state **MAY** be visible. + +Apps in this state **MAY** receive RCU key presses that they have permissions +for. + +Apps in this state **MUST** have access to the audio decoder if they have +permission to the `xrn:firebolt:capability:decoder:audio` capability and the +platform has an available software or hardware decoder. + +Apps in this state **MUST** have access to the video decoder if they have +permission to the `xrn:firebolt:capability:decoder:video` capability and the +platform has an available software or hardware decoder. + +Apps in this state **MUST** have access to the graphics surface. + +Apps in this state **SHOULD** reduce memory usage, if possible. + +Apps **MUST** only enter this state from the `RUNNING` state, via the `activate()` method. + +When an app transitions to this state, the platform **MUST** dispatch the +`Lifecycle.onStateChanged` notification with the current state. + +### 3.4. Suspended + +This state allows an app to remain in memory and consume fewer resources. + +Suspended apps can execute code, but are not presented to the user, do not +receive any input from RCUs, and cannot use the video decoder. + +Apps in this state **MUST NOT** have a graphics surface allocated any longer. +It **MUST** have been deallocated in the `suspend()` transition. + +Apps in this state **MUST NOT** be visible. + +Apps in this state **MUST NOT** receive RCU key presses. + +Apps in this state **MUST NOT** have access to the audio-video decoder. + +Apps in this state **SHOULD** further reduce memory usage (more so than in the +`active` state), if possible. + +Apps **MUST** only enter this state from: + + - the `HIBERNATED` state, via the `restore()` method + - the `RUNNING` state, via the `suspend()` method + +When an app transitions to this state, the platform **MUST** dispatch the +`Lifecycle.onStateChanged` notification with the current state. + +### 3.5. Hibernated + +This state allows an app to be copied from memory to local storage and then +terminated to save resources. Subsequently, the app may be copied back into +memory, and resume in the same state. + +*If* a platform does not support the +`xrn:firebolt:capability:lifecycle:hibernation` capability, then the following +requirements **MUST NOT** be fulfilled, even partially. A platform **MUST NOT** +use the APIs documented here to implement an alternate, non-compliant version +of the app hibernation feature. + +*If* a platform supports the `xrn:firebolt:capability:lifecycle:hibernation` +capability, then the following requirements **MUST** be fulfilled. + +Apps **MUST** only enter this state from the `SUSPENDED` state, via the +`hibernate()` method. + +If a platform supports copying hibernated apps memory out of RAM then: + +> The platform **MAY** save the app's memory space at this point, so that it +> may be restored later. +> +> Finally, the app and its container **MAY** be removed from memory and have +> other resources released as well. + +## 4. Getting the current state + +The Lifecycle module **MUST** provide a `state` property API that returns the +current lifecycle state of the app. + +If an app is in a transition from one state to another, then it **MUST** be +considered in the state *before* the transition until such time as the app's +implementation of the [transition](#5-lifecycle-state-transitions) has returned +and the platform has finished the transition. + +The `state` API **MUST** have a corresponding `onStateChanged` notification. + +The `state` API must have one of the following values: +- `Initializing` +- `Running` +- `Suspended` +- `Active` +- `Hibernated` + +Note that the `onStateChanged` notification **MUST** never be dispatched for +the `Hibernated` state since it would not be received anyway. + +## 5. Lifecycle State Transitions + +There are several state transitions where the app and the platform need to +interact to ensure the transition goes smoothly. + +![Lifecycle +States](../../images/specifications/lifecycle/lifecycle-transitions.png) + +As an app changes states the platform will invoke specific app-provided +transition methods from the `Application` interface: + +| | Legend | +|---|---------------| +| ↓ | Limited | +| ✔ | Normal access | + +| | CPU | RAM | Net | GFX | A/V | Description | +|-------------|-----|-----|-----|-----|-----|------------------------------------------------------------------------------------------------------| +| `create()` | ✔ | ✔ | ✔ | ✔ | | Creation of the app, from a Firebolt Lifecycle perspective. | +| `suspend()` | ✔ | ✔ | ✔ | ✔ | | Reduce memory and CPU usage, deallocate graphics surface. | +| `resume()` | ✔ | ✔ | ✔ | ✔ | | graphics surface reallocated, full memory usage and normal CPU cycles. | +| `destroy()` | ✔/↓ | ✔/↓ | ✔ | | | Prepare for the app to be deallocated and removed from execution. CPU & RAM based on previous state. | + + +If an app implements the `Activatable` interface, then the following +transitions may be invoked: + +| | CPU | RAM | Net | GFX | A/V | Description | +|----------------|-----|-----|-----|-----|-----|---------------------------------------------------------------------------| +| `activate()` | ✔ | ✔ | ✔ | ✔ | ✔ | App is expected to become a user-perceptible part of the user experience. | +| `deactivate()` | ✔ | ✔ | ✔ | ✔ | ✔ | Must remove any user-perceptible activities and deallocate A/V decoders. | + + + +Finally, if an app implements the `Hibernation` interface, then the following +transitions may be invoked. + +| | CPU | RAM | Net | GFX | A/V | Description | +|-----------|-----|-----|-----|-----|-----|----------------------------------------------------------------------------------------| +| `hibernate()` | ↓ | ↓ | ✔ | | | Prepare for an extended period with no CPU cycles given to app. | +| `restore()` | ↓ | ↓ | ✔ | | | Cleanup after an extended period with no CPU, e.g. reset timers / network connections. | + + +All of these transition APIs are blocking, and each one has a +platform-configurable timeout that specifies how long the app has to fulfill +the method. + +The platform **MUST** never invoke any transitions on an app when that app is +already running a transition. + +All Firebolt apps **MUST** implement the `Application` interface, +`xrn:firebolt:capability:lifecycle:application`. + +This includes: +- `Application.create()` +- `Application.suspend()` +- `Application.resume()` +- `Application.destroy()` + + +By providing an implementation of the +`xrn:firebolt:capability:lifecycle:application` interface, an app can influence +how resources are managed during these state transitions. See [Application +Interface](#71-application-interface) for more info. + +User-facing apps **MUST** implement the `Activatable` interface, +`xrn:firebolt:capability:lifecycle:activatable`. + +This includes: +- `Application.activate()` +- `Application.deactivate()` + + +By providing an implementation of the +`xrn:firebolt:capability:lifecycle:activatable` interface, an app can influence +how resources are managed during these state transitions. See [Activatable +Interface](#72-activatable-interface) for more info. +### 5.1. Initializing an app + +Once an app is loaded it **MUST** be initialized immediately. + +Initializing consists of three parts: +- Registration of the Firebolt Application provider +- Any other code that automatically runs within the app executable +- Invoking the app's Application.create() method + + +If an app does not provide the `xrn:firebolt:capability:lifecycle:application` +capability within `initializeTimeout` milliseconds, then the platform **MUST** +terminate the app. + +Otherwise, the platform **MUST** call the app's implementation of +`Application.create()`: + +> The platform **MUST** call the `Application.create` method of the app, +> and wait for `appCreateTimeout` milliseconds for either a successful +> result or error response. +> +> Once the platform receives a success, then the app is considered to have any +> important Firebolt notifications set up and is ready +> to be activated and presented to the user. +> +> If the app times out or throws an error, then the app **MUST** be +> immediately terminated by the platform. + +Apps **SHOULD** set up any Firebolt event listeners either before calling +`Lifecycle.provide` or during `create()`, since the platform will wait until +the app is ready before dispatching many critical events such as Lifecycle and +Presentation events. + +Apps **SHOULD** acquire any important authentication needed for the app to +function during initialization. + +Apps **MAY** load a limited set of global display resources, e.g. a global +style sheet or a logo used throughout the experience, during initialization. + +During the `create()` transition, apps **MUST** inspect the `params` parameter +for [Parameters](#6-create-parameters) and prepare to fulfill the provided +launch configuration. + +Example Launch Parameters: +```json +{ + "preload": true, + "preloadReason": "boot" +} + +``` + +Once the `create` method returns the app **MUST** be immediately transitioned +to the `RUNNING` state. +### 5.2. Activating an app + + +Activating an app transitions it to the `ACTIVE` state so that it becomes part +of the user's experience. + +Firebolt apps that have permission to use the +`xrn:firebolt:capability:lifecycle:activate` capability **MUST** implement +`Activatable.activate()`. + +The platform may activate apps for any number of reasons that are out of scope +for this document. + +To activate an app, platforms **MUST** use the following process. + +If the app is already in the `ACTIVE` state, then it is already activated and +there is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to activate an app that is +already in the active state and the remainder of this section does not apply. + +If the app is not loaded, then the platform **MUST** load it first. + +If the app is not initialized, the platform **MUST** +[initialize](#51-initializing-an-app) it first. + +If the app is suspended, then it **MUST** be [resumed](#55-resuming-an-app) +first. + +At this point, the app **MUST** be in the `RUNNING` state. + +If an app provides the `xrn:firebolt:capability:lifecycle:activatable` +capability, then the platform **MUST** call the app's implementation of +`Activatable.activate()`: + +> The platform **MUST** call the `Activatable.activate` method of the app, +> and wait for `appActivateTimeout` milliseconds for either a success or an +> error response. +> +> The `activate` call **MUST** include a `NavigationIntent`. +> +> Once the platform receives a success response, then the app may be +> moved to the `ACTIVE` state. +> +> If the app times out or throws an error, then the app **MUST** +> be terminated. + +If the app provides the `xrn:firebolt:capability:presentation:navigation` +capability then the `intent` **MAY** be any [Navigation +Intent](../intents/navigation.md) the app is configured to support. + +If the app does not provide the capability, then the `intent` **MUST** be the +[Launch Intent](../intents/navigation.md). + +During the `activate()` transition, the app **MUST** inspect the `intent` +parameter and prepare to fulfill a specific Navigation Intent for this +activation which may include: + +- Loading any metadata needed to display the user's intended content. +- Performing any entitlement checks to decide whether to display a player or a purchase flow +- Any other steps necessary to present content to the user quickly + +The platform **MAY** display a loading screen for the entire duration of the +`activate()` callback, and apps **SHOULD** do whatever is necessary to present +the user with content that fulfills the `intent` without additional loading +screens in the app's UX. + +### 5.3. Deactivating an app + +Deactivating an app transitions it to the `RUNNING` state, so that it consumes +fewer resources. This **MAY** be paired with a transition of the [Presentation](./presentation.md) +state, so that it is no longer part of the user's experience. + +Firebolt apps that have permission to use the +`xrn:firebolt:capability:lifecycle:activate` capability **MUST** implement +`Activatable.deactivate()`. + +The platform may deactivate apps for any number of reasons that are out of scope for +this document. + +Apps **MAY** request to be deactivated, via the `Lifecycle.close()` API method. + +To deactivate an app, platforms **MUST** use the following process. + +If an app is already in the `RUNNING`, `SUSPENDED`, or `HIBERNATED` state, then +it is already deactivated and there is no need to do anything else. The platform +**MUST NOT** dispatch any *additional* lifecycle notifications when attempting +to deactivate such an app and the remainder of this section does not apply. + +If an app is already performing a `deactivate()` transition, the platform +**MUST** ignore the new attempt to deactivate the app, allow the pending closure to +complete, and the remainder of this section does not apply. + +If an app is already performing an `activate()` transition, the platform +**MUST** wait for the activate call to succeed or fail and then skip the +remaining [activation steps](#52-activating-an-app) and fulfill the remainder +of this section instead. + +If an app is currently [initializing](#51-initializing-an-app), the platform +**MUST** wait for initialization to succeed or fail and then skip any +activation that may have been pending, and the remainder of this section does +not apply. + +If an app is currently in a [destroy](#58-destroying-an-app) transition then +the app cannot be deactivated and the platform **MUST NOT** attempt to, and the +remainder of this section does not apply. + +At this point, the app **MUST** be in the `ACTIVE` state. + +If an app provides the `xrn:firebolt:capability:lifecycle:activatable` +capability, then the platform **MUST** call the app's implementation of +`Activatable.deactivate()`: + +> The platform **MUST** call the `Activatable.deactivate` method on the app, +> and wait for `appDeactivateTimeout` milliseconds for a success or error response. +> +> Once the platform receives a success, then the app may be moved to the `RUNNING` state. +> +> If the app times out or makes an error, then the app **MUST** +> be terminated. + +During the `deactivate()` transition, the app **MUST** deallocate any A/V +decoders. + +The platform **MAY** begin to transition the app out of view as soon as +`deactivate()` is called. +### 5.4. Suspending an app + + +Suspending an app transitions it to the `SUSPENDED` state, where it is no +longer allowed to use graphics composition, and is expected to consume less CPU +and RAM. + +The platform may suspend apps in order to free up memory, or for any number of +reasons that are out of scope for this document. However, it is the platform's +decision to suspend an app, not the app itself. + +To suspend an app, platforms **MUST** use the following process. + +If an app is in the `ACTIVE` state then it cannot yet be suspended, and +**MUST** be deactivated first. + +If an app is in the `HIBERNATED` state then it cannot be suspended and there is +no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to suspend an app that is +already in the `HIBERNATED` state and the remainder of this section does not +apply. + +If an app is already in the `SUSPENDED` state, then it is already suspended and +there is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to suspend an app that is +already in the suspended state and the remainder of this section does not +apply. + +If the app is not loaded, or is not in the `RUNNING` state, then it cannot be +suspended, and the remainder of this section does not need to happen. + +At this point, the app **MUST** be in the `RUNNING` state. + +Since every app **MUST** provide the +`xrn:firebolt:capability:lifecycle:application` capability, the platform +**MUST** call the app's implementation of `Application.suspend()`: + +> The platform **MUST** call the `Application.suspend` method of the app, +> and wait for `appSuspendTimeout` milliseconds for either a success or error +> in response. +> +> Once the platform receives a success, then the app may be moved to the +> `SUSPENDED` state. +> +> If the app times out or throws an error, then the app **MUST** be +> [destroyed](#58-destroying-an-app). + +During the `suspend()` transition, the app: + +> **MUST** deallocate any graphics surface. +> +> **SHOULD** reduce memory usage, if possible. +### 5.5. Resuming an app + +Resuming an app allows it to reallocate graphics composition and reload any +resources it might have deallocated during `suspend()`. + +The platform may resume apps so they can access more resources or in +preparation to activate them. + +To resume an app, platforms **MUST** use the following process. + +If an app is not in the `SUSPENDED` state, then it cannot be resumed and there +is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to resume an app that is +not in the `SUSPENDED` state and the remainder of this section does not apply. + +At this point, the app **MUST** be in the `SUSPENDED` state. + +Next, the platform **MUST** remove any restrictions on access the graphics +compositor. + +Suspended apps **MUST** provide the +`xrn:firebolt:capability:lifecycle:application` capability, so the platform +**MUST** call the app's implementation of `Application.resume()`: + +The platform **MUST** call the `Application.resume` method of the app, +and wait for `appResumeTimeout` milliseconds for either a success or error +response. + +Once the platform receives a success, then the app may be moved +to the `RUNNING` state. + +If the app times out or throws an error, then the app **MUST** be +terminated. + +During the `resume()` transition, apps **SHOULD** reallocate graphics +composition and other necessary resources. + +### 5.6. Putting an app into hibernation +Putting an app into hibernation allows the platform to copy the apps memory stack to +storage and terminate the app in order to save memory. + +An app that has been put into hibernation **MUST** be able to be brought back into +memory / CPU in the same state it had been in. + +Firebolt apps that have permission to use the +`xrn:firebolt:capability:lifecycle:hibernation` capability **MUST** implement +`Hibernation.hibernate()`. + +To put an app into hibernation, platforms **MUST** use the following process. + +If an app is not in the `SUSPENDED` state, then it cannot be put into hibernation and there +is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to resume an app that is +not in the `SUSPENDED` state and the remainder of this section does not apply. + +At this point, the app **MUST** be in the `SUSPENDED` state. + +Next, the platform **MUST** copy the apps CPU and memory state to some persistant +storage. How platforms implement this is out of scope for this document. + +Hibernation apps **MUST** provide the +`xrn:firebolt:capability:lifecycle:hibernation` capability, so the platform +**MUST** call the app's implementation of `Hibernation.hibernate()`: + +Once the platform receives a success, then the app may be moved +to the `HIBERNATED` state. + +If the app times out or throws an error, then the app **MUST** be +terminated. + +During the `hibernate()` transition, apps **SHOULD** note the clock time in order +to determine the duration of hibernation when the app is restored. +composition and other necessary resources. + +### 5.7. Restoring an app from hibernation +Restoring an app from hibernation allows the platform to copy the apps memory stack back +from storage and relaunch the app in the original state. + +Firebolt apps that have permission to use the +`xrn:firebolt:capability:lifecycle:hibernation` capability **MUST** implement +`Hibernation.restore()`. + +To restore an app from hibernation, platforms **MUST** use the following process. + +If an app is not in the `HIBERNATED` state, then it cannot be restored from hibernation and there +is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to restore an app that is +not in the `HIBERNATED` state and the remainder of this section does not apply. + +At this point, the app **MUST** be in the `HIBERNATED` state. + +Next, the platform **MUST** copy the apps CPU and memory state back from persistant +storage. How platforms implement this is out of scope for this document. + +Hibernated apps **MUST** provide the +`xrn:firebolt:capability:lifecycle:hibernation` capability, so the platform +**MUST** call the app's implementation of `Hibernation.restore()`. + +Once the platform receives a success, then the app may be moved +to the `SUSPENDED` state. + +If the app times out or throws an error, then the app **MUST** be +terminated. + +During the `restore()` transition, apps **SHOULD** check how long it had been in +the `HIBERNATED` state to determine if any processes need to be reset, reauthenticated, etc. + +### 5.8. Destroying an app + +Destroying an app transitions it out of memory, so that it is no longer using +resources on the device. + +The platform may destroy apps for any number of reasons that are out of scope +for this document. + +To destroy an app, platforms **MUST** use the following process. + +If an app is not in the `RUNNING` state, then it cannot be destroyed and there +is no need to do anything else. The platform **MUST NOT** dispatch any +*additional* lifecycle notifications when attempting to destroy an app that is +not in the `RUNNING` state and the remainder of this section does not need to +happen. + +At this point, the app **MUST** be in the `RUNNING` state. + +Since every app **MUST** provide the +`xrn:firebolt:capability:lifecycle:application` capability, the platform +**MUST** call the app's implementation of `Application.destroy()`: + +> The platform **MUST** call the `Application.destroy` method of the app, +> and wait for `appDestroyTimeout` milliseconds for either a success or error +> response. +> +> Once the platform receives a success, then the platform may proceed with app +> destroying. +> +> If the app times out or throws an error, then the app **MUST** +> be terminated. + +### 5.9. Terminating an app + +Terminating an app removes it from memory without dispatching any state +changes. + +The platform **SHOULD** terminate apps when one of the transitions outlined +here fails for some reason, or if an app becomes non-responsive. + +Terminating an app results in removing it from memory and all resources held by +the app and it's container being freed up. + +Platforms **MAY** terminate an app when needed but **SHOULD NOT** do this in +place of graceful [destroying](#58-destroying-an-app). + +## 6. Create Parameters + +The `CreateParameters` type is an object with the following properties: + +```typescript +type CreateParameters = { + preload: boolean, + preloadReason?: "boot" | "restart" | "user" +} +``` + +## 7. Core SDK APIs + +The following APIs are exposed by the Firebolt Core SDK. + +### 7.1. Application Interface + +The `Application` interface is implemented by Apps to provide resource +management around memory as an Application moves through the core lifecycle +states: +- `INITIALIZING` +- `RUNNING` +- `SUSPENDED` + + +All apps **MUST** implement the Application interface. +```typescript +interface Application { + function create(params: CreateParameters): Promise; + function suspend(): Promise; + function resume(): Promise; + function destroy(): Promsie; +} + +``` +| Method | Description | +|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `create()` | Called when the platform is ready to create the lifecycle session for the app. Only called only once, during the `INITIALIZING` state. | +| `suspend()` | Called when the platform requires the app to deallocate its graphics surface and reduce memory as much as possible. This may be called anytime the app is in the `RUNNING` state. | +| `resume()` | Called when the platform wants the app to reallocate its graphics surface and prepare to be potentially used. | +| `destroy()` | Called when the platform is ready to end the lifecycle session for the app. Only called once. | + +### 7.2. Activatable Interface + +The `Activatable` interface is implemented by Apps that provide user +perceptible experiences, e.g. visible, audible, or user input. + +These types of apps require additional resource management +```typescript +interface Activatable { + function activate(intent: NavigationIntent): Promise; + function deactivate(): Promise; +} + +``` +| Method | Description | +|----------------|--------------------------------------------------------------------------------------------------------------------------------| +| `activate()` | Called when the platform is ready to move the app into the `ACTIVE` state. A/V resources may be allocated. | +| `deactivate()` | Called when the platform is ready to move the app out of the `ACTIVE` state and into `RUNNING` to deallocate any A/V decoders. | + +### 7.3. Hibernation Interface + +The `Hibernation` interface is implemented by Apps that are able to handle being +put into hibernation and then restored at a later point in time. + +These types of apps require additional resource management to reestablish +network connections and may also require additional thread safety checks. +```typescript +interface Hibernation { + function hibernate(): Promise; + function restore(): Promise; +} + +``` +| Method | Description | +|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------| +| `hibernate()` | Called when the platform is ready to move the app into the `HIBERNATED` state where it will no longer have access to the CPU. | +| `restore()` | Called when the platform is ready to move the app out of the `HIBERNATED` state and into `RUNNING`. Network connections should be reestablished here. | + +### 7.4. Example App + +Example: +```typescript +import { Lifecycle } from '@firebolt-js/sdk' + +class ExampleApplication implements Lifecycle.Application, Lifecycle.Activatable { + + async function create(params: CreateParameters): void { + } + + async function activate(intent: NavigationIntent, session: ProviderSession): void { + // reallocate A/V + } + + async function deactivate(): void { + // free up MSE + video.src = "" + video.load() + } + + async function suspend(): void { + // The quicket way to save memory & CPU is to clear the DOM + document.body.innerHTML = '' + } + + async function resume(): void { + // recreate UI + const ux = await createMyUX(); + document.body.appendChild(ux) + } + + async function destroy(): void { + // final analytics call + await fetch("https://example.com/app/metrics/destroy"); + } +} + +Lifecycle.provide([ + "xrn:firebolt:capability:lifecycle:application", + "xrn:firebolt:capability:lifecycle:activatable" + ], new ExampleApplication()) + +``` + +**NOTE**: we need to support passing an array of capabilities for a single +class. + +See the [Firebolt API +Documentation](https://developer.comcast.com/firebolt/core/sdk/latest/api/) for +details around syntax, etc. + +### 7.5. Close + +The Lifecycle.close() API allows an app to request that it be closed by the +platform. + +This method requires a reason parameter, which tells the platform why the app +is requesting to be closed: + +| Reason | Description | +|---------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CloseReason.REMOTE_BUTTON | The user pressed the back or last button on the RCU and the App has determined it is at the top of it's navigation stack and should go back to the platform home screen. | +| CloseReason.USER_EXIT | The user selected an exit control exposed by the app's UI. | +| CloseReason.ERROR | The app is experiencing unrecoverable issues and needs to be closed and destroyed. | + +Platforms generally **SHOULD** respect this call and move the app to the +running state, but there may be edge cases where this is not possible, e.g. the +app is considered to be the default experience for the device, and closing it +would leave no other UX present. + +When the request to close is not respected, the `Lifecycle.close()` method +**MUST** return an error. + +Platforms **MAY** prioritize apps to be destroyed based on the reason provided. +For example, apps closed due to the RCU are less likely to be destroyed since +it may be an accidental RCU press, whereas an explicit user exit is more likely +to be intentional. + +### 7.6. State + +The Lifecycle.state() method provides convenient access to the current state, +and is implemented by the Core SDK listening to all state notifications. This +method **MUST NOT** be asynchronous. + +## 8. Lifecycle Configuration + +In order to enable Firebolt Certification of a device's Lifecycle Management +features, the device **MUST** support the following configuration options, so +that the Firebolt Certification Test Suite knows which optional conditions to +test for, and for how long to wait for state transitions. + +The LifecyclePolicy fields are: + +| Field | Type | Required | Description | +|----------------------|--------|----------|--------------------------------------------------------------------------------------------------------------------------| +| appInitializeTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating a loaded app that did not call `Lifecycle.provide()`. | +| appCreateTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating a loaded app that did not finish `create()`. | +| appDestroyTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did not finish `destroy()`. | +| appActivateTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `activate()`. | +| appDeactivateTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `deactivate()`. | +| appSuspendTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `suspend()`. | +| appResumeTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `resume()`. | +| appHibernateTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `hibernate()`. | +| appRestoreTimeout | bigint | Yes | Number of milliseconds the platform should wait before terminating an app that did finish `restore()`. | diff --git a/requirements/specifications/lifecycle/presentation.md b/requirements/specifications/lifecycle/presentation.md new file mode 100644 index 000000000..ae401fc07 --- /dev/null +++ b/requirements/specifications/lifecycle/presentation.md @@ -0,0 +1,254 @@ +# App Presentation + +Document Status: Candidate Specification + +See [Firebolt Requirements Governance](../../governance.md) for more info. + +| Contributor | Organization | +| ------------------------- | ------------ | +| Andrew Bennett | Sky | +| Cody Bonney | Charter | +| Bart Catrysse | Liberty | +| Tim Dibben | Sky | +| Piotr Kobzda | Liberty | +| Jeremy LaCivita | Comcast | +| Ramprasad Lakshminarayana | Sky | +| Kevin Pearson | Comcast | +| Jan Pedersen | Sky | +| Peter Yu | Comcast | + +## 1. Overview + +This document describes the requirements that Firebolt platforms and Firebolt +applications must fulfill when managing App Presention. *App Presentation* +refers to the display, focus, and navigational aspects of an App. + +The *display* of an app refers to its visibility and size. + +Whether an app has an *overlay* refers to any other apps or UX being presented +on top of the app. + +Apps that are presented to users by the platform may receive *navigation* +intents, which are like deep links from the platform. + + +## 2. Table of Contents +- [1. Overview](#1-overview) +- [2. Table of Contents](#2-table-of-contents) +- [3. Focus](#3-focus) +- [4. Visible](#4-visible) +- [5. Display](#5-display) + - [5.1. Display vs Lifecycle](#51-display-vs-lifecycle) +- [6. Loading Screen](#6-loading-screen) + - [6.1. Platform-provided Loading Screen](#61-platform-provided-loading-screen) + - [6.2. App-provided Loading Screen](#62-app-provided-loading-screen) +- [7. Overlay](#7-overlay) + - [7.1. Overlay vs Focus](#71-overlay-vs-focus) +- [8. Navigation](#8-navigation) +- [9. Picture-in-Picture Video](#9-picture-in-picture-video) + + +## 3. Focus + +The `Presentation` module **MUST** have a `focus` boolean property that returns +whether or not the app has input, e.g. RCU, focus. + +An app with focus **MUST** receive key presses from the RCU. + +Firebolt platforms **MAY** decide which RCU keys are privilleged, and do not go to apps. + +Firebolt platforms **MAY** forward RCU keys to an app that does not have focus, e.g. a pause key while there's a settings overlay. + +An app **MAY** receive intents from the platform regardless of whether it has focus or not. + +As a property, this API also has an `onFocusChanged` notification. + +## 4. Visible +The `Presentation` module **MUST** have a `visibile` boolean property that returns `true` if the `display` is one of `fullscreen`, `scaled`, `thumbnail`. + +## 5. Display + +The `Presentation` module **MUST** have a `display` string property that +returns one of the following values: + +| Value | Description | +|--------------|-------------------------------------------------------------------------------------------------------------------------| +| `fullscreen` | The app is displayed such that the dimensions fill the entire screen | +| `offscreen` | The app has it's graphics surface attached, but not displayed on the screen at the moment, e.g. scrolled out of view | +| `scaled` | The app is displayed at a size smaller than the entire screen but at least 25% of the width or height | +| `thumbnail` | The app is displayed at a size smaller than 25% of the width or height of the entire screen | +| `loading` | The platform is displaying a loading screen while the app prepares to be activated | +| `none` | The app does not have its graphics surface attached to the screen | + +Note that if a scaled or thumbnailed app goes offscreen, it's now offscreen. + +### 5.1. Display vs Lifecycle + +Each Lifecycle state only supports certain display states: + +| Lifecycle | Supported Displays | +|----------------|--------------------------------------------------| +| `initializing` | `none`, `loading` | +| `active` | `fullscreen`, `scaled`, `thumbnail`, `offscreen` | +| `running` | `none`, `loading` | +| `suspended` | `none`, `loading` | +| `sleeping` | `none`, `loading` | + +See [Picture-in-picture](#9-picture-in-picture-video) for exceptions to this. + +## 6. Loading Screen +In order to manage user expectations, Firebolt platforms **MAY** display +loading screens to end users when an app is going to be activated. Loading +Screens may be rendered either by the platform, the app, or both, depending on +Capability configuration. + +Firebolt platforms **MAY** decide when an app activation warrents a loading +screen, for example when an app will be initialized or woken from sleep before +activation. + +If an app has the `xrn:firebolt:capability:presentation:loading-screen` +capability and the platform chooses to utilize the app's loading screen, the +app **MAY** be made visible any time from the beginning of activate() +transition and **MUST** be made visible no later than the end. + +When the app is made visbile, the platform **MUST** update the display state to one of: + +- `fullscreen` +- `scaled` +- `thumbnail` +- `offscreen` + +If an app does not have the +`xrn:firebolt:capability:presentation:loading-screen` capability or the +platform decides not to use the app's loading screen, the app **MUST** be made +visible at the end of the activate() transition. + +It is up to each platform to determine when a loading screen is useful. + +### 6.1. Platform-provided Loading Screen + +If an app provides the `xrn:firebolt:capability:presentation:loading-screen` +capability, then the platform **MAY** use the app-provided loading screen, in +which case, the rest of the section does not apply. + +If the platform determines that a platform loading screen will be displayed, +then: + +> The loading screen **SHOULD** include a loading image referenced in the app's +> manifest and cached on the device. +> +> The loading screen **MUST** be displayed when the user attempts to launch the +> app. +> +> The loading screen **MUST** stay displayed until the app becomes active. +> +> The presentation state of the app **MUST** be `LOADING` for the entire time +> the loading screen is displayed. +> +> Each Firebolt platform **MAY** define what "load screen" means in these +> requirements. + +See [Lifecycle](./index.md) for more info on launching. + +### 6.2. App-provided Loading Screen + +If an app provides the `xrn:firebolt:capability:presentation:loading-screen` +capability, then the platform **MAY** invoke this capability in some +situations. + +If the platform determines that an app loading screen will be displayed, then: + +> The platform provided loading screen **MAY** be displayed first. +> +> If the platform provided loading screen is displayed then the app's +> presentation state should be `loading`. +> +> The app **MAY** be made visible at the beginning of the activate transition. +> +> The app **MAY** be made visible at a later point during the activate +> transition based on platform-specific requirements, e.g. detecting that the +> app's graphics surface has been utilized. +> +> The app **MUST** be made visible no later than the end of the activate +> transition. + +The presentation state of the app **SHOULD NOT** be `none` at any time during +the `activate()` transition. + +See [Lifecycle](./index.md) for more info on loading and activating apps. + +## 7. Overlay +The `Presentation` module **MUST** have an `overlay` string property that +informs the app when a focus-consuming overlay is present. + +| Value | Description | +|------------|-----------------------------------------------------------------------------------------------| +| `partial` | There is a overlay partially covering the app such that the content is still mostly viewable. | +| `blocking` | There is a blocking overlay covering a majority of the app. | +| `none` | There is nothing covering the app. | + +### 7.1. Overlay vs Focus + +| Focus | Overlay | +| ----- | ----------------------- | +| true | none | +| false | partial, blocking, none | + +## 8. Navigation +Typically navigation is handled either when the app is activated, via the +`intent` parameter of the [`activate()` +method](./index.md#52-activating-an-app), or by internal input within the app. + +There are other times when the platform needs to inform an app of a user's +intent to navigate when the app is already `ACTIVE`, e.g. when a voice command +is executed or an RCU sends a reserved key to the platform that would result in +the app taking some action, e.g. going to its home screen. + +If the app provides the `xrn:firebolt:capability:presentation:navigation` +capability then the platform **MUST** call the `Presentation.navigateTo` method +of the app's provider and pass an `intent` to an app that is in the `ACTIVE` +state. + +To invoke an app's `navigateTo` provider API the platform **MUST**: + +> The platform **MUST** call the `Presentation.navigateTo` method of the App, +> and wait for `appNavigateToTimeout` milliseconds for either a result or error +> response. +> +> Once the platform receives a result, then the platform may proceed with the +> expectation that the app in fact will handle the `intent`. +> +> If the app times out or returns an error, then the app **MAY** have focus +> removed or be deactivated, so that the platform can handle the +> `intent` in some other way. + +An app **SHOULD** successfully handle the `navigateTo` call if the app is capabable +of handling the intent. Otherwise the app **SHOULD** throw an error. + +Platforms **MAY** decide to remove focus from or deactivate apps that do not +acknowledge the `navigateTo` call successfully. + +If an app receives multiple navigate calls in parallel, it **MAY** ignore all but the final call. + +An app can decide how to handle multiple navigate calls, but +**SHOULD** execute the final call. + +To fullfil a prioritized `navigateTo()` call, the app **MUST** inspect the +`intent` parameter and prepare to fulfill a specific [Navigation +Intent](../intents/navigation.md) which may include: + + - Loading any metadata needed to display the user's intended content. + - Performing any entitlement checks to decide whether to display a player or a purchase flow + - Any other steps necesary to present content to the user quickly + +The app **MAY** display a loading indicator. + +## 9. Picture-in-Picture Video +If an app has the `xrn:firebolt:capability:media:picture-in-picture`, then it +can keep playing audio/video when the app is in the `none` display state and +the audio & video will be presented to the user in bounding box determined by +the platform. Note that this does not include the entire UX of the app, just +the active media pipeline. + +When an app has this capability, it **MAY** be put into the `none` display +state while in the `active` Lifecycle state. diff --git a/requirements/specifications/openrpc-extensions/app-passthrough-apis.md b/requirements/specifications/openrpc-extensions/app-passthrough-apis.md index ec23922e6..efc8f61c5 100644 --- a/requirements/specifications/openrpc-extensions/app-passthrough-apis.md +++ b/requirements/specifications/openrpc-extensions/app-passthrough-apis.md @@ -115,7 +115,7 @@ The platform **MUST** call the provider method from the [best candidate](#8-best If the platform method result schema matches the `x-response` schema on the provider method then the value **MUST** be used as-is. -Otherwise if the platform method result schema has a property that matches the `x-response` schema on the provider method then the value **MUST** be composed into an object under the corresponding property name and the platform **MUST** apply any [result transformations](#9-result-transformations) to the composed result. +Otherwise if the platform method result schema has any properties that matches the `x-response` schema on the provider method then the value **MUST** be composed into an object under the corresponding property name and the platform **MUST** apply any [result transformations](#9-result-transformations) to the composed result. ### 4.4. Pass-through notifications Firebolt events have a synchronous subscriber registration method, e.g. `Lifecycle.onInactive(true)`, in addition to asynchronous notifications when the event actually happens. For events powered by an app pass-through, only the asynchronous notifications are passed in by the providing app. The initial event registration is handled by the platform, and the success response is not handled by the providing app. @@ -239,6 +239,11 @@ The policy **MAY** have an `inFocus` boolean. If the policy has `inFocus` set to `true` then any app without RCU input focus when the capability is invoked **MUST NOT** be considered a candidate. ## 6. Best Candidate + +**TODO**: fix section 5 and this section... + +Candidate apps are all apps that have registered to provide the capability. + If there is only one candidate then it **MUST** be the best candidate. If there is more than one candidate, then the candidate app that most recently had RCU input focus **MUST** be the best candidate. diff --git a/requirements/style-guide-and-template.md b/requirements/style-guide-and-template.md index 2a9a1ed1d..09180e575 100644 --- a/requirements/style-guide-and-template.md +++ b/requirements/style-guide-and-template.md @@ -1,28 +1,42 @@ # Requirements Style Guide -Document Status: Working Draft +Document Status: Working Draft -See [Firebolt Requirements Governance](./governance.md) for more info. +See [Firebolt Requirements Governance](./governance.md) for more info. -**NOTE**: Update this link based on your directory depth ^^ - -| Contributor | Organization | -| -------------- | -------------- | -| TBD | TBD | +**NOTE**: Update this link based on your directory depth ^^ +| Contributor | Organization | +| ----------- | ------------ | +| TBD | TBD | ## 1. Overview -This document is both a style guide *and* a template for Firebolt Requirements Specifications. -The Overview section is a non-normative or informative introduction to the contents and subject matter of the document. This is included to introduce the reader to the overall problem, solution, and scope. No formal requirements will be included here, as it will often be skipped by readers that are already familiar with the document. +This document is both a style guide *and* a template for Firebolt Requirements +Specifications. -Overviews can be as long or short as appropriate for the subject matter, and should have a target audience ranging from technical product managers to engineering teams that may be testing, implementing, or integrating with the functionality described in the document. +The Overview section is a non-normative or informative introduction to the +contents and subject matter of the document. This is included to introduce the +reader to the overall problem, solution, and scope. No formal requirements will +be included here, as it will often be skipped by readers that are already +familiar with the document. -The overview must contain the following towards the end: +Overviews can be as long or short as appropriate for the subject matter, and +should have a target audience ranging from technical product managers to +engineering teams that may be testing, implementing, or integrating with the +functionality described in the document. -Requirements documents are written using the [IETF Best Common Practice 14](https://www.rfc-editor.org/rfc/rfc2119.txt) and should include the following summary in the Overview section: +The overview must contain the following towards the end: -The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in [BCP 14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. +Requirements documents are written using the [IETF Best Common Practice +14](https://www.rfc-editor.org/rfc/rfc2119.txt) and should include the +following summary in the Overview section: +The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL +NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**NOT +RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be +interpreted as described in [BCP +14](https://www.rfc-editor.org/rfc/rfc2119.txt) [RFC2119] [RFC8174] when, and +only when, they appear in all capitals, as shown here. ## 2. Table of Contents - [1. Overview](#1-overview) - [2. Table of Contents](#2-table-of-contents) @@ -33,60 +47,101 @@ The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL - [4. Example Section](#4-example-section) - [4.1. Example Feature](#41-example-feature) -**NOTE**: This is a simple table of contents. It should include links to all headers in the document, except for the top-level header (i.e. `# Title`). It is recommended to use a Markdown plugin to generate this based on headers ranging from level two to level six. Delete this note from your actual spec :) +**NOTE**: This is a simple table of contents. It should include links to all +headers in the document, except for the top-level header (i.e. `# Title`). It +is recommended to use a Markdown plugin to generate this based on headers +ranging from level two to level six. Delete this note from your actual spec :) ## 3. Specification Style Requirements -Firebolt uses method templates in order to code-generate consistent APIs. For example, methods with the `"property"` tag only need to have the `getter` editorially defined. The Firebolt OpenRPC tools will auto-generate the `setter` and `subscriber` as OpenRPC methods with matching types. Additionally, the Firebolt OpenRPC tools wil then code-generate the getter, setter, and subscriber as APIs in various languages using templates. -This enables both consistent APIs (all properties have a recongnizable pattern) and consistent SDK implementation, which reduces the code that needs to be tested. +Firebolt uses method templates in order to code-generate consistent APIs. For +example, methods with the `"property"` tag only need to have the `getter` +editorially defined. The Firebolt OpenRPC tools will auto-generate the `setter` +and `subscriber` as OpenRPC methods with matching types. Additionally, the +Firebolt OpenRPC tools wil then code-generate the getter, setter, and +subscriber as APIs in various languages using templates. +This enables both consistent APIs (all properties have a recongnizable pattern) +and consistent SDK implementation, which reduces the code that needs to be +tested. ### 3.1. General Style Requirements -All headers **MUST** be numbered, and have the parent header as the prefix, separated with '.' -Module and method names, as well as constants **MUST** be in monospace font, e.g. the `Foo` module **MUST** have a `bar` method that returns `true`. Specs should use JavaScript notation for any code examples if the spec is not targeting another specific language binding, e.g. a spec about Event listeners in C++ would use C++ syntax. +All headers **MUST** be numbered, and have the parent header as the prefix, +separated with '.' -String constants and values **MUST** be wrapped in quotes for clarity, e.g. `"Hello World"`. +Module and method names, as well as constants **MUST** be in monospace font, +e.g. the `Foo` module **MUST** have a `bar` method that returns `true`. Specs +should use JavaScript notation for any code examples if the spec is not +targeting another specific language binding, e.g. a spec about Event listeners +in C++ would use C++ syntax. +String constants and values **MUST** be wrapped in quotes for clarity, e.g. +`"Hello World"`. ### 3.2. Firebolt Style Requirements -All Firebolt APIs exposed for building Firebolt Apps **MUST** be exposed as JSON-RPC methods on a WebSocket accessible to the device, typically running locally. -Parameters and return values for all APIs **MUST** be described using JSON-Schema schemas. +All Firebolt APIs exposed for building Firebolt Apps **MUST** be exposed as +JSON-RPC methods on a WebSocket accessible to the device, typically running +locally. -Methods **MUST** be grouped into “modules” or “packages” of functionality. +Parameters and return values for all APIs **MUST** be described using +JSON-Schema schemas. -The JSON-RPC method name of any method **MUST** follow the template: +Methods **MUST** be grouped into “modules” or “packages” of functionality. +The JSON-RPC method name of any method **MUST** follow the template: ``` . -``` -e.g. +``` +e.g. ``` lifecycle.ready -``` -JSON-RPC method names are case sensitive. +``` -Methods **MUST** have at least one capability used, managed, or provided by the method. +JSON-RPC method names are case sensitive. -Methods **MAY** require the use of more than one capability, but this means that the app must have permission to all of them. In order to enable App permissions to be evaluated in an isolated layer, separate from the method implementation itself, a Firebolt method **MUST NOT** be specified to add or remove fields based on the caller's permissions. +Methods **MUST** have at least one capability used, managed, or provided by the +method. -The words used in method and parameter names **SHOULD** be used as consistently as possible across the Firebolt API surface. See the [Firebolt API Glossary](./glossary.md) for words that Firebolt uses and how they are used. +Methods **MAY** require the use of more than one capability, but this means +that the app must have permission to all of them. In order to enable App +permissions to be evaluated in an isolated layer, separate from the method +implementation itself, a Firebolt method **MUST NOT** be specified to add or +remove fields based on the caller's permissions. +The words used in method and parameter names **SHOULD** be used as consistently +as possible across the Firebolt API surface. See the [Firebolt API +Glossary](./glossary.md) for words that Firebolt uses and how they are used. ### 3.3. Firebolt Method Templates -Methods **SHOULD** consider using the existing Firebolt method tags, in order to have a level of consistency across APIs. -If a Firebolt method is specified such that it requires a non-existant template, then a new Requirements Specification **MUST** be written and referenced by the specification that inspired it. Method templates **MUST** be designed with re-use in mind. +Methods **SHOULD** consider using the existing Firebolt method tags, in order +to have a level of consistency across APIs. +If a Firebolt method is specified such that it requires a non-existant +template, then a new Requirements Specification **MUST** be written and +referenced by the specification that inspired it. Method templates **MUST** be +designed with re-use in mind. ## 4. Example Section -A section describes group of closely related features. Many specifications have only one section, however, more complicated specifications may have many. The first paragraph of a section is typically a non-normative introduction to that section, and therefor does not contain any formal requirements. +A section describes group of closely related features. Many specifications have +only one section, however, more complicated specifications may have many. The +first paragraph of a section is typically a non-normative introduction to that +section, and therefor does not contain any formal requirements. ### 4.1. Example Feature -Each feature under a section will have it's own heading. Non-normative introductions to features are not typically needed, as the reader is ready to get into requirements at this point. It is recommended that all Feature headings under each Section contain only sentences or short paragraphs with formal requirements, e.g. MUST, SHOULD, MAY, MUST NOT, SHOULD NOT, etc. These sentences should be separated by blank lines for readability, e.g.: -This requirement **MUST** be satisifed. +Each feature under a section will have it's own heading. Non-normative +introductions to features are not typically needed, as the reader is ready to +get into requirements at this point. It is recommended that all Feature +headings under each Section contain only sentences or short paragraphs with +formal requirements, e.g. **MUST**, **SHOULD**, **MAY**, **MUST** NOT, **SHOULD +NOT**, etc. These sentences should be separated by blank lines for readability, +e.g.: + +This requirement **MUST** be satisifed. -This requirement **SHOULD** be satisfied. +This requirement **SHOULD** be satisfied. -This requirement **MUST** be satisfied. The requirement **MUST** be satisifed in this particular way. +This requirement **MUST** be satisfied. The requirement **MUST** be satisifed +in this particular way. diff --git a/src/js/github.io/markdown.mjs b/src/js/github.io/markdown.mjs new file mode 100644 index 000000000..b0e78a06e --- /dev/null +++ b/src/js/github.io/markdown.mjs @@ -0,0 +1,234 @@ +import nopt from 'nopt' +import path from 'path' +import { readJson, readDir, readFiles, readText, writeFiles, writeText, writeJson } from '../../../node_modules/@firebolt-js/openrpc/src/shared/filesystem.mjs' + +const knownOpts = { + 'file': [String] +} + +const defaultOpts = { +} + +const shortHands = { + 'f': '--file' +} + +// Last 2 arguments are the defaults. +const parsedArgs = Object.assign(defaultOpts, nopt(knownOpts, shortHands, process.argv, 2)) + +const signOff = () => console.log('\nThis has been a presentation of \x1b[38;5;202mFirebolt\x1b[0m \u{1F525} \u{1F529}\n') + +//const packageJson = await readJson(process.env.npm_package_json) +//const version = channel(packageJson.version) +const requirements = await readFiles(await readDir(path.join('.', 'requirements'), { recursive: true }), path.join('.')) + +const processFiles = (docs) => { + Object.keys(docs).forEach(ref => { + if (ref.endsWith('.md')) { + let data = docs[ref] + + data = fixBrokenLinks(data, ref, docs) + data = wrapText(data) + data = prettyTables(data) + data = bcp14(data) + + docs[ref] = data + } + }) + + // do external links after all local links are fixed + Object.keys(docs).forEach(ref => { + if (ref.endsWith('.md')) { + docs[ref] = fixBrokenExternalLinks(docs[ref], ref, docs) + } + }) +} + +function fixBrokenExternalLinks(data, ref, files) { + return fixBrokenLinks(data, ref, files, true) +} +function fixBrokenLinks(data, ref, files, external=false) { + + const getSlugs = (data) => { + // find all headers + const headers = data.match(/#+[ \t]+(([0-9]+\.)+)[ /t]+(.*?)\n/g) + + // turn to slugs + return headers.map(h => h.replace(/#/g, '')) + .map(h => h.replace(/\t/g, '')) + .map(h => h.replace(/\./g, '')) + .map(h => h.replace(/^ /g, '')) + .map(h => h.replace(/\n$/g, '')) + .map(h => h.replace(/ /g, '-')) + .map(h => h.toLowerCase()) + .map(h => '#' + h) + } + + const slugs = getSlugs(data) + const links = data.match(/\]\([^\)]*?\#[^\)]*?\)/gms) + + links && links.map(l => l.slice(2, -1)).forEach(link => { + if (!slugs.find(s => s === link)) { + // fix local links + if (!external) { + const best = slugs.find(s => s.match(new RegExp(link.replace(/^\#[0-9]+/, '#[0-9]+')))) || slugs.find(s => s.startsWith(link.split('-')[0] + '-')) + if (best) { + console.log('Fixing broken link: (' + link + ') -> (' + best + ')') + data = data.replace('](' + link + ')', '](' + best + ')') + } + } + // fix bad slugs in links to other files + else if (external && link.match(/[^\)]+?\#[^\)]*?/gms)) { + // external + const [file, slug] = link.split('#') + const fileRef = path.join(path.dirname(ref), file) + const fileSlugs = getSlugs(files[fileRef]) + if (!fileSlugs.find(s => s === '#' + slug)) { + const best = fileSlugs.find(s => s.match(new RegExp(('#'+slug).replace(/^\#[0-9]+/, '#[0-9]+')))) || slugs.find(s => s.startsWith(link.split('-')[0] + '-')) + if (best) { + console.log('Fixing broken external link: (' + link + ') -> (' + file + best + ')') + data = data.replace('](' + link + ')', '](' + file + best + ')') + } + } + } + } + }) + + return data +} + +/* TODO: + - Newline at top bug + - Multiple spaces bug +*/ +function wrapText(data) { + const lines = data.split('\n') + const maximum = 80 + let buffer = '' + let wrapped = [] + let width = 0 + const block_regex = /^\s*?\>/ + const code_regex = /^\s*?```/ + let code = false + + lines.forEach( (line, index) => { + + if (line.match(code_regex)) { + code = !code + } + + // skip lists, tables, headers, and blanks + if (code || line.match(/^\s*?\-/) || line.match(/^\s*?\|/) || line.match(/^\#+/) || line.match(/^\s*?$/)) { + buffer && (wrapped.push(buffer)) + buffer = '' + wrapped.push(line) + width = 0 + } + else { + const quote = line.match(block_regex) ? true : false + + if (quote) { + line = line.replace(block_regex, '').trim() + + if (!buffer) { + buffer = '> ' + width = 2 + } + else if (!line.trim()) { + buffer += '\n> \n> ' + width = 2 + } + } + + let first = true + line.split(/\s+/).filter(word => word).forEach((word, i, words) => { + if (word.match(block_regex)) { + throw "Found > in line: " + line + } + + if (word && !word.match(/^\s+$/)) { + let len = word.length + 1 // .replace(/\(.*?\)/g, '') + if (len > maximum && width === (quote ? 2 : 0)) { + buffer += (quote ? '> ' : '') + word + ' ' + width = len + (quote ? 2 : 0) + } + else if (width + len > maximum) { + buffer += '\n' + (quote ? '> ' : '') + word + ' ' + width = len + (quote ? 2 : 0) +// !first && (first = true) + } + else { + buffer += word + ' ' + width += len + } + } + first = false + }) + } + }) + + buffer && (wrapped.push(buffer)) + + return wrapped.join('\n') +} + +function prettyTables(data) { + const lines = data.split('\n') + const table_regex = /^\s*?\|/ + const column_regex = /(? line.trim().split(column_regex).slice(1, -1).map(c => (' ' + c.trim() + ' ').length) + + for (var i=0; i Math.max(w, widths[index])) + } + // pad each cell to match the max width + for (j=i; lines[j].match(table_regex); j++) { + lines[j] = lines[j].split(column_regex).map((cell, index) => { + // stuff before or after the table row + if (index === 0 || index === widths.length + 1) { + return cell + } + else { + if (cell.match(/^ \-+ $/)) { + return ' ' + '-'.repeat(widths[index-1]-2) + ' ' + } + else if (cell.match(/^\-+$/)) { + return '-'.repeat(widths[index-1]) + } + else { + return (' ' + cell.trim() + ' ').padEnd(widths[index-1]) + } + } + }).join('|') + i++ + } + } + } + + return lines.join('\n') +} + +function bcp14(data) { + return data + .replace(/([^\*])MUST(\s+)NOT([^\*])/gms, '$1**MUST$2NOT**$3') + .replace(/([^\*])SHOULD(\s+)NOT([^\*])/gms, '$1**SHOULD$2NOT**$3') + .replace(/([^\*])SHALL(\s+)NOT([^\*])/gms, '$1**SHALL$2NOT**$3') + .replace(/([^\*])NOT(\s+)RECOMMENDED([^\*])/gms, '$1**NOT$2RECOMMENDED**$3') + .replace(/([^\*])MUST([^\*])/gms, '$1**MUST**$2') + .replace(/([^\*])SHOULD([^\*])/gms, '$1**SHOULD**$2') + .replace(/([^\*])SHALL([^\*])/gms, '$1**SHALL**$2') + .replace(/([^\*])RECOMMENDED([^\*])/gms, '$1**RECOMMENDED**$2') + .replace(/([^\*])MAY([^\*])/gms, '$1**MAY**$2') + .replace(/([^\*])REQUIRED([^\*])/gms, '$1**REQUIRED**$2') + .replace(/([^\*])OPTIONAL([^\*])/gms, '$1**OPTIONAL**$2') +} + +processFiles(requirements) +writeFiles(requirements) + +signOff() diff --git a/src/js/version-specification/index.mjs b/src/js/version-specification/index.mjs index ec7c03b8e..4c0abe565 100644 --- a/src/js/version-specification/index.mjs +++ b/src/js/version-specification/index.mjs @@ -9,7 +9,7 @@ const loadJson = file => readFile(file).then(data => JSON.parse(data.toString()) const knownOpts = { 'capabilities': [Boolean], - 'legacy-support': [Number], + 'legacy-versions': [Number], 'source': [String], 'report': [Boolean] } @@ -22,7 +22,7 @@ const defaultOpts = { } const shortHands = { - 'l': '--legacy-versions', + 'l': '--legacy-version', 'c': '--capabilities', 't': '--target', 's': '--source', diff --git a/src/openrpc/_internal.json b/src/openrpc/_internal.json index 7f04a6dc1..f172cb5c4 100644 --- a/src/openrpc/_internal.json +++ b/src/openrpc/_internal.json @@ -1,82 +1,83 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Internal", - "description": "Internal methods for SDK / FEE integration", - "version": "0.0.0" - }, - "methods": [ - { - "name": "initialize", - "tags": [ - { - "name": "rpc-only" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:initialize" - ] - } - ], - "summary": "Initialize the SDK / FEE session.", - "description": "A single version of the Firebolt SDK is compiled into each app. When an app starts up, the SDK **MUST** call this method as soon as possible and **before** any other JSON-RPC methods are sent.", - "params": [ - { - "name": "version", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion" - }, - "summary": "The semantic version of the SDK." - } - ], - "result": { - "name": "session", - "summary": "Info about the SDK/FEE session", - "schema": { - "type": "object", - "required": ["version"], - "properties": { - "version": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion", - "description": "The semantic version of the FEE." - } - }, - "additionalProperties": false - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "version", - "value": { - "major": 1, - "minor": 0, - "patch": 0, - "readable": "Firebolt SDK 1.0.0" - } - } - ], - "result": { - "name": "Default Result", - "value": { - "version": { - "major": 1, - "minor": 0, - "patch": 0, - "readable": "Firebolt FEE 1.0.0" - } - } - } - } - ] - } - ], - "components": { - "schemas": { - } - } + "openrpc": "1.2.4", + "info": { + "title": "Internal", + "description": "Internal methods for SDK / FEE integration", + "version": "0.0.0" + }, + "methods": [ + { + "name": "initialize", + "tags": [ + { + "name": "rpc-only" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:lifecycle:initialize" + ] + } + ], + "summary": "Initialize the SDK / FEE session.", + "description": "A single version of the Firebolt SDK is compiled into each app. When an app starts up, the SDK **MUST** call this method as soon as possible and **before** any other JSON-RPC methods are sent.", + "params": [ + { + "name": "version", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion" + }, + "summary": "The semantic version of the SDK." + } + ], + "result": { + "name": "session", + "summary": "Info about the SDK/FEE session", + "schema": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion", + "description": "The semantic version of the FEE." + } + }, + "additionalProperties": false + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "version", + "value": { + "major": 1, + "minor": 0, + "patch": 0, + "readable": "Firebolt SDK 1.0.0" + } + } + ], + "result": { + "name": "Default Result", + "value": { + "version": { + "major": 1, + "minor": 0, + "patch": 0, + "readable": "Firebolt FEE 1.0.0" + } + } + } + } + ] + } + ], + "components": { + "schemas": {} + } } \ No newline at end of file diff --git a/src/openrpc/accessibility.json b/src/openrpc/accessibility.json index c010a6146..70aa81047 100644 --- a/src/openrpc/accessibility.json +++ b/src/openrpc/accessibility.json @@ -1,242 +1,244 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Accessibility", - "version": "0.0.0", - "description": "The `Accessibility` module provides access to the user/device settings for closed captioning and voice guidance.\n\nApps **SHOULD** attempt o respect these settings, rather than manage and persist seprate settings, which would be different per-app." - }, - "methods": [ - { - "name": "closedCaptions", - "summary": "Get the user's preferred closed-captions settings", - "params": [], - "tags": [ - { - "name": "deprecated", - "x-alternative": "Accessibility.closedCaptionsSettings()", - "x-since": "0.6.0" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "result": { - "name": "closedCaptionsSettings", - "summary": "the closed captions settings", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/ClosedCaptionsSettings" - } - }, - "examples": [ - { - "name": "Getting the closed captions settings", - "params": [], - "result": { - "name": "settings", - "value": { - "enabled": true, - "styles": { - "fontFamily": "monospaced_sanserif", - "fontSize": 1, - "fontColor": "#ffffff", - "fontEdge": "none", - "fontEdgeColor": "#7F7F7F", - "fontOpacity": 100, - "backgroundColor": "#000000", - "backgroundOpacity": 100, - "textAlign": "center", - "textAlignVertical": "middle", - "windowColor": "white", - "windowOpacity": 50 - }, - "preferredLanguages": [ - "eng", - "spa" - ] - } - } - } - ] - }, - { - "name": "closedCaptionsSettings", - "summary": "Get the user's preferred closed-captions settings", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "result": { - "name": "closedCaptionsSettings", - "summary": "the closed captions settings", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/ClosedCaptionsSettings" - } - }, - "examples": [ - { - "name": "Getting the closed captions settings", - "params": [], - "result": { - "name": "settings", - "value": { - "enabled": true, - "styles": { - "fontFamily": "monospaced_sanserif", - "fontSize": 1, - "fontColor": "#ffffff", - "fontEdge": "none", - "fontEdgeColor": "#7F7F7F", - "fontOpacity": 100, - "backgroundColor": "#000000", - "backgroundOpacity": 100, - "textAlign": "center", - "textAlignVertical": "middle", - "windowColor": "white", - "windowOpacity": 50 - }, - "preferredLanguages": [ - "eng", - "spa" - ] - } - } - } - ] - }, - { - "name": "voiceGuidance", - "summary": "Get the user's preferred voice guidance settings", - "params": [], - "tags": [ - { - "name": "deprecated", - "x-alternative": "Accessibility.voiceGuidanceSettings()", - "x-since": "0.6.0" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:voiceguidance" - ] - } - ], - "result": { - "name": "settings", - "summary": "the voice guidance settings", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/VoiceGuidanceSettings" - } - }, - "examples": [ - { - "name": "Getting the voice guidance settings", - "params": [], - "result": { - "name": "Default Result", - "value": { - "enabled": true, - "speed": 2 - } - } - } - ] - }, - { - "name": "voiceGuidanceSettings", - "summary": "Get the user's preferred voice guidance settings", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:voiceguidance" - ] - } - ], - "result": { - "name": "settings", - "summary": "the voice guidance settings", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/VoiceGuidanceSettings" - } - }, - "examples": [ - { - "name": "Getting the voice guidance settings", - "params": [], - "result": { - "name": "Default Result", - "value": { - "enabled": true, - "speed": 2 - } - } - } - ] - }, - { - "name": "audioDescriptionSettings", - "summary": "Get the user's preferred audio description settings", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:audiodescriptions" - ] - } - ], - "result": { - "name": "settings", - "summary": "the audio description settings", - "schema": { - "$ref": "#/components/schemas/AudioDescriptionSettings" - } - }, - "examples": [ - { - "name": "Getting the audio description settings", - "params": [], - "result": { - "name": "Default Result", - "value": { - "enabled": true - } - } - } - ] - } - ], - "components": { - "schemas": { - "AudioDescriptionSettings": { - "title": "AudioDescriptionSettings", - "type": "object", - "required": ["enabled"], - "properties": { - "enabled": { - "type": "boolean", - "description": "Whether or not audio descriptions should be enabled by default" - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Accessibility", + "version": "0.0.0", + "description": "The `Accessibility` module provides access to the user/device settings for closed captioning and voice guidance.\n\nApps **SHOULD** attempt o respect these settings, rather than manage and persist seprate settings, which would be different per-app." + }, + "methods": [ + { + "name": "closedCaptions", + "summary": "Get the user's preferred closed-captions settings", + "params": [], + "tags": [ + { + "name": "deprecated", + "x-alternative": "Accessibility.closedCaptionsSettings()", + "x-since": "0.6.0" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "result": { + "name": "closedCaptionsSettings", + "summary": "the closed captions settings", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/ClosedCaptionsSettings" + } + }, + "examples": [ + { + "name": "Getting the closed captions settings", + "params": [], + "result": { + "name": "settings", + "value": { + "enabled": true, + "styles": { + "fontFamily": "monospace_serif", + "fontSize": 1, + "fontColor": "#ffffff", + "fontEdge": "none", + "fontEdgeColor": "#7F7F7F", + "fontOpacity": 100, + "backgroundColor": "#000000", + "backgroundOpacity": 100, + "textAlign": "center", + "textAlignVertical": "middle", + "windowColor": "white", + "windowOpacity": 50 + }, + "preferredLanguages": [ + "eng", + "spa" + ] + } + } + } + ] + }, + { + "name": "closedCaptionsSettings", + "summary": "Get the user's preferred closed-captions settings", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "result": { + "name": "closedCaptionsSettings", + "summary": "the closed captions settings", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/ClosedCaptionsSettings" + } + }, + "examples": [ + { + "name": "Getting the closed captions settings", + "params": [], + "result": { + "name": "settings", + "value": { + "enabled": true, + "styles": { + "fontFamily": "monospace_serif", + "fontSize": 1, + "fontColor": "#ffffff", + "fontEdge": "none", + "fontEdgeColor": "#7F7F7F", + "fontOpacity": 100, + "backgroundColor": "#000000", + "backgroundOpacity": 100, + "textAlign": "center", + "textAlignVertical": "middle", + "windowColor": "white", + "windowOpacity": 50 + }, + "preferredLanguages": [ + "eng", + "spa" + ] + } + } + } + ] + }, + { + "name": "voiceGuidance", + "summary": "Get the user's preferred voice guidance settings", + "params": [], + "tags": [ + { + "name": "deprecated", + "x-alternative": "Accessibility.voiceGuidanceSettings()", + "x-since": "0.6.0" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:voiceguidance" + ] + } + ], + "result": { + "name": "settings", + "summary": "the voice guidance settings", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/VoiceGuidanceSettings" + } + }, + "examples": [ + { + "name": "Getting the voice guidance settings", + "params": [], + "result": { + "name": "Default Result", + "value": { + "enabled": true, + "speed": 2 + } + } + } + ] + }, + { + "name": "voiceGuidanceSettings", + "summary": "Get the user's preferred voice guidance settings", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:voiceguidance" + ] + } + ], + "result": { + "name": "settings", + "summary": "the voice guidance settings", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/VoiceGuidanceSettings" + } + }, + "examples": [ + { + "name": "Getting the voice guidance settings", + "params": [], + "result": { + "name": "Default Result", + "value": { + "enabled": true, + "speed": 2 + } + } + } + ] + }, + { + "name": "audioDescriptionSettings", + "summary": "Get the user's preferred audio description settings", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:audiodescriptions" + ] + } + ], + "result": { + "name": "settings", + "summary": "the audio description settings", + "schema": { + "$ref": "#/components/schemas/AudioDescriptionSettings" + } + }, + "examples": [ + { + "name": "Getting the audio description settings", + "params": [], + "result": { + "name": "Default Result", + "value": { + "enabled": true + } + } + } + ] + } + ], + "components": { + "schemas": { + "AudioDescriptionSettings": { + "title": "AudioDescriptionSettings", + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether or not audio descriptions should be enabled by default" + } + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/account.json b/src/openrpc/account.json index b4a5b81f2..ae0bb7126 100644 --- a/src/openrpc/account.json +++ b/src/openrpc/account.json @@ -1,142 +1,142 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Account", - "description": "A module for querying about the device account.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "id", - "summary": "Get the platform back-office account identifier", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:account:id" - ] - } - ], - "result": { - "name": "id", - "summary": "the id", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "123" - } - } - ] - }, - { - "name": "uid", - "summary": "Gets a unique id for the current app & account", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:account:uid" - ] - } - ], - "result": { - "name": "uniqueId", - "summary": "a unique ID", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the unique ID", - "params": [], - "result": { - "name": "Default Result", - "value": "ee6723b8-7ab3-462c-8d93-dbf61227998e" - } - } - ] - }, - { - "name": "session", - "summary": "Used by a distributor to push Session token to firebolt.", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:token:account" - ] - } - ], - "params": [ - { - "name": "token", + "openrpc": "1.2.4", + "info": { + "title": "Account", + "description": "A module for querying about the device account.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "id", + "summary": "Get the platform back-office account identifier", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:account:id" + ] + } + ], + "result": { + "name": "id", + "summary": "the id", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": "123" + } + } + ] + }, + { + "name": "uid", + "summary": "Gets a unique id for the current app & account", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:account:uid" + ] + } + ], + "result": { + "name": "uniqueId", + "summary": "a unique ID", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the unique ID", + "params": [], + "result": { + "name": "Default Result", + "value": "ee6723b8-7ab3-462c-8d93-dbf61227998e" + } + } + ] + }, + { + "name": "session", + "summary": "Used by a distributor to push Session token to firebolt.", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:token:account" + ] + } + ], + "params": [ + { + "name": "token", "required": true, - "schema": { - "$ref": "#/components/schemas/Token" - } - }, - { - "name": "expiresIn", + "schema": { + "$ref": "#/components/schemas/Token" + } + }, + { + "name": "expiresIn", "required": true, - "schema": { - "$ref": "#/components/schemas/Expiry" - } - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "token", - "value": "RmlyZWJvbHQgTWFuYWdlIFNESyBSb2NrcyEhIQ==" - }, - { - "name": "expiresIn", - "value": 84000 - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - } - ], - "components": { - "schemas": { - "Token": { - "type": "string", - "description": "Encoded token provided by the Distributor for Device Authentication." - }, - "Expiry": { - "type": "integer", - "description": "Number of secs before the token expires", - "minimum": 1 - } - } - } + "schema": { + "$ref": "#/components/schemas/Expiry" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "token", + "value": "RmlyZWJvbHQgTWFuYWdlIFNESyBSb2NrcyEhIQ==" + }, + { + "name": "expiresIn", + "value": 84000 + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "Token": { + "type": "string", + "description": "Encoded token provided by the Distributor for Device Authentication." + }, + "Expiry": { + "type": "integer", + "description": "Number of secs before the token expires", + "minimum": 1 + } + } + } } \ No newline at end of file diff --git a/src/openrpc/acknowledge_challenge.json b/src/openrpc/acknowledge_challenge.json index a51d60c2c..d7417cea1 100644 --- a/src/openrpc/acknowledge_challenge.json +++ b/src/openrpc/acknowledge_challenge.json @@ -1,145 +1,151 @@ { - "openrpc": "1.2.4", - "info": { - "title": "AcknowledgeChallenge", - "description": "A module for registering as a provider for a user grant in which the user confirms access to a capability", - "version": "0.0.0" - }, - "methods": [ - { - "name": "onRequestChallenge", - "summary": "Registers as a provider for when the user should be challenged in order to confirm access to a capability", - "params": [], - "tags": [ - { - "name": "event", - "x-response": { - "$ref": "#/components/schemas/GrantResult" - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:usergrant:acknowledgechallenge", - "x-allow-focus": true - } - ], - "result": { - "name": "challenge", - "summary": "The request to challenge the user", - "schema": { - "$ref": "#/components/schemas/ChallengeProviderRequest" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "correlationId": "abc", - "parameters": { - "capability": "xrn:firebolt:capability:localization::postal-code", - "requestor": { - "id": "ReferenceApp", - "name": "Firebolt Reference App" - } - } - } - } - } - ] - } - ], - "components": { - "schemas": { - "ChallengeRequestor": { - "title": "ChallengeRequestor", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "type": "string", - "description": "The id of the app that requested the challenge" - }, - "name": { - "type": "string", - "description": "The name of the app that requested the challenge" - } - } - }, - "Challenge": { - "title": "Challenge", - "type": "object", - "required": [ - "capability", - "requestor" - ], - "properties": { - "capability": { - "type": "string", - "description": "The capability that is being requested by the user to approve" - }, - "requestor": { - "description": "The identity of which app is requesting access to this capability", - "$ref": "#/components/schemas/ChallengeRequestor" - } - } - }, - "ChallengeProviderRequest": { - "title": "ChallengeProviderRequest", - "allOf": [ - { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/ProviderRequest" - }, - { - "type": "object", - "required": [ - "parameters" - ], - "properties": { - "parameters": { - "description": "The request to challenge the user", - "$ref": "#/components/schemas/Challenge" - } - } - } - ] - }, - "GrantResult": { - "title": "GrantResult", - "type": "object", - "required": [ - "granted" - ], - "properties": { - "granted": { - "oneOf": [ - { - "type": "boolean", - "description": "Whether the user approved or denied the challenge" - }, - { - "const": null - } - ] - } - }, - "examples": [ - { - "granted": true - }, - { - "granted": false - }, - { - "granted": null - } - ] - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "AcknowledgeChallenge", + "description": "A module for registering as a provider for a user grant in which the user confirms access to a capability", + "version": "0.0.0" + }, + "methods": [ + { + "name": "challenge", + "summary": "Registers as a provider for when the user should be challenged in order to confirm access to a capability", + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "type": "string", + "description": "The capability that is being requested by the user to approve" + } + }, + { + "name": "requestor", + "required": true, + "schema": { + "description": "The identity of which app is requesting access to this capability", + "$ref": "#/components/schemas/ChallengeRequestor" + } + } + ], + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:usergrant:acknowledgechallenge", + "x-allow-focus": true + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GrantResult" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:localization::postal-code" + }, + { + "name": "requestor", + "value": { + "id": "ReferenceApp", + "name": "Firebolt Reference App" + } + } + ], + "result": { + "name": "result", + "value": { + "granted": true + } + } + } + ] + } + ], + "components": { + "schemas": { + "ChallengeRequestor": { + "title": "ChallengeRequestor", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The id of the app that requested the challenge" + }, + "name": { + "type": "string", + "description": "The name of the app that requested the challenge" + } + } + }, + "Challenge": { + "title": "Challenge", + "type": "object", + "required": [ + "capability", + "requestor" + ], + "properties": {} + }, + "ChallengeProviderRequest": { + "title": "ChallengeProviderRequest", + "allOf": [ + { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/ProviderRequest" + }, + { + "type": "object", + "required": [ + "parameters" + ], + "properties": { + "parameters": { + "description": "The request to challenge the user", + "$ref": "#/components/schemas/Challenge" + } + } + } + ] + }, + "GrantResult": { + "title": "GrantResult", + "type": "object", + "required": [ + "granted" + ], + "properties": { + "granted": { + "oneOf": [ + { + "type": "boolean", + "description": "Whether the user approved or denied the challenge" + }, + { + "const": null + } + ] + } + }, + "examples": [ + { + "granted": true + }, + { + "granted": false + }, + { + "granted": null + } + ] + } + } + } } \ No newline at end of file diff --git a/src/openrpc/activatable.json b/src/openrpc/activatable.json new file mode 100644 index 000000000..6efa74619 --- /dev/null +++ b/src/openrpc/activatable.json @@ -0,0 +1,85 @@ +{ + "openrpc": "1.2.4", + "info": { + "title": "Activatable", + "description": "Methods and events for responding to lifecycle changes in your app", + "version": "0.0.0" + }, + "methods": [ + { + "name": "activate", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:activatable" + } + ], + "summary": "Called when the platform is ready to create the lifecycle session for the app. Only called only once, during the `INITIALIZING` state.", + "params": [ + { + "name": "intent", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/intents#/definitions/NavigationIntent" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App creation.", + "params": [ + { + "name": "intent", + "value": { + "action": "search", + "data": { + "query": "cats" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "deactivate", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:activatable" + } + ], + "summary": "Called when the platform wants the app to reallocate its graphics surface and prepare to be potentially used.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App resuming.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/openrpc/advertising.json b/src/openrpc/advertising.json index 22a86b312..75131e2b9 100644 --- a/src/openrpc/advertising.json +++ b/src/openrpc/advertising.json @@ -1,164 +1,164 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Advertising", - "version": "0.0.0", - "description": "A module for platform provided advertising settings and functionality." - }, - "methods": [ - { - "name": "config", - "summary": "Build configuration object for Ad Framework initialization", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:advertising:configuration" - ] - } - ], - "params": [ - { - "name": "options", - "summary": "Configuration options", - "required": true, - "schema": { - "$ref": "#/components/schemas/AdConfigurationOptions" - } - } - ], - "result": { - "name": "adFrameworkConfig", - "summary": "the ad framework config", - "schema": { - "type": "object", - "description": "An opaque object represneting the AdConfiguration" - } - }, - "examples": [ - { - "name": "Initializing the Ad Framework", - "params": [ - { - "name": "options", - "value": { - "environment": "prod", - "authenticationEntity": "MVPD" - } - } - ], - "result": { - "name": "Default Result", - "value": { - "adServerUrl": "https://demo.v.fwmrm.net/ad/p/1", - "adServerUrlTemplate": "https://demo.v.fwmrm.net/ad/p/1?flag=+sltp+exvt+slcb+emcr+amcb+aeti&prof=12345:caf_allinone_profile &nw=12345&mode=live&vdur=123&caid=a110523018&asnw=372464&csid=gmott_ios_tablet_watch_live_ESPNU&ssnw=372464&vip=198.205.92.1&resp=vmap1&metr=1031&pvrn=12345&vprn=12345&vcid=1X0Ce7L3xRWlTeNhc7br8Q%3D%3D", - "adNetworkId": "519178", - "adProfileId": "12345:caf_allinone_profile", - "adSiteSectionId": "caf_allinone_profile_section", - "adOptOut": true, - "privacyData": "ew0KICAicGR0IjogImdkcDp2MSIsDQogICJ1c19wcml2YWN5IjogIjEtTi0iLA0KICAibG10IjogIjEiIA0KfQ0K", - "ifaValue": "01234567-89AB-CDEF-GH01-23456789ABCD", - "ifa": "ewogICJ2YWx1ZSI6ICIwMTIzNDU2Ny04OUFCLUNERUYtR0gwMS0yMzQ1Njc4OUFCQ0QiLAogICJpZmFfdHlwZSI6ICJzc3BpZCIsCiAgImxtdCI6ICIwIgp9Cg==", - "appName": "FutureToday", - "appBundleId": "FutureToday.comcast", - "distributorAppId": "1001", - "deviceAdAttributes": "ewogICJib0F0dHJpYnV0ZXNGb3JSZXZTaGFyZUlkIjogIjEyMzQiCn0=", - "coppa": 0, - "authenticationEntity": "60f72475281cfba3852413bd53e957f6" - } - } - } - ] - }, - { - "name": "policy", - "summary": "Get the advertising privacy and playback policy", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:advertising", - "xrn:firebolt:capability:advertising:configuration" - ] - } - ], - "result": { - "name": "adPolicy", - "summary": "the ad policy", - "schema": { - "$ref": "#/components/schemas/AdPolicy" - } - }, - "examples": [ - { - "name": "Getting the advertising policy settings", - "params": [], - "result": { - "name": "Default Result", - "value": { - "skipRestriction": "adsUnwatched", - "limitAdTracking": false - } - } - } - ] - }, - { - "name": "skipRestriction", - "summary": "Set the value for AdPolicy.skipRestriction", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:advertising:configuration" - ] - } - ], - "params": [], - "result": { - "name": "result", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/advertising#/definitions/SkipRestriction" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "result", - "value": "none" - } - }, - { - "name": "Additional Example", - "params": [], - "result": { - "name": "result", - "value": "all" - } - } - ] - }, - { - "name": "advertisingId", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:advertising:identifier" - ] - } - ], - "summary": "Get the advertising ID", - "params": [ + "openrpc": "1.2.4", + "info": { + "title": "Advertising", + "version": "0.0.0", + "description": "A module for platform provided advertising settings and functionality." + }, + "methods": [ + { + "name": "config", + "summary": "Build configuration object for Ad Framework initialization", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:advertising:configuration" + ] + } + ], + "params": [ + { + "name": "options", + "summary": "Configuration options", + "required": true, + "schema": { + "$ref": "#/components/schemas/AdConfigurationOptions" + } + } + ], + "result": { + "name": "adFrameworkConfig", + "summary": "the ad framework config", + "schema": { + "type": "object", + "description": "An opaque object represneting the AdConfiguration" + } + }, + "examples": [ + { + "name": "Initializing the Ad Framework", + "params": [ + { + "name": "options", + "value": { + "environment": "prod", + "authenticationEntity": "MVPD" + } + } + ], + "result": { + "name": "Default Result", + "value": { + "adServerUrl": "https://demo.v.fwmrm.net/ad/p/1", + "adServerUrlTemplate": "https://demo.v.fwmrm.net/ad/p/1?flag=+sltp+exvt+slcb+emcr+amcb+aeti&prof=12345:caf_allinone_profile &nw=12345&mode=live&vdur=123&caid=a110523018&asnw=372464&csid=gmott_ios_tablet_watch_live_ESPNU&ssnw=372464&vip=198.205.92.1&resp=vmap1&metr=1031&pvrn=12345&vprn=12345&vcid=1X0Ce7L3xRWlTeNhc7br8Q%3D%3D", + "adNetworkId": "519178", + "adProfileId": "12345:caf_allinone_profile", + "adSiteSectionId": "caf_allinone_profile_section", + "adOptOut": true, + "privacyData": "ew0KICAicGR0IjogImdkcDp2MSIsDQogICJ1c19wcml2YWN5IjogIjEtTi0iLA0KICAibG10IjogIjEiIA0KfQ0K", + "ifaValue": "01234567-89AB-CDEF-GH01-23456789ABCD", + "ifa": "ewogICJ2YWx1ZSI6ICIwMTIzNDU2Ny04OUFCLUNERUYtR0gwMS0yMzQ1Njc4OUFCQ0QiLAogICJpZmFfdHlwZSI6ICJzc3BpZCIsCiAgImxtdCI6ICIwIgp9Cg==", + "appName": "FutureToday", + "appBundleId": "FutureToday.comcast", + "distributorAppId": "1001", + "deviceAdAttributes": "ewogICJib0F0dHJpYnV0ZXNGb3JSZXZTaGFyZUlkIjogIjEyMzQiCn0=", + "coppa": 0, + "authenticationEntity": "60f72475281cfba3852413bd53e957f6" + } + } + } + ] + }, + { + "name": "policy", + "summary": "Get the advertising privacy and playback policy", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:advertising", + "xrn:firebolt:capability:advertising:configuration" + ] + } + ], + "result": { + "name": "adPolicy", + "summary": "the ad policy", + "schema": { + "$ref": "#/components/schemas/AdPolicy" + } + }, + "examples": [ + { + "name": "Getting the advertising policy settings", + "params": [], + "result": { + "name": "Default Result", + "value": { + "skipRestriction": "adsUnwatched", + "limitAdTracking": false + } + } + } + ] + }, + { + "name": "skipRestriction", + "summary": "Set the value for AdPolicy.skipRestriction", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:advertising:configuration" + ] + } + ], + "params": [], + "result": { + "name": "result", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/advertising#/definitions/SkipRestriction" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "result", + "value": "none" + } + }, + { + "name": "Additional Example", + "params": [], + "result": { + "name": "result", + "value": "all" + } + } + ] + }, + { + "name": "advertisingId", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:advertising:identifier" + ] + } + ], + "summary": "Get the advertising ID", + "params": [ { "name": "options", "summary": "AdvertisingId options", @@ -168,40 +168,40 @@ } } ], - "result": { - "name": "advertisingId", - "summary": "the advertising ID", - "schema": { - "type": "object", - "properties": { - "ifa": { - "type": "string" - }, - "ifa_type": { - "type": "string" - }, - "lmt": { - "type": "string" - } - }, - "required": [ - "ifa" - ] - } - }, - "examples": [ - { - "name": "Getting the advertising ID", - "params": [], - "result": { - "name": "Default Result", - "value": { - "ifa": "01234567-89AB-CDEF-GH01-23456789ABCD", - "ifa_type": "idfa", - "lmt": "0" - } - } - }, + "result": { + "name": "advertisingId", + "summary": "the advertising ID", + "schema": { + "type": "object", + "properties": { + "ifa": { + "type": "string" + }, + "ifa_type": { + "type": "string" + }, + "lmt": { + "type": "string" + } + }, + "required": [ + "ifa" + ] + } + }, + "examples": [ + { + "name": "Getting the advertising ID", + "params": [], + "result": { + "name": "Default Result", + "value": { + "ifa": "01234567-89AB-CDEF-GH01-23456789ABCD", + "ifa_type": "idfa", + "lmt": "0" + } + } + }, { "name": "Getting the advertising ID with scope browse", "params": [ @@ -245,137 +245,137 @@ "lmt": "0" } } - } - ] - }, - { - "name": "deviceAttributes", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:advertising:configuration" - ] - } - ], - "summary": "Get the device advertising device attributes", - "params": [], - "result": { - "name": "deviceAttributes", - "summary": "the device attributes", - "schema": { - "type": "object" - } - }, - "examples": [ - { - "name": "Getting the device attributes", - "params": [], - "result": { - "name": "Default Result", - "value": {} - } - } - ] - }, - { - "name": "appBundleId", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:advertising:configuration" - ] - } - ], - "summary": "Get the App's Bundle ID", - "params": [], - "result": { - "name": "appBundleId", - "summary": "the app bundle ID", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "operator.app" - } - } - ] - }, - { - "name": "resetIdentifier", - "summary": "Resets a user's identifier in the ad platform so that the advertising id that apps get will be a new value", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:advertising:identifier" - ] - } - ], - "params": [], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - } - ], - "components": { - "schemas": { - "AdPolicy": { - "title": "AdPolicy", - "description": "Describes various ad playback enforcement rules that the app should follow.", - "type": "object", - "properties": { - "skipRestriction": { - "$ref": "https://meta.comcast.com/firebolt/advertising#/definitions/SkipRestriction" - }, - "limitAdTracking": { - "type": "boolean" - } - } - }, - "AdConfigurationOptions": { - "title": "AdConfigurationOptions", - "type": "object", - "properties": { - "coppa": { - "type": "boolean", - "description": "Whether or not the app requires US COPPA compliance." - }, - "environment": { - "type": "string", - "enum": [ - "prod", - "test" - ], - "default": "prod", - "description": "Whether the app is running in a production or test mode." - }, - "authenticationEntity": { - "type": "string", - "description": "The authentication provider, when it is separate entity than the app provider, e.g. an MVPD." - } - } - }, + } + ] + }, + { + "name": "deviceAttributes", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:advertising:configuration" + ] + } + ], + "summary": "Get the device advertising device attributes", + "params": [], + "result": { + "name": "deviceAttributes", + "summary": "the device attributes", + "schema": { + "type": "object" + } + }, + "examples": [ + { + "name": "Getting the device attributes", + "params": [], + "result": { + "name": "Default Result", + "value": {} + } + } + ] + }, + { + "name": "appBundleId", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:advertising:configuration" + ] + } + ], + "summary": "Get the App's Bundle ID", + "params": [], + "result": { + "name": "appBundleId", + "summary": "the app bundle ID", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": "operator.app" + } + } + ] + }, + { + "name": "resetIdentifier", + "summary": "Resets a user's identifier in the ad platform so that the advertising id that apps get will be a new value", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:advertising:identifier" + ] + } + ], + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "AdPolicy": { + "title": "AdPolicy", + "description": "Describes various ad playback enforcement rules that the app should follow.", + "type": "object", + "properties": { + "skipRestriction": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/advertising#/definitions/SkipRestriction" + }, + "limitAdTracking": { + "type": "boolean" + } + } + }, + "AdConfigurationOptions": { + "title": "AdConfigurationOptions", + "type": "object", + "properties": { + "coppa": { + "type": "boolean", + "description": "Whether or not the app requires US COPPA compliance." + }, + "environment": { + "type": "string", + "enum": [ + "prod", + "test" + ], + "default": "prod", + "description": "Whether the app is running in a production or test mode." + }, + "authenticationEntity": { + "type": "string", + "description": "The authentication provider, when it is separate entity than the app provider, e.g. an MVPD." + } + } + }, "AdvertisingIdOptions": { "title": "AdvertisingIdOptions", "type": "object", @@ -404,7 +404,7 @@ } } } - } - } - } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/application.json b/src/openrpc/application.json new file mode 100644 index 000000000..2c4c99a9e --- /dev/null +++ b/src/openrpc/application.json @@ -0,0 +1,133 @@ +{ + "openrpc": "1.2.4", + "info": { + "title": "Application", + "description": "Methods and events for responding to lifecycle changes in your app", + "version": "0.0.0" + }, + "methods": [ + { + "name": "create", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:application" + } + ], + "summary": "Called when the platform is ready to create the lifecycle session for the app. Only called only once, during the `INITIALIZING` state.", + "params": [ + { + "name": "params", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/lifecycle#/definitions/CreateParameters" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App creation.", + "params": [ + { + "name": "params", + "value": { + "preload": false + } + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "resume", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:application" + } + ], + "summary": "Called when the platform wants the app to reallocate its graphics surface and prepare to be potentially used.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App resuming.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "suspend", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:application" + } + ], + "summary": "Called when the platform requires the app to deallocate its graphics surface and reduce memory as much as possible. This may be called anytime the app is in the `RUNNING` state.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App suspending.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "destroy", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:application" + } + ], + "summary": "Called when the platform is ready to end the lifecycle session for the app. Only called once.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App destruction.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/openrpc/audio_descriptions.json b/src/openrpc/audio_descriptions.json index fb909285e..58803be17 100644 --- a/src/openrpc/audio_descriptions.json +++ b/src/openrpc/audio_descriptions.json @@ -1,57 +1,53 @@ { - "openrpc": "1.2.4", - "info": { - "title": "AudioDescriptions", - "description": "A module for managing audio-description Settings.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "enabled", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:audiodescriptions" - ] - } - ], - "summary": "Whether or not audio-descriptions are enabled.", - "params": [ - ], - "result": { - "name": "enabled", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [ - ], - "result": { - "name": "enabled", - "value": true - } - }, - { - "name": "Default example #2", - "params": [ - ], - "result": { - "name": "enabled", - "value": false - } - } - ] - } - ], - "components": { - "schemas": { - } - } + "openrpc": "1.2.4", + "info": { + "title": "AudioDescriptions", + "description": "A module for managing audio-description Settings.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "enabled", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:audiodescriptions" + ] + } + ], + "summary": "Whether or not audio-descriptions are enabled.", + "params": [], + "result": { + "name": "enabled", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "enabled", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "enabled", + "value": false + } + } + ] + } + ], + "components": { + "schemas": {} + } } \ No newline at end of file diff --git a/src/openrpc/authentication.json b/src/openrpc/authentication.json index 18a633183..1e29e3205 100644 --- a/src/openrpc/authentication.json +++ b/src/openrpc/authentication.json @@ -1,239 +1,233 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Authentication", - "description": "A module for acquiring authentication tokens.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "token", - "summary": "Get a specific `type` of authentication token", - "tags": [ - { - "name": "deprecated", - "x-alternative": "Authentication module has individual methods for each token type.", - "x-since": "0.9.0" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:token:platform" - ] - } - ], - "params": [ - { - "name": "type", - "summary": "What type of token to get", - "schema": { - "$ref": "#/components/schemas/TokenType" - }, - "required": true - }, - { - "name": "options", - "summary": "Additional options for acquiring the token.", - "schema": { - "type": "object" - }, - "required": false - } - ], - "result": { - "name": "token", - "summary": "the token value, type, and expiration", - "schema": { - "type": "object", - "properties": { - "value": { - "type": "string" - }, - "expires": { - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - } - }, - "required": [ - "value" - ] - } - }, - "examples": [ - { - "name": "Acquire a Firebolt platform token", - "params": [ - { - "name": "type", - "value": "platform" - } - ], - "result": { - "name": "token", - "value": { - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", - "expires": "2022-04-23T18:25:43.511Z", - "type": "platform" - } - } - }, - { - "name": "Acquire a Firebolt device identity token", - "params": [ - { - "name": "type", - "value": "device" - } - ], - "result": { - "name": "token", - "value": { - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", - "expires": "2022-04-23T18:25:43.511Z", - "type": "device" - } - } - }, - { - "name": "Acquire a Firebolt distributor token", - "params": [ - { - "name": "type", - "value": "distributor" - }, - { - "name": "options", - "value": { - "clientId": "xyz" - } - } - ], - "result": { - "name": "token", - "value": { - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", - "expires": "2022-04-23T18:25:43.511Z", - "type": "distributor", - "data": { - "tid": "EB00E9230AB2A35F57DB4EFDDC4908F6446D38F08F4FF0BD57FE6A61E21EEFD9", - "scope": "scope" - } - } - } - } - ] - }, - { - "name": "device", - "summary": "Get a device token scoped to the current app.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:token:device" - ] - } - ], - "params": [ - ], - "result": { - "name": "token", - "summary": "the token value and expiration", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Acquire a Firebolt device identity token", - "params": [ - ], - "result": { - "name": "token", - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" - } - } - ] - }, - { - "name": "session", - "summary": "Get a destributor session token.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:token:session" - ] - } - ], - "params": [ - ], - "result": { - "name": "token", - "summary": "the token value", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Acquire a distributor session token", - "params": [ - ], - "result": { - "name": "token", - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" - } - } - ] - }, - { - "name": "root", - "summary": "Get a root device token.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:token:root" - ] - } - ], - "params": [ - ], - "result": { - "name": "token", - "summary": "the token value", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Acquire a Firebolt root device identity token", - "params": [ - ], - "result": { - "name": "token", - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" - } - } - ] - } - ], - "components": { - "schemas": { - "TokenType": { - "title": "TokenType", - "type": "string", - "enum": [ - "platform", - "device", - "distributor" - ] - } - } - } -} + "openrpc": "1.2.4", + "info": { + "title": "Authentication", + "description": "A module for acquiring authentication tokens.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "token", + "summary": "Get a specific `type` of authentication token", + "tags": [ + { + "name": "deprecated", + "x-alternative": "Authentication module has individual methods for each token type.", + "x-since": "0.9.0" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:token:platform" + ] + } + ], + "params": [ + { + "name": "type", + "summary": "What type of token to get", + "schema": { + "$ref": "#/components/schemas/TokenType" + }, + "required": true + }, + { + "name": "options", + "summary": "Additional options for acquiring the token.", + "schema": { + "type": "object" + }, + "required": false + } + ], + "result": { + "name": "token", + "summary": "the token value, type, and expiration", + "schema": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "expires": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "examples": [ + { + "name": "Acquire a Firebolt platform token", + "params": [ + { + "name": "type", + "value": "platform" + } + ], + "result": { + "name": "token", + "value": { + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", + "expires": "2022-04-23T18:25:43.511Z", + "type": "platform" + } + } + }, + { + "name": "Acquire a Firebolt device identity token", + "params": [ + { + "name": "type", + "value": "device" + } + ], + "result": { + "name": "token", + "value": { + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", + "expires": "2022-04-23T18:25:43.511Z", + "type": "device" + } + } + }, + { + "name": "Acquire a Firebolt distributor token", + "params": [ + { + "name": "type", + "value": "distributor" + }, + { + "name": "options", + "value": { + "clientId": "xyz" + } + } + ], + "result": { + "name": "token", + "value": { + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", + "expires": "2022-04-23T18:25:43.511Z", + "type": "distributor", + "data": { + "tid": "EB00E9230AB2A35F57DB4EFDDC4908F6446D38F08F4FF0BD57FE6A61E21EEFD9", + "scope": "scope" + } + } + } + } + ] + }, + { + "name": "device", + "summary": "Get a device token scoped to the current app.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:token:device" + ] + } + ], + "params": [], + "result": { + "name": "token", + "summary": "the token value and expiration", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Acquire a Firebolt device identity token", + "params": [], + "result": { + "name": "token", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" + } + } + ] + }, + { + "name": "session", + "summary": "Get a destributor session token.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:token:session" + ] + } + ], + "params": [], + "result": { + "name": "token", + "summary": "the token value", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Acquire a distributor session token", + "params": [], + "result": { + "name": "token", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" + } + } + ] + }, + { + "name": "root", + "summary": "Get a root device token.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:token:root" + ] + } + ], + "params": [], + "result": { + "name": "token", + "summary": "the token value", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Acquire a Firebolt root device identity token", + "params": [], + "result": { + "name": "token", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" + } + } + ] + } + ], + "components": { + "schemas": { + "TokenType": { + "title": "TokenType", + "type": "string", + "enum": [ + "platform", + "device", + "distributor" + ] + } + } + } +} \ No newline at end of file diff --git a/src/openrpc/capabilities.json b/src/openrpc/capabilities.json index e2b35f8af..6d2c9e867 100644 --- a/src/openrpc/capabilities.json +++ b/src/openrpc/capabilities.json @@ -1,910 +1,914 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Capabilities", - "description": "The Capabilities module provides information about which discreet unit of functionality is enabled for the apps.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "supported", - "summary": "Returns whether the platform supports the passed capability.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "supported", - "summary": "Whether or not capability is supported in device.", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Wifi scan supported capability", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:wifi:scan" - } - ], - "result": { - "name": "Default Result", - "value": true - } - }, - { - "name": "BLE protocol unsupported capability", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:protocol:bluetoothle" - } - ], - "result": { - "name": "Default Result", - "value": false - } - } - ] - }, - { - "name": "available", - "summary": "Returns whether a capability is available now.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "available", - "summary": "Whether or not capability is available now.", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Device Token.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:token:device" - } - ], - "result": { - "name": "Default Result", - "value": true - } - }, - { - "name": "Unavailable Platform token.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:token:platform" - } - ], - "result": { - "name": "Default Result", - "value": false - } - } - ] - }, - { - "name": "permitted", - "summary": "Returns whether the current App has permission to the passed capability and role.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - }, - { - "name": "options", - "summary": "Capability options", - "schema": { - "$ref": "#/components/schemas/CapabilityOption" - } - } - ], - "result": { - "name": "permitted", - "summary": "Whether or not app is permitted for the given capability and the role", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Keyboard", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:input:keyboard" - } - ], - "result": { - "name": "Default Result", - "value": true - } - }, - { - "name": "Keyboard incorrect manage role capability", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:input:keyboard" - }, - { - "name": "options", - "value": { - "role": "manage" - } - } - ], - "result": { - "name": "Default Result", - "value": false - } - }, - { - "name": "Wifi scan not permitted capability", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:wifi:scan" - } - ], - "result": { - "name": "Default Result", - "value": false - } - } - ] - }, - { - "name": "granted", - "summary": "Returns whether the current App has a user grant for passed capability and role.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - }, - { - "name": "options", - "summary": "Capability options", - "schema": { - "$ref": "#/components/schemas/CapabilityOption" - } - } - ], - "result": { - "name": "granted", - "summary": "Whether or not app is granted to use the given capability and the role", - "schema": { - "oneOf": [ - { - "type": "boolean" - }, - { - "const": null - } - ] - } - }, - "examples": [ - { - "name": "Default capabilities without grants.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:input:keyboard" - } - ], - "result": { - "name": "Default Result", - "value": true - } - }, - { - "name": "Get Postal code without grants.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - } - ], - "result": { - "name": "Default Result", - "value": false - } - }, - { - "name": "Get Postal code with grants.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - } - ], - "result": { - "name": "Default Result", - "value": null - } - } - ] - }, - { - "name": "info", - "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "params": [ - { - "name": "capabilities", - "required": true, - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "minItems": 1 - } - } - ], - "result": { - "name": "info", - "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - }, - "minItems": 1 - } - }, - "examples": [ - { - "name": "Default result", - "params": [ - { - "name": "capabilities", - "value": [ - "xrn:firebolt:capability:device:model", - "xrn:firebolt:capability:input:keyboard", - "xrn:firebolt:capability:protocol:bluetoothle", - "xrn:firebolt:capability:token:device", - "xrn:firebolt:capability:token:platform", - "xrn:firebolt:capability:protocol:moca", - "xrn:firebolt:capability:wifi:scan", - "xrn:firebolt:capability:localization:postal-code", - "xrn:firebolt:capability:localization:locality" - ] - } - ], - "result": { - "name": "Default Result", - "value": [ - { - "capability": "xrn:firebolt:capability:device:model", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - } - }, - { - "capability": "xrn:firebolt:capability:input:keyboard", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - } - }, - { - "capability": "xrn:firebolt:capability:protocol:bluetoothle", - "supported": false, - "available": false, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "unsupported" - ] - }, - { - "capability": "xrn:firebolt:capability:token:device", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - } - }, - { - "capability": "xrn:firebolt:capability:token:platform", - "supported": true, - "available": false, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "unavailable" - ] - }, - { - "capability": "xrn:firebolt:capability:protocol:moca", - "supported": true, - "available": false, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "disabled", - "unavailable" - ] - }, - { - "capability": "xrn:firebolt:capability:wifi:scan", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "unpermitted" - ] - }, - { - "capability": "xrn:firebolt:capability:localization:postal-code", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": null - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "ungranted" - ] - }, - { - "capability": "xrn:firebolt:capability:localization:postal-code", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "ungranted" - ] - }, - { - "capability": "xrn:firebolt:capability:localization:locality", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "grantDenied", - "ungranted" - ] - } - ] - } - } - ] - }, - { - "name": "request", - "summary": "Requests grants for all capability/role combinations in the roles array.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:request" - ] - } - ], - "params": [ - { - "name": "grants", - "required": true, - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Permission" - }, - "minItems": 1 - } - } - ], - "result": { - "name": "request", - "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - }, - "minItems": 1 - } - }, - "examples": [ - { - "name": "Default result", - "params": [ - { - "name": "grants", - "value": [ - { - "role": "use", - "capability": "xrn:firebolt:capability:commerce:purchase" - } - ] - } - ], - "result": { - "name": "Default Result", - "value": [ - { - "capability": "xrn:firebolt:capability:commerce:purchase", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - } - } - ] - } - } - ] - }, - { - "name": "onAvailable", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "summary": "Listens for all App permitted capabilities to become available.", - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "value", - "summary": "Provides the capability info.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - } - }, - "examples": [ - { - "name": "Platform token is available", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:token:platform" - } - ], - "result": { - "name": "Default result", - "value": { - "capability": "xrn:firebolt:capability:token:platform", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "unpermitted" - ] - } - } - } - ] - }, - { - "name": "onUnavailable", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "summary": "Listens for all App permitted capabilities to become unavailable.", - "params": [ - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "value", - "summary": "Provides the capability info.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - } - }, - "examples": [ - { - "name": "Platform token is unavailable.", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:token:platform" - } - ], - "result": { - "name": "Default Result", - "value": { - "capability": "xrn:firebolt:capability:token:platform", - "supported": true, - "available": false, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "unavailable" - ] - } - } - } - ] - }, - { - "name": "onGranted", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "summary": "Listens for all App permitted capabilities to become granted.", - "params": [ - { - "name": "role", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - } - }, - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "value", - "summary": "Provides the capability info.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - } - }, - "examples": [ - { - "name": "Postal code granted", - "params": [ - { - "name": "role", - "value": "use" - }, - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - } - ], - "result": { - "name": "Default Result", - "value": { - "capability": "xrn:firebolt:capability:localization:postal-code", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - } - } - } - } - ] - }, - { - "name": "onRevoked", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:capabilities:info" - ] - } - ], - "summary": "Listens for all App permitted capabilities to become revoked.", - "params": [ - { - "name": "role", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - } - }, - { - "name": "capability", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - } - } - ], - "result": { - "name": "value", - "summary": "Provides the capability info.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/CapabilityInfo" - } - }, - "examples": [ - { - "name": "Postal code revoked", - "params": [ - { - "name": "role", - "value": "use" - }, - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - } - ], - "result": { - "name": "Default Result", - "value": { - "capability": "xrn:firebolt:capability:localization:postal-code", - "supported": true, - "available": true, - "use": { - "permitted": true, - "granted": true - }, - "manage": { - "permitted": true, - "granted": true - }, - "provide": { - "permitted": true, - "granted": true - }, - "details": [ - "grantDenied" - ] - } - } - } - ] - } - ], - "components": { - "schemas": { - "CapabilityOption": { - "title": "CapabilityOption", - "type": "object", - "properties": { - "role": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role", - "description": "Which role of the capability to check the state of, default will be 'use'", - "default": "use" - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Capabilities", + "description": "The Capabilities module provides information about which discreet unit of functionality is enabled for the apps.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "supported", + "summary": "Returns whether the platform supports the passed capability.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + } + ], + "result": { + "name": "supported", + "summary": "Whether or not capability is supported in device.", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Wifi scan supported capability", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:wifi:scan" + } + ], + "result": { + "name": "Default Result", + "value": true + } + }, + { + "name": "BLE protocol unsupported capability", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:protocol:bluetoothle" + } + ], + "result": { + "name": "Default Result", + "value": false + } + } + ] + }, + { + "name": "available", + "summary": "Returns whether a capability is available now.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + } + ], + "result": { + "name": "available", + "summary": "Whether or not capability is available now.", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Device Token.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:token:device" + } + ], + "result": { + "name": "Default Result", + "value": true + } + }, + { + "name": "Unavailable Platform token.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:token:platform" + } + ], + "result": { + "name": "Default Result", + "value": false + } + } + ] + }, + { + "name": "permitted", + "summary": "Returns whether the current App has permission to the passed capability and role.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "options", + "summary": "Capability options", + "schema": { + "$ref": "#/components/schemas/CapabilityOption" + } + } + ], + "result": { + "name": "permitted", + "summary": "Whether or not app is permitted for the given capability and the role", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Keyboard", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:input:keyboard" + } + ], + "result": { + "name": "Default Result", + "value": true + } + }, + { + "name": "Keyboard incorrect manage role capability", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:input:keyboard" + }, + { + "name": "options", + "value": { + "role": "manage" + } + } + ], + "result": { + "name": "Default Result", + "value": false + } + }, + { + "name": "Wifi scan not permitted capability", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:wifi:scan" + } + ], + "result": { + "name": "Default Result", + "value": false + } + } + ] + }, + { + "name": "granted", + "summary": "Returns whether the current App has a user grant for passed capability and role.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "options", + "summary": "Capability options", + "schema": { + "$ref": "#/components/schemas/CapabilityOption" + } + } + ], + "result": { + "name": "granted", + "summary": "Whether or not app is granted to use the given capability and the role", + "schema": { + "oneOf": [ + { + "type": "boolean" + }, + { + "const": null + } + ] + } + }, + "examples": [ + { + "name": "Default capabilities without grants.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:input:keyboard" + } + ], + "result": { + "name": "Default Result", + "value": true + } + }, + { + "name": "Get Postal code without grants.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + } + ], + "result": { + "name": "Default Result", + "value": false + } + }, + { + "name": "Get Postal code with grants.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + } + ], + "result": { + "name": "Default Result", + "value": null + } + } + ] + }, + { + "name": "info", + "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "params": [ + { + "name": "capabilities", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "minItems": 1 + } + } + ], + "result": { + "name": "info", + "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + }, + "minItems": 1 + } + }, + "examples": [ + { + "name": "Default result", + "params": [ + { + "name": "capabilities", + "value": [ + "xrn:firebolt:capability:device:model", + "xrn:firebolt:capability:input:keyboard", + "xrn:firebolt:capability:protocol:bluetoothle", + "xrn:firebolt:capability:token:device", + "xrn:firebolt:capability:token:platform", + "xrn:firebolt:capability:protocol:moca", + "xrn:firebolt:capability:wifi:scan", + "xrn:firebolt:capability:localization:postal-code", + "xrn:firebolt:capability:localization:locality" + ] + } + ], + "result": { + "name": "Default Result", + "value": [ + { + "capability": "xrn:firebolt:capability:device:model", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + } + }, + { + "capability": "xrn:firebolt:capability:input:keyboard", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + } + }, + { + "capability": "xrn:firebolt:capability:protocol:bluetoothle", + "supported": false, + "available": false, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "unsupported" + ] + }, + { + "capability": "xrn:firebolt:capability:token:device", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + } + }, + { + "capability": "xrn:firebolt:capability:token:platform", + "supported": true, + "available": false, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "unavailable" + ] + }, + { + "capability": "xrn:firebolt:capability:protocol:moca", + "supported": true, + "available": false, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "disabled", + "unavailable" + ] + }, + { + "capability": "xrn:firebolt:capability:wifi:scan", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "unpermitted" + ] + }, + { + "capability": "xrn:firebolt:capability:localization:postal-code", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": null + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "ungranted" + ] + }, + { + "capability": "xrn:firebolt:capability:localization:postal-code", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "ungranted" + ] + }, + { + "capability": "xrn:firebolt:capability:localization:locality", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "grantDenied", + "ungranted" + ] + } + ] + } + } + ] + }, + { + "name": "request", + "summary": "Requests grants for all capability/role combinations in the roles array.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:request" + ] + } + ], + "params": [ + { + "name": "grants", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Permission" + }, + "minItems": 1 + } + } + ], + "result": { + "name": "request", + "summary": "Returns an array of CapabilityInfo objects for the passed in capabilities.", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + }, + "minItems": 1 + } + }, + "examples": [ + { + "name": "Default result", + "params": [ + { + "name": "grants", + "value": [ + { + "role": "use", + "capability": "xrn:firebolt:capability:commerce:purchase" + } + ] + } + ], + "result": { + "name": "Default Result", + "value": [ + { + "capability": "xrn:firebolt:capability:commerce:purchase", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + } + } + ] + } + } + ] + }, + { + "name": "available", + "tags": [ + { + "name": "notifier", + "x-event": "Capabilities.onAvailable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "summary": "Listens for all App permitted capabilities to become available.", + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "value", + "summary": "Provides the capability info.", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + } + } + ], + "examples": [ + { + "name": "Platform token is available", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:token:platform" + }, + { + "name": "Default result", + "value": { + "capability": "xrn:firebolt:capability:token:platform", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "unpermitted" + ] + } + } + ] + } + ] + }, + { + "name": "unavailable", + "tags": [ + { + "name": "notifier", + "x-event": "Capabilities.onUnavailable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "summary": "Listens for all App permitted capabilities to become unavailable.", + "params": [ + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "value", + "summary": "Provides the capability info.", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + } + } + ], + "examples": [ + { + "name": "Platform token is unavailable.", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:token:platform" + }, + { + "name": "Default Result", + "value": { + "capability": "xrn:firebolt:capability:token:platform", + "supported": true, + "available": false, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "unavailable" + ] + } + } + ] + } + ] + }, + { + "name": "granted", + "tags": [ + { + "name": "notifier", + "x-event": "Capabilities.onGranted" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "summary": "Listens for all App permitted capabilities to become granted.", + "params": [ + { + "name": "role", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + } + }, + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "value", + "summary": "Provides the capability info.", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + } + } + ], + "examples": [ + { + "name": "Postal code granted", + "params": [ + { + "name": "role", + "value": "use" + }, + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + }, + { + "name": "Default Result", + "value": { + "capability": "xrn:firebolt:capability:localization:postal-code", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + } + } + } + ] + } + ] + }, + { + "name": "revoked", + "tags": [ + { + "name": "notifier", + "x-event": "Capabilities.onRevoked" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:capabilities:info" + ] + } + ], + "summary": "Listens for all App permitted capabilities to become revoked.", + "params": [ + { + "name": "role", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + } + }, + { + "name": "capability", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + } + }, + { + "name": "value", + "summary": "Provides the capability info.", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/CapabilityInfo" + } + } + ], + "examples": [ + { + "name": "Postal code revoked", + "params": [ + { + "name": "role", + "value": "use" + }, + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + }, + { + "name": "Default Result", + "value": { + "capability": "xrn:firebolt:capability:localization:postal-code", + "supported": true, + "available": true, + "use": { + "permitted": true, + "granted": true + }, + "manage": { + "permitted": true, + "granted": true + }, + "provide": { + "permitted": true, + "granted": true + }, + "details": [ + "grantDenied" + ] + } + } + ] + } + ] + } + ], + "components": { + "schemas": { + "CapabilityOption": { + "title": "CapabilityOption", + "type": "object", + "properties": { + "role": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role", + "description": "Which role of the capability to check the state of, default will be 'use'", + "default": "use" + } + } + } + } + } } diff --git a/src/openrpc/closed_captions.json b/src/openrpc/closed_captions.json index 90fd21e90..cef7fe1f2 100644 --- a/src/openrpc/closed_captions.json +++ b/src/openrpc/closed_captions.json @@ -1,627 +1,627 @@ { - "openrpc": "1.2.4", - "info": { - "title": "ClosedCaptions", - "description": "A module for managing closed-captions Settings.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "enabled", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "Whether or not closed-captions are enabled.", - "params": [], - "result": { - "name": "enabled", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "enabled", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "enabled", - "value": false - } - } - ] - }, - { - "name": "fontFamily", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred font family for displaying closed-captions.", - "params": [], - "result": { - "name": "family", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/FontFamily" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "family", - "value": "monospaced_sanserif" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "family", - "value": "cursive" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "family", - "value": null - } - } - ] - }, - { - "name": "fontSize", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred font size for displaying closed-captions.", - "params": [], - "result": { - "name": "size", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/FontSize" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "size", - "value": 1 - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "size", - "value": 1 - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "size", - "value": null - } - } - ] - }, - { - "name": "fontColor", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred font color for displaying closed-captions.", - "params": [], - "result": { - "name": "color", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Color" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "color", - "value": "#ffffff" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "color", - "value": "#000000" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "color", - "value": null - } - } - ] - }, - { - "name": "fontEdge", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred font edge style for displaying closed-captions.", - "params": [], - "result": { - "name": "edge", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/FontEdge" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "edge", - "value": "none" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "edge", - "value": "uniform" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "edge", - "value": null - } - } - ] - }, - { - "name": "fontEdgeColor", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred font edge color for displaying closed-captions.", - "params": [], - "result": { - "name": "color", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Color" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "color", - "value": "#000000" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "color", - "value": "#ffffff" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "color", - "value": null - } - } - ] - }, - { - "name": "fontOpacity", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred opacity for displaying closed-captions characters.", - "params": [], - "result": { - "name": "opacity", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Opacity" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "opacity", - "value": 99 - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "opacity", - "value": 100 - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "opacity", - "value": null - } - } - ] - }, - { - "name": "backgroundColor", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred background color for displaying closed-captions, .", - "params": [], - "result": { - "name": "color", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Color" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "color", - "value": "#000000" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "color", - "value": "#ffffff" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "color", - "value": null - } - } - ] - }, - { - "name": "backgroundOpacity", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred opacity for displaying closed-captions backgrounds.", - "params": [], - "result": { - "name": "opacity", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Opacity" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "opacity", - "value": 99 - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "opacity", - "value": 100 - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "opacity", - "value": null - } - } - ] - }, - { - "name": "textAlign", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred horizontal alignment for displaying closed-captions characters.", - "params": [], - "result": { - "name": "alignment", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/HorizontalAlignment" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "alignment", - "value": "center" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "alignment", - "value": "left" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "alignment", - "value": null - } - } - ] - }, - { - "name": "textAlignVertical", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred horizontal alignment for displaying closed-captions characters.", - "params": [], - "result": { - "name": "alignment", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/VerticalAlignment" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "alignment", - "value": "middle" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "alignment", - "value": "top" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "alignment", - "value": null - } - } - ] - }, - { - "name": "windowColor", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred window color for displaying closed-captions, .", - "params": [], - "result": { - "name": "color", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Color" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "color", - "value": "#000000" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "color", - "value": "white" - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "color", - "value": null - } - } - ] - }, - { - "name": "windowOpacity", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:closedcaptions" - ] - } - ], - "summary": "The preferred window opacity for displaying closed-captions backgrounds.", - "params": [], - "result": { - "name": "opacity", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/Opacity" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "opacity", - "value": 99 - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "opacity", - "value": 100 - } - }, - { - "name": "Default example #3", - "params": [], - "result": { - "name": "opacity", - "value": null - } - } - ] - }, + "openrpc": "1.2.4", + "info": { + "title": "ClosedCaptions", + "description": "A module for managing closed-captions Settings.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "enabled", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "Whether or not closed-captions are enabled.", + "params": [], + "result": { + "name": "enabled", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "enabled", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "enabled", + "value": false + } + } + ] + }, + { + "name": "fontFamily", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred font family for displaying closed-captions.", + "params": [], + "result": { + "name": "family", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/FontFamily" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "family", + "value": "monospace_serif" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "family", + "value": "cursive" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "family", + "value": null + } + } + ] + }, + { + "name": "fontSize", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred font size for displaying closed-captions.", + "params": [], + "result": { + "name": "size", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/FontSize" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "size", + "value": 1 + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "size", + "value": 1 + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "size", + "value": null + } + } + ] + }, + { + "name": "fontColor", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred font color for displaying closed-captions.", + "params": [], + "result": { + "name": "color", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Color" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "color", + "value": "#ffffff" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "color", + "value": "#000000" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "color", + "value": null + } + } + ] + }, + { + "name": "fontEdge", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred font edge style for displaying closed-captions.", + "params": [], + "result": { + "name": "edge", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/FontEdge" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "edge", + "value": "none" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "edge", + "value": "uniform" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "edge", + "value": null + } + } + ] + }, + { + "name": "fontEdgeColor", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred font edge color for displaying closed-captions.", + "params": [], + "result": { + "name": "color", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Color" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "color", + "value": "#000000" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "color", + "value": "#ffffff" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "color", + "value": null + } + } + ] + }, + { + "name": "fontOpacity", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred opacity for displaying closed-captions characters.", + "params": [], + "result": { + "name": "opacity", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Opacity" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "opacity", + "value": 99 + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "opacity", + "value": 100 + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "opacity", + "value": null + } + } + ] + }, + { + "name": "backgroundColor", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred background color for displaying closed-captions, .", + "params": [], + "result": { + "name": "color", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Color" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "color", + "value": "#000000" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "color", + "value": "#ffffff" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "color", + "value": null + } + } + ] + }, + { + "name": "backgroundOpacity", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred opacity for displaying closed-captions backgrounds.", + "params": [], + "result": { + "name": "opacity", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Opacity" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "opacity", + "value": 99 + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "opacity", + "value": 100 + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "opacity", + "value": null + } + } + ] + }, + { + "name": "textAlign", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred horizontal alignment for displaying closed-captions characters.", + "params": [], + "result": { + "name": "alignment", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/HorizontalAlignment" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "alignment", + "value": "center" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "alignment", + "value": "left" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "alignment", + "value": null + } + } + ] + }, + { + "name": "textAlignVertical", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred horizontal alignment for displaying closed-captions characters.", + "params": [], + "result": { + "name": "alignment", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/VerticalAlignment" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "alignment", + "value": "middle" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "alignment", + "value": "top" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "alignment", + "value": null + } + } + ] + }, + { + "name": "windowColor", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred window color for displaying closed-captions, .", + "params": [], + "result": { + "name": "color", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Color" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "color", + "value": "#000000" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "color", + "value": "white" + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "color", + "value": null + } + } + ] + }, + { + "name": "windowOpacity", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:closedcaptions" + ] + } + ], + "summary": "The preferred window opacity for displaying closed-captions backgrounds.", + "params": [], + "result": { + "name": "opacity", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/Opacity" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "opacity", + "value": 99 + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "opacity", + "value": 100 + } + }, + { + "name": "Default example #3", + "params": [], + "result": { + "name": "opacity", + "value": null + } + } + ] + }, { "name": "preferredLanguages", "summary": "A prioritized list of ISO 639-2/B codes for the preferred closed captions languages on this device.", @@ -643,7 +643,7 @@ "schema": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/ISO639_2Language" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/ISO639_2Language" } } }, @@ -672,30 +672,30 @@ } ] } - ], - "components": { - "schemas": { - "ClosedCaptionsSettingsProviderRequest": { - "title": "ClosedCaptionsSettingsProviderRequest", - "allOf": [ - { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/ProviderRequest" - }, - { - "type": "object", - "properties": { - "parameters": { - "const": null - } - } - } - ], - "examples": [ - { - "correlationId": "abc" - } - ] - } - } - } + ], + "components": { + "schemas": { + "ClosedCaptionsSettingsProviderRequest": { + "title": "ClosedCaptionsSettingsProviderRequest", + "allOf": [ + { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/ProviderRequest" + }, + { + "type": "object", + "properties": { + "parameters": { + "const": null + } + } + } + ], + "examples": [ + { + "correlationId": "abc" + } + ] + } + } + } } \ No newline at end of file diff --git a/src/openrpc/content.json b/src/openrpc/content.json index 0ffbeadbf..b0dede49c 100644 --- a/src/openrpc/content.json +++ b/src/openrpc/content.json @@ -11,7 +11,7 @@ "tags": [ { "name": "capabilities", - "x-provided-by": "Discovery.onRequestUserInterest", + "x-provided-by": "Interest.userInterest", "x-uses": [ "xrn:firebolt:capability:discovery:interest" ] @@ -24,14 +24,14 @@ "name": "type", "required": true, "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestType" } }, { "name": "reason", "required": true, "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestReason" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestReason" } } ], @@ -87,10 +87,10 @@ ] }, { - "name": "onUserInterest", + "name": "userInterest", "tags": [ { - "name": "event" + "name": "notifier" }, { "name": "capabilities", @@ -102,48 +102,51 @@ ], "summary": "Provide information about the entity currently displayed or selected on the screen.", "description": "Provide information about the entity currently displayed or selected on the screen.", - "params": [], - "result": { - "name": "interest", - "schema": { - "$ref": "#/components/schemas/InterestEvent" - }, - "summary": "The EntityDetails data." - }, + "params": [ + { + "name": "interest", + "required": true, + "schema": { + "$ref": "#/components/schemas/InterestEvent" + }, + "summary": "The EntityDetails data." + } + ], "examples": [ { "name": "Default Example", - "params": [], - "result": { - "name": "interest", - "value": { - "appId": "cool-app", - "type": "interest", - "reason": "playlist", - "entity": { - "identifiers": { - "entityId": "345", - "entityType": "program", - "programType": "movie" - }, - "info": { - "title": "Cool Runnings", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1993-01-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-Movie", - "rating": "PG" - }, - { - "scheme": "CA-Movie", - "rating": "G" - } - ] + "params": [ + { + "name": "interest", + "value": { + "appId": "cool-app", + "type": "interest", + "reason": "playlist", + "entity": { + "identifiers": { + "entityId": "345", + "entityType": "program", + "programType": "movie" + }, + "info": { + "title": "Cool Runnings", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1993-01-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-Movie", + "rating": "PG" + }, + { + "scheme": "CA-Movie", + "rating": "G" + } + ] + } } } - } - } + } + ] } ] } @@ -158,7 +161,7 @@ "type": "string" }, "entity": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/EntityDetails" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/EntityDetails" } }, "required": [ @@ -174,13 +177,13 @@ "type": "string" }, "type": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestType" }, "reason": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestReason" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestReason" }, "entity": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/EntityDetails" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/EntityDetails" } }, "required": [ diff --git a/src/openrpc/device.json b/src/openrpc/device.json index 04cdced4d..47cd12772 100644 --- a/src/openrpc/device.json +++ b/src/openrpc/device.json @@ -1,810 +1,814 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Device", - "description": "A module for querying about the device and it's capabilities.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "id", - "summary": "Get the platform back-office device identifier", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:id" - ] - } - ], - "result": { - "name": "id", - "summary": "the id", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "123" - } - } - ] - }, - { - "name": "distributor", - "summary": "Get the distributor ID for this device", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:distributor" - ] - } - ], - "result": { - "name": "distributorId", - "summary": "the distributor ID", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the distributor ID", - "params": [], - "result": { - "name": "Default Result", - "value": "Company" - } - } - ] - }, - { - "name": "platform", - "summary": "Get the platform ID for this device", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "platformId", - "summary": "the platform ID", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the platform ID", - "params": [], - "result": { - "name": "Default Result", - "value": "WPE" - } - } - ] - }, - { - "name": "uid", - "summary": "Gets a unique id for the current app & device", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:uid" - ] - } - ], - "result": { - "name": "uniqueId", - "summary": "a unique ID", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the unique ID", - "params": [], - "result": { - "name": "Default Result", - "value": "ee6723b8-7ab3-462c-8d93-dbf61227998e" - } - } - ] - }, - { - "name": "type", - "summary": "Get the device type", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "deviceType", - "summary": "the device type", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the device type", - "params": [], - "result": { - "name": "Default Result", - "value": "STB" - } - } - ] - }, - { - "name": "model", - "summary": "Get the device model", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:model" - ] - } - ], - "result": { - "name": "model", - "summary": "the device model", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the device model", - "params": [], - "result": { - "name": "Default Result", - "value": "xi6" - } - } - ] - }, - { - "name": "sku", - "summary": "Get the device sku", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:sku" - ] - } - ], - "result": { - "name": "sku", - "summary": "the device sku", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the device sku", - "params": [], - "result": { - "name": "Default Result", - "value": "AX061AEI" - } - } - ] - }, - { - "name": "make", - "summary": "Get the device make", - "params": [], - "tags": [ - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:make" - ] - } - ], - "result": { - "name": "make", - "summary": "the device make", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the device make", - "params": [], - "result": { - "name": "Default Result", - "value": "Arris" - } - } - ] - }, - { - "name": "version", - "summary": "Get the SDK, OS and other version info", - "params": [], - "tags": [ - { - "name": "exclude-from-sdk" - }, - { - "name": "property:immutable" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "versions", - "summary": "the versions", - "schema": { - "type": "object", - "properties": { - "sdk": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion", - "description": "The Firebolt SDK version" - }, - "api": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion", - "description": "The lateset Firebolt API version supported by the curent device." - }, - "firmware": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion", - "description": "The device firmware version." - }, - "os": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/SemanticVersion", - "description": "**Deprecated** Use `firmware`, instead." - }, - "debug": { - "type": "string", - "description": "Detail version as a string, for debugging purposes" - } - }, - "required": [ - "api", - "firmware", - "os" - ] - } - }, - "examples": [ - { - "name": "Getting the os and sdk versions", - "params": [], - "result": { - "name": "Default Result", - "value": { - "sdk": { - "major": 0, - "minor": 8, - "patch": 0, - "readable": "Firebolt JS SDK v0.8.0" - }, - "api": { - "major": 0, - "minor": 8, - "patch": 0, - "readable": "Firebolt API v0.8.0" - }, - "firmware": { - "major": 1, - "minor": 2, - "patch": 3, - "readable": "Device Firmware v1.2.3" - }, - "os": { - "major": 0, - "minor": 1, - "patch": 0, - "readable": "Firebolt OS v0.1.0" - }, - "debug": "Non-parsable build info for error logging only." - } - } - } - ] - }, - { - "name": "hdcp", - "summary": "Get the supported HDCP profiles", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "supportedHdcpProfiles", - "summary": "the supported HDCP profiles", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/BooleanMap" - } - }, - "examples": [ - { - "name": "Getting the supported HDCP profiles", - "params": [], - "result": { - "name": "Default Result", - "value": { - "hdcp1.4": true, - "hdcp2.2": true - } - } - } - ] - }, - { - "name": "hdr", - "summary": "Get the supported HDR profiles", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "supportedHdrProfiles", - "summary": "the supported HDR profiles", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/BooleanMap" - } - }, - "examples": [ - { - "name": "Getting the supported HDR profiles", - "params": [], - "result": { - "name": "Default Result", - "value": { - "hdr10": true, - "hdr10Plus": true, - "dolbyVision": true, - "hlg": true - } - } - } - ] - }, - { - "name": "audio", - "summary": "Get the supported audio profiles", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "supportedAudioProfiles", - "summary": "the supported audio profiles", - "schema": { - "$ref": "#/components/schemas/AudioProfiles" - } - }, - "examples": [ - { - "name": "Getting the supported audio profiles", - "params": [], - "result": { - "name": "Default Result", - "value": { - "stereo": true, - "dolbyDigital5.1": true, - "dolbyDigital5.1+": true, - "dolbyAtmos": true - } - } - } - ] - }, - { - "name": "screenResolution", - "summary": "Get the current screen resolution", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "screenResolution", - "summary": "the resolution", - "schema": { - "$ref": "#/components/schemas/Resolution" - } - }, - "examples": [ - { - "name": "Getting the screen resolution", - "params": [], - "result": { - "name": "Default Result", - "value": [ - 1920, - 1080 - ] - } - } - ] - }, - { - "name": "videoResolution", - "summary": "Get the current video resolution", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "result": { - "name": "videoResolution", - "summary": "the resolution", - "schema": { - "$ref": "#/components/schemas/Resolution" - } - }, - "examples": [ - { - "name": "Getting the video resolution", - "params": [], - "result": { - "name": "Default Result", - "value": [ - 1920, - 1080 - ] - } - } - ] - }, - { - "name": "name", - "summary": "The human readable name of the device", - "params": [], - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:name" - ] - } - ], - "result": { - "name": "value", - "summary": "the device friendly-name", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "Living Room" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "Kitchen" - } - } - ] - }, - { - "name": "onDeviceNameChanged", - "tags": [ - { - "name": "event" - }, - { - "name": "deprecated", - "x-since": "0.6.0", - "x-alternative": "Device.name()" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:name" - ] - } - ], - "summary": "Get the human readable name of the device", - "params": [], - "result": { - "name": "value", - "summary": "the device friendly-name", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Getting the device name", - "params": [], - "result": { - "name": "Default Result", - "value": "Living Room" - } - } - ] - }, - { - "name": "network", - "summary": "Get the current network status and type", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:network:status" - ] - } - ], - "result": { - "name": "networkInfo", - "summary": "the status and type", - "schema": { - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/NetworkState" - }, - "type": { - "$ref": "#/components/schemas/NetworkType" - } - }, - "required": [ - "state", - "type" - ] - } - }, - "examples": [ - { - "name": "Getting the network info", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "connected", - "type": "wifi" - } - } - } - ] - }, - { - "name": "provision", - "summary": "Used by a distributor to push provision info to firebolt.", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:account:id", - "xrn:firebolt:capability:device:id", - "xrn:firebolt:capability:device:distributor" - ] - } - ], - "params": [ - { - "name": "accountId", - "summary": "The id of the account that is device is attached to in the back office.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "deviceId", - "summary": "The id of the device in the back office.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "distributorId", - "summary": "The id of the distributor in the back office.", - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "accountId", - "value": "12345678910" - }, - { - "name": "deviceId", - "value": "987654321111" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - }, - { - "name": "With distributor id", - "params": [ - { - "name": "accountId", - "value": "12345678910" - }, - { - "name": "deviceId", - "value": "987654321111" - }, - { - "name": "distributorId", - "value": "global_partner" - } - ], - "result": { - "name": "partnerResult", - "value": null - } - } - ] - } - ], - "components": { - "schemas": { - "Resolution": { - "type": "array", - "items": [ - { - "type": "integer" - }, - { - "type": "integer" - } - ], - "additionalItems": false, - "minItems": 2, - "maxItems": 2 - }, - "NetworkType": { - "title": "NetworkType", - "type": "string", - "enum": [ - "wifi", - "ethernet", - "hybrid" - ], - "description": "The type of network that is currently active" - }, - "NetworkState": { - "title": "NetworkState", - "type": "string", - "enum": [ - "connected", - "disconnected" - ], - "description": "The type of network that is currently active" - }, - "AudioProfiles": { - "title": "AudioProfiles", - "allOf": [ - { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/BooleanMap" - }, - { - "type": "object", - "propertyNames": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/AudioProfile" - } - } - ] - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Device", + "description": "A module for querying about the device and it's capabilities.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "id", + "summary": "Get the platform back-office device identifier", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:id" + ] + } + ], + "result": { + "name": "id", + "summary": "the id", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": "123" + } + } + ] + }, + { + "name": "distributor", + "summary": "Get the distributor ID for this device", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:distributor" + ] + } + ], + "result": { + "name": "distributorId", + "summary": "the distributor ID", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the distributor ID", + "params": [], + "result": { + "name": "Default Result", + "value": "Company" + } + } + ] + }, + { + "name": "platform", + "summary": "Get the platform ID for this device", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "platformId", + "summary": "the platform ID", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the platform ID", + "params": [], + "result": { + "name": "Default Result", + "value": "WPE" + } + } + ] + }, + { + "name": "uid", + "summary": "Gets a unique id for the current app & device", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:uid" + ] + } + ], + "result": { + "name": "uniqueId", + "summary": "a unique ID", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the unique ID", + "params": [], + "result": { + "name": "Default Result", + "value": "ee6723b8-7ab3-462c-8d93-dbf61227998e" + } + } + ] + }, + { + "name": "type", + "summary": "Get the device type", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "deviceType", + "summary": "the device type", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the device type", + "params": [], + "result": { + "name": "Default Result", + "value": "STB" + } + } + ] + }, + { + "name": "model", + "summary": "Get the device model", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:model" + ] + } + ], + "result": { + "name": "model", + "summary": "the device model", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the device model", + "params": [], + "result": { + "name": "Default Result", + "value": "xi6" + } + } + ] + }, + { + "name": "sku", + "summary": "Get the device sku", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:sku" + ] + } + ], + "result": { + "name": "sku", + "summary": "the device sku", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the device sku", + "params": [], + "result": { + "name": "Default Result", + "value": "AX061AEI" + } + } + ] + }, + { + "name": "make", + "summary": "Get the device make", + "params": [], + "tags": [ + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:make" + ] + } + ], + "result": { + "name": "make", + "summary": "the device make", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Getting the device make", + "params": [], + "result": { + "name": "Default Result", + "value": "Arris" + } + } + ] + }, + { + "name": "version", + "summary": "Get the SDK, OS and other version info", + "params": [], + "tags": [ + { + "name": "exclude-from-sdk" + }, + { + "name": "property:immutable" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "versions", + "summary": "the versions", + "schema": { + "type": "object", + "properties": { + "sdk": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion", + "description": "The Firebolt SDK version" + }, + "api": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion", + "description": "The lateset Firebolt API version supported by the curent device." + }, + "firmware": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion", + "description": "The device firmware version." + }, + "os": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/SemanticVersion", + "description": "**Deprecated** Use `firmware`, instead." + }, + "debug": { + "type": "string", + "description": "Detail version as a string, for debugging purposes" + } + }, + "required": [ + "sdk", + "api", + "firmware", + "os" + ] + } + }, + "examples": [ + { + "name": "Getting the os and sdk versions", + "params": [], + "result": { + "name": "Default Result", + "value": { + "sdk": { + "major": 0, + "minor": 8, + "patch": 0, + "readable": "Firebolt JS SDK v0.8.0" + }, + "api": { + "major": 0, + "minor": 8, + "patch": 0, + "readable": "Firebolt API v0.8.0" + }, + "firmware": { + "major": 1, + "minor": 2, + "patch": 3, + "readable": "Device Firmware v1.2.3" + }, + "os": { + "major": 0, + "minor": 1, + "patch": 0, + "readable": "Firebolt OS v0.1.0" + }, + "debug": "Non-parsable build info for error logging only." + } + } + } + ] + }, + { + "name": "hdcp", + "summary": "Get the supported HDCP profiles", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "supportedHdcpProfiles", + "summary": "the supported HDCP profiles", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/BooleanMap" + } + }, + "examples": [ + { + "name": "Getting the supported HDCP profiles", + "params": [], + "result": { + "name": "Default Result", + "value": { + "hdcp1.4": true, + "hdcp2.2": true + } + } + } + ] + }, + { + "name": "hdr", + "summary": "Get the supported HDR profiles", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "supportedHdrProfiles", + "summary": "the supported HDR profiles", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/BooleanMap" + } + }, + "examples": [ + { + "name": "Getting the supported HDR profiles", + "params": [], + "result": { + "name": "Default Result", + "value": { + "hdr10": true, + "hdr10Plus": true, + "dolbyVision": true, + "hlg": true + } + } + } + ] + }, + { + "name": "audio", + "summary": "Get the supported audio profiles", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "supportedAudioProfiles", + "summary": "the supported audio profiles", + "schema": { + "$ref": "#/components/schemas/AudioProfiles" + } + }, + "examples": [ + { + "name": "Getting the supported audio profiles", + "params": [], + "result": { + "name": "Default Result", + "value": { + "stereo": true, + "dolbyDigital5.1": true, + "dolbyDigital5.1+": true, + "dolbyAtmos": true + } + } + } + ] + }, + { + "name": "screenResolution", + "summary": "Get the current screen resolution", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "screenResolution", + "summary": "the resolution", + "schema": { + "$ref": "#/components/schemas/Resolution" + } + }, + "examples": [ + { + "name": "Getting the screen resolution", + "params": [], + "result": { + "name": "Default Result", + "value": [ + 1920, + 1080 + ] + } + } + ] + }, + { + "name": "videoResolution", + "summary": "Get the current video resolution", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "result": { + "name": "videoResolution", + "summary": "the resolution", + "schema": { + "$ref": "#/components/schemas/Resolution" + } + }, + "examples": [ + { + "name": "Getting the video resolution", + "params": [], + "result": { + "name": "Default Result", + "value": [ + 1920, + 1080 + ] + } + } + ] + }, + { + "name": "name", + "summary": "The human readable name of the device", + "params": [], + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:name" + ] + } + ], + "result": { + "name": "value", + "summary": "the device friendly-name", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "Living Room" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "Kitchen" + } + } + ] + }, + { + "name": "deviceNameChanged", + "tags": [ + { + "name": "notifier", + "x-event": "Device.onDeviceNameChanged" + }, + { + "name": "deprecated", + "x-since": "0.6.0", + "x-alternative": "Device.name()" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:name" + ] + } + ], + "summary": "Get the human readable name of the device", + "params": [ + { + "name": "value", + "summary": "the device friendly-name", + "schema": { + "type": "string" + } + } + ], + "examples": [ + { + "name": "Getting the device name", + "params": [ + { + "name": "Default Result", + "value": "Living Room" + } + ] + } + ] + }, + { + "name": "network", + "summary": "Get the current network status and type", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:network:status" + ] + } + ], + "result": { + "name": "networkInfo", + "summary": "the status and type", + "schema": { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/NetworkState" + }, + "type": { + "$ref": "#/components/schemas/NetworkType" + } + }, + "required": [ + "state", + "type" + ] + } + }, + "examples": [ + { + "name": "Getting the network info", + "params": [], + "result": { + "name": "Default Result", + "value": { + "state": "connected", + "type": "wifi" + } + } + } + ] + }, + { + "name": "provision", + "summary": "Used by a distributor to push provision info to firebolt.", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:account:id", + "xrn:firebolt:capability:device:id", + "xrn:firebolt:capability:device:distributor" + ] + } + ], + "params": [ + { + "name": "accountId", + "summary": "The id of the account that is device is attached to in the back office.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "deviceId", + "summary": "The id of the device in the back office.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "distributorId", + "summary": "The id of the distributor in the back office.", + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "accountId", + "value": "12345678910" + }, + { + "name": "deviceId", + "value": "987654321111" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + }, + { + "name": "With distributor id", + "params": [ + { + "name": "accountId", + "value": "12345678910" + }, + { + "name": "deviceId", + "value": "987654321111" + }, + { + "name": "distributorId", + "value": "global_partner" + } + ], + "result": { + "name": "partnerResult", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "Resolution": { + "type": "array", + "items": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "additionalItems": false, + "minItems": 2, + "maxItems": 2 + }, + "NetworkType": { + "title": "NetworkType", + "type": "string", + "enum": [ + "wifi", + "ethernet", + "hybrid" + ], + "description": "The type of network that is currently active" + }, + "NetworkState": { + "title": "NetworkState", + "type": "string", + "enum": [ + "connected", + "disconnected" + ], + "description": "The type of network that is currently active" + }, + "AudioProfiles": { + "title": "AudioProfiles", + "allOf": [ + { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/BooleanMap" + }, + { + "type": "object", + "propertyNames": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/AudioProfile" + } + } + ] + } + } + } } \ No newline at end of file diff --git a/src/openrpc/discovery.json b/src/openrpc/discovery.json index 49b7e20aa..fa3239195 100644 --- a/src/openrpc/discovery.json +++ b/src/openrpc/discovery.json @@ -1,1476 +1,1585 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Discovery", - "version": "0.0.0", - "description": "Your App likely wants to integrate with the Platform's discovery capabilities. For example to add a \"Watch Next\" tile that links to your app from the platform's home screen.\n\nGetting access to this information requires to connect to lower level APIs made available by the platform. Since implementations differ between operators and platforms, the Firebolt SDK offers a Discovery module, that exposes a generic, agnostic interface to the developer.\n\nUnder the hood, an underlaying transport layer will then take care of calling the right APIs for the actual platform implementation that your App is running on.\n\nThe Discovery plugin is used to _send_ information to the Platform.\n\n### Localization\nApps should provide all user-facing strings in the device's language, as specified by the Firebolt `Localization.language` property.\n\nApps should provide prices in the same currency presented in the app. If multiple currencies are supported in the app, the app should provide prices in the user's current default currency." - }, - "methods": [ - { - "name": "policy", - "summary": "get the discovery policy", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:policy" - ] - } - ], - "result": { - "name": "policy", - "summary": "discovery policy opt-in/outs", - "schema": { - "$ref": "#/components/schemas/DiscoveryPolicy" - } - }, - "examples": [ - { - "name": "Getting the discovery policy", - "params": [], - "result": { - "name": "Default Result", - "value": { - "enableRecommendations": true, - "shareWatchHistory": true, - "rememberWatchedPrograms": true - } - } - } - ] - }, - { - "name": "entityInfo", - "tags": [ - { - "name": "polymorphic-pull" - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:discovery:entity-info" - }, - { - "name": "deprecated", - "x-alternative": "Discovery.details" - } - ], - "summary": "Provide information about a program entity and its available watchable assets, such as entitlement status and price, via either a push or pull call flow.", - "description": "Provide information about a program entity and its available watchable assets, such as entitlement status and price, via either a push or pull call flow. Includes information about the program entity and its relevant associated entities, such as extras, previews, and, in the case of TV series, seasons and episodes.\n\nSee the `EntityInfo` and `WayToWatch` data structures below for more information.\n\nThe app only needs to implement Pull support for `entityInfo` at this time.", - "params": [ - { - "name": "correlationId", - "required": true, - "schema": { - "type": [ - "string", - "null" - ] - } - }, - { - "name": "result", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/EntityInfoResult" - }, - "summary": "The entityInfo data." - } - ], - "result": { - "name": "success", - "summary": "True if the push operation is successful", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send entity info for a movie to the platform.", - "params": [ - { - "name": "correlationId", - "value": null - }, - { - "name": "result", - "value": { - "expires": "2025-01-01T00:00:00.000Z", - "entity": { - "identifiers": { - "entityId": "345" - }, - "entityType": "program", - "programType": "movie", - "title": "Cool Runnings", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1993-01-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-Movie", - "rating": "PG" - }, - { - "scheme": "CA-Movie", - "rating": "G" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "123" - }, - "expires": "2025-01-01T00:00:00.000Z", - "entitled": true, - "entitledExpires": "2025-01-01T00:00:00.000Z", - "offeringType": "buy", - "price": 2.99, - "videoQuality": [ - "UHD" - ], - "audioProfile": [ - "dolbyAtmos" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ], - "subtitles": [ - "es" - ], - "audioDescriptions": [ - "en" - ] - } - ] - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send entity info for a movie with a trailer to the platform.", - "params": [ - { - "name": "correlationId", - "value": null - }, - { - "name": "result", - "value": { - "expires": "2025-01-01T00:00:00.000Z", - "entity": { - "identifiers": { - "entityId": "345" - }, - "entityType": "program", - "programType": "movie", - "title": "Cool Runnings", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1993-01-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-Movie", - "rating": "PG" - }, - { - "scheme": "CA-Movie", - "rating": "G" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "123" - }, - "expires": "2025-01-01T00:00:00.000Z", - "entitled": true, - "entitledExpires": "2025-01-01T00:00:00.000Z", - "offeringType": "buy", - "price": 2.99, - "videoQuality": [ - "UHD" - ], - "audioProfile": [ - "dolbyAtmos" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ], - "subtitles": [ - "es" - ], - "audioDescriptions": [ - "en" - ] - } - ] - }, - "related": [ - { - "identifiers": { - "entityId": "345" - }, - "entityType": "program", - "programType": "preview", - "title": "Cool Runnings Trailer", - "waysToWatch": [ - { - "identifiers": { - "assetId": "123111", - "entityId": "345" - }, - "entitled": true, - "videoQuality": [ - "HD" - ], - "audioProfile": [ - "dolbyAtmos" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ] - } - ] - } - ] - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send entity info for a TV Series with seasons and episodes to the platform.", - "params": [ - { - "name": "correlationId", - "value": null - }, - { - "name": "result", - "value": { - "expires": "2025-01-01T00:00:00.000Z", - "entity": { - "identifiers": { - "entityId": "98765" - }, - "entityType": "program", - "programType": "series", - "title": "Perfect Strangers", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1986-01-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-TV", - "rating": "TV-PG" - } - ] - }, - "related": [ - { - "identifiers": { - "entityId": "111", - "seriesId": "98765" - }, - "entityType": "program", - "programType": "season", - "seasonNumber": 1, - "title": "Perfect Strangers Season 3", - "contentRatings": [ - { - "scheme": "US-TV", - "rating": "TV-PG" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "556", - "entityId": "111", - "seriesId": "98765" - }, - "entitled": true, - "offeringType": "free", - "videoQuality": [ - "SD" - ], - "audioProfile": [ - "stereo" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ] - } - ] - }, - { - "identifiers": { - "entityId": "111", - "seriesId": "98765" - }, - "entityType": "program", - "programType": "episode", - "seasonNumber": 1, - "episodeNumber": 1, - "title": "Knock Knock, Who's There?", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1986-03-25T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-TV", - "rating": "TV-PG" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "556", - "entityId": "111", - "seriesId": "98765" - }, - "entitled": true, - "offeringType": "free", - "videoQuality": [ - "SD" - ], - "audioProfile": [ - "stereo" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ] - } - ] - }, - { - "identifiers": { - "entityId": "112", - "seriesId": "98765" - }, - "entityType": "program", - "programType": "episode", - "seasonNumber": 1, - "episodeNumber": 2, - "title": "Picture This", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1986-04-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-TV", - "rating": "TV-PG" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "557", - "entityId": "112", - "seriesId": "98765" - }, - "entitled": true, - "offeringType": "free", - "videoQuality": [ - "SD" - ], - "audioProfile": [ - "stereo" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ] - } - ] - } - ] - } - } - ], - "result": { - "name": "result", - "value": true - } - } - ] - }, - { - "name": "purchasedContent", - "tags": [ - { - "name": "polymorphic-pull" - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:discovery:purchased-content" - }, - { - "name": "deprecated", - "x-alternative": "Discovery.purchases" - } - ], - "summary": "Provide a list of purchased content for the authenticated account, such as rentals and electronic sell through purchases.", - "params": [ - { - "name": "correlationId", - "required": true, - "schema": { - "type": [ - "string", - "null" - ] - } - }, - { - "name": "result", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/PurchasedContentResult" - }, - "summary": "The data for the purchasedContent" - } - ], - "result": { - "name": "success", - "summary": "True if the push operation is successful", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Inform the platform of the user's purchased content", - "params": [ - { - "name": "correlationId", - "value": null - }, - { - "name": "result", - "value": { - "totalCount": 10, - "expires": "2025-01-01T00:00:00.000Z", - "entries": [ - { - "identifiers": { - "entityId": "345" - }, - "entityType": "program", - "programType": "movie", - "title": "Cool Runnings", - "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", - "releaseDate": "1993-01-01T00:00:00.000Z", - "contentRatings": [ - { - "scheme": "US-Movie", - "rating": "PG" - }, - { - "scheme": "CA-Movie", - "rating": "G" - } - ], - "waysToWatch": [ - { - "identifiers": { - "assetId": "123" - }, - "expires": "2025-01-01T00:00:00.000Z", - "entitled": true, - "entitledExpires": "2025-01-01T00:00:00.000Z", - "offeringType": "buy", - "price": 2.99, - "videoQuality": [ - "UHD" - ], - "audioProfile": [ - "dolbyAtmos" - ], - "audioLanguages": [ - "en" - ], - "closedCaptions": [ - "en" - ], - "subtitles": [ - "es" - ], - "audioDescriptions": [ - "en" - ] - } - ] - } - ] - } - } - ], - "result": { - "name": "success", - "value": true - } - } - ], - "description": "Return content purchased by the user, such as rentals and electronic sell through purchases.\n\nThe app should return the user's 100 most recent purchases in `entries`. The total count of purchases must be provided in `count`. If `count` is greater than the total number of `entries`, the UI may provide a link into the app to see the complete purchase list.\n\nThe `EntityInfo` object returned is not required to have `waysToWatch` populated, but it is recommended that it do so in case the UI wants to surface additional information on the purchases screen.\n\nThe app should implement both Push and Pull methods for `purchasedContent`.\n\nThe app should actively push `purchasedContent` when:\n\n* The app becomes Active.\n* When the state of the purchasedContent set has changed.\n* The app goes into Inactive or Background state, if there is a chance a change event has been missed." - }, - { - "name": "watched", - "summary": "Notify the platform that content was partially or completely watched", - "tags": [ - { - "name": "polymorphic-reducer" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:watched" - ] - } - ], - "params": [ - { - "name": "entityId", - "required": true, - "schema": { - "type": "string" - }, - "summary": "The entity Id of the watched content." - }, - { - "name": "progress", - "summary": "How much of the content has been watched (percentage as 0-1 for VOD, number of seconds for live)", - "schema": { - "type": "number", - "minimum": 0 - } - }, - { - "name": "completed", - "summary": "Whether or not this viewing is considered \"complete,\" per the app's definition thereof", - "schema": { - "type": "boolean" - } - }, - { - "name": "watchedOn", - "summary": "Date/Time the content was watched, ISO 8601 Date/Time", - "schema": { - "type": "string", - "format": "date-time" - } - } - ], - "result": { - "name": "success", - "summary": "whether the call was successful or not", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Notifying the platform of watched content", - "params": [ - { - "name": "entityId", - "value": "partner.com/entity/123" - }, - { - "name": "progress", - "value": 0.95 - }, - { - "name": "completed", - "value": true - }, - { - "name": "watchedOn", - "value": "2021-04-23T18:25:43.511Z" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "watchNext", - "summary": "Suggest a call-to-action for this app on the platform home screen", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:watch-next" - ] - } - ], - "params": [ - { - "name": "title", - "summary": "The title of this call to action", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/LocalizedString" - }, - "required": true - }, - { - "name": "identifiers", - "summary": "A set of content identifiers for this call to action", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/Entity" - }, - "required": true - }, - { - "name": "expires", - "summary": "When this call to action should no longer be presented to users", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "images", - "summary": "A set of images for this call to action", - "schema": { - "type": "object", - "patternProperties": { - "^.*$": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/LocalizedString" - } - } - } - } - ], - "result": { - "name": "success", - "summary": "whether the call was successful or not", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Suggest a watch-next tile for the home screen", - "params": [ - { - "name": "title", - "value": "A Cool Show" - }, - { - "name": "identifiers", - "value": { - "entityId": "partner.com/entity/123" - } - }, - { - "name": "expires", - "value": "2021-04-23T18:25:43.511Z" - }, - { - "name": "images", - "value": { - "3x4": { - "en-US": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg", - "es": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg" - }, - "16x9": { - "en": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Suggest a watch-next tile for the home screen", - "params": [ - { - "name": "title", - "value": "A Fantastic Show" - }, - { - "name": "identifiers", - "value": { - "entityId": "partner.com/entity/456" - } - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "entitlements", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:content-access" - ] - }, - { - "name": "deprecated", - "x-since": "0.10.0", - "x-alternative": "Discovery.contentAccess()" - } - ], - "summary": "Inform the platform of the users latest entitlements w/in this app.", - "params": [ - { - "name": "entitlements", - "summary": "Array of entitlement objects", - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/Entitlement" - } - }, - "required": true - } - ], - "result": { - "name": "success", - "summary": "whether the call was successful or not", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Update user's entitlements", - "params": [ - { - "name": "entitlements", - "value": [ - { - "entitlementId": "partner.com/entitlement/123", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - }, - { - "entitlementId": "partner.com/entitlement/456", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - } - ] - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "contentAccess", - "summary": "Inform the platform of what content the user can access either by discovering it or consuming it. Availabilities determine which content is discoverable to a user, while entitlements determine if the user can currently consume that content. Content can be available but not entitled, this means that user can see the content but when they try to open it they must gain an entitlement either through purchase or subscription upgrade. In case the access changed off-device, this API should be called any time the app comes to the foreground to refresh the access. This API should also be called any time the availabilities or entitlements change within the app for any reason. Typical reasons may include the user signing into an account or upgrading a subscription. Less common cases can cause availabilities to change, such as moving to a new service location. When availabilities or entitlements are removed from the subscriber (such as when the user signs out), then an empty array should be given. To clear both, use the Discovery.clearContentAccess convenience API.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:content-access" - ] - } - ], - "params": [ - { - "name": "ids", - "summary": "A list of identifiers that represent content that is discoverable or consumable for the subscriber", - "schema": { - "$ref": "#/components/schemas/ContentAccessIdentifiers" - }, - "required": true - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Update subscriber's availabilities", - "params": [ - { - "name": "ids", - "value": { - "availabilities": [ - { - "type": "channel-lineup", - "id": "partner.com/availability/123", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - }, - { - "type": "channel-lineup", - "id": "partner.com/availability/456", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - } - ] - } - } - ], - "result": { - "name": "result", - "value": null - } - }, - { - "name": "Update subscriber's availabilities and entitlements", - "params": [ - { - "name": "ids", - "value": { - "availabilities": [ - { - "type": "channel-lineup", - "id": "partner.com/availability/123", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - }, - { - "type": "channel-lineup", - "id": "partner.com/availability/456", - "startTime": "2021-04-23T18:25:43.511Z", - "endTime": "2021-04-23T18:25:43.511Z" - } - ], - "entitlements": [ - { - "entitlementId": "123", - "startTime": "2025-01-01T00:00:00.000Z", - "endTime": "2025-01-01T00:00:00.000Z" - } - ] - } - } - ], - "result": { - "name": "result", - "value": null - } - }, - { - "name": "Update subscriber's entitlements", - "params": [ - { - "name": "ids", - "value": { - "entitlements": [ - { - "entitlementId": "123", - "startTime": "2025-01-01T00:00:00.000Z", - "endTime": "2025-01-01T00:00:00.000Z" - } - ] - } - } - ], - "result": { - "name": "result", - "value": null - } - }, - { - "name": "Clear a subscriber's entitlements", - "params": [ - { - "name": "ids", - "value": { - "entitlements": [] - } - } - ], - "result": { - "name": "result", - "value": null - } - }, - { - "name": "Clear a subscriber's availabilities", - "params": [ - { - "name": "ids", - "value": { - "availabilities": [] - } - } - ], - "result": { - "name": "result", - "value": null - } - } - ] - }, - { - "name": "clearContentAccess", - "summary": "Clear both availabilities and entitlements from the subscriber. This is equivalent of calling `Discovery.contentAccess({ availabilities: [], entitlements: []})`. This is typically called when the user signs out of an account.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:content-access" - ] - } - ], - "params": [], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Clear subscriber's availabilities and entitlements", - "params": [], - "result": { - "name": "result", - "value": null - } - } - ] - }, - { - "name": "launch", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:launch" - ] + "openrpc": "1.2.4", + "info": { + "title": "Discovery", + "version": "0.0.0", + "description": "Your App likely wants to integrate with the Platform's discovery capabilities. For example to add a \"Watch Next\" tile that links to your app from the platform's home screen.\n\nGetting access to this information requires to connect to lower level APIs made available by the platform. Since implementations differ between operators and platforms, the Firebolt SDK offers a Discovery module, that exposes a generic, agnostic interface to the developer.\n\nUnder the hood, an underlaying transport layer will then take care of calling the right APIs for the actual platform implementation that your App is running on.\n\nThe Discovery plugin is used to _send_ information to the Platform.\n\n### Localization\nApps should provide all user-facing strings in the device's language, as specified by the Firebolt `Localization.language` property.\n\nApps should provide prices in the same currency presented in the app. If multiple currencies are supported in the app, the app should provide prices in the user's current default currency." + }, + "methods": [ + { + "name": "policy", + "summary": "get the discovery policy", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:policy" + ] + } + ], + "result": { + "name": "policy", + "summary": "discovery policy opt-in/outs", + "schema": { + "$ref": "#/components/schemas/DiscoveryPolicy" + } + }, + "examples": [ + { + "name": "Getting the discovery policy", + "params": [], + "result": { + "name": "Default Result", + "value": { + "enableRecommendations": true, + "shareWatchHistory": true, + "rememberWatchedPrograms": true + } + } + } + ] + }, + { + "name": "entityInfo", + "tags": [ + { + "name": "polymorphic-pull" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:discovery:entity-info" + }, + { + "name": "deprecated" } - ], + ], + "summary": "Provide information about a program entity and its available watchable assets, such as entitlement status and price, via either a push or pull call flow.", + "description": "Provide information about a program entity and its available watchable assets, such as entitlement status and price, via either a push or pull call flow. Includes information about the program entity and its relevant associated entities, such as extras, previews, and, in the case of TV series, seasons and episodes.\n\nSee the `EntityInfo` and `WayToWatch` data structures below for more information.\n\nThe app only needs to implement Pull support for `entityInfo` at this time.", + "params": [ + { + "name": "correlationId", + "required": true, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "result", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/EntityInfoResult" + }, + "summary": "The entityInfo data." + } + ], + "result": { + "name": "success", + "summary": "True if the push operation is successful", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send entity info for a movie to the platform.", + "params": [ + { + "name": "correlationId", + "value": null + }, + { + "name": "result", + "value": { + "expires": "2025-01-01T00:00:00.000Z", + "entity": { + "identifiers": { + "entityId": "345" + }, + "entityType": "program", + "programType": "movie", + "title": "Cool Runnings", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1993-01-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-Movie", + "rating": "PG" + }, + { + "scheme": "CA-Movie", + "rating": "G" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "123" + }, + "expires": "2025-01-01T00:00:00.000Z", + "entitled": true, + "entitledExpires": "2025-01-01T00:00:00.000Z", + "offeringType": "buy", + "price": 2.99, + "videoQuality": [ + "UHD" + ], + "audioProfile": [ + "dolbyAtmos" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ], + "subtitles": [ + "es" + ], + "audioDescriptions": [ + "en" + ] + } + ] + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send entity info for a movie with a trailer to the platform.", + "params": [ + { + "name": "correlationId", + "value": null + }, + { + "name": "result", + "value": { + "expires": "2025-01-01T00:00:00.000Z", + "entity": { + "identifiers": { + "entityId": "345" + }, + "entityType": "program", + "programType": "movie", + "title": "Cool Runnings", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1993-01-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-Movie", + "rating": "PG" + }, + { + "scheme": "CA-Movie", + "rating": "G" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "123" + }, + "expires": "2025-01-01T00:00:00.000Z", + "entitled": true, + "entitledExpires": "2025-01-01T00:00:00.000Z", + "offeringType": "buy", + "price": 2.99, + "videoQuality": [ + "UHD" + ], + "audioProfile": [ + "dolbyAtmos" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ], + "subtitles": [ + "es" + ], + "audioDescriptions": [ + "en" + ] + } + ] + }, + "related": [ + { + "identifiers": { + "entityId": "345" + }, + "entityType": "program", + "programType": "preview", + "title": "Cool Runnings Trailer", + "waysToWatch": [ + { + "identifiers": { + "assetId": "123111", + "entityId": "345" + }, + "entitled": true, + "videoQuality": [ + "HD" + ], + "audioProfile": [ + "dolbyAtmos" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ] + } + ] + } + ] + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send entity info for a TV Series with seasons and episodes to the platform.", + "params": [ + { + "name": "correlationId", + "value": null + }, + { + "name": "result", + "value": { + "expires": "2025-01-01T00:00:00.000Z", + "entity": { + "identifiers": { + "entityId": "98765" + }, + "entityType": "program", + "programType": "series", + "title": "Perfect Strangers", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1986-01-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-TV", + "rating": "TV-PG" + } + ] + }, + "related": [ + { + "identifiers": { + "entityId": "111", + "seriesId": "98765" + }, + "entityType": "program", + "programType": "season", + "seasonNumber": 1, + "title": "Perfect Strangers Season 3", + "contentRatings": [ + { + "scheme": "US-TV", + "rating": "TV-PG" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "556", + "entityId": "111", + "seriesId": "98765" + }, + "entitled": true, + "offeringType": "free", + "videoQuality": [ + "SD" + ], + "audioProfile": [ + "stereo" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ] + } + ] + }, + { + "identifiers": { + "entityId": "111", + "seriesId": "98765" + }, + "entityType": "program", + "programType": "episode", + "seasonNumber": 1, + "episodeNumber": 1, + "title": "Knock Knock, Who's There?", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1986-03-25T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-TV", + "rating": "TV-PG" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "556", + "entityId": "111", + "seriesId": "98765" + }, + "entitled": true, + "offeringType": "free", + "videoQuality": [ + "SD" + ], + "audioProfile": [ + "stereo" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ] + } + ] + }, + { + "identifiers": { + "entityId": "112", + "seriesId": "98765" + }, + "entityType": "program", + "programType": "episode", + "seasonNumber": 1, + "episodeNumber": 2, + "title": "Picture This", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1986-04-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-TV", + "rating": "TV-PG" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "557", + "entityId": "112", + "seriesId": "98765" + }, + "entitled": true, + "offeringType": "free", + "videoQuality": [ + "SD" + ], + "audioProfile": [ + "stereo" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ] + } + ] + } + ] + } + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "purchasedContent", + "tags": [ + { + "name": "polymorphic-pull" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:discovery:purchased-content" + }, + { + "name": "deprecated" + } + ], + "summary": "Provide a list of purchased content for the authenticated account, such as rentals and electronic sell through purchases.", + "params": [ + { + "name": "correlationId", + "required": true, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "result", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/PurchasedContentResult" + }, + "summary": "The data for the purachasedContent" + } + ], + "result": { + "name": "success", + "summary": "True if the push operation is successful", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Inform the platform of the user's purchased content", + "params": [ + { + "name": "correlationId", + "value": null + }, + { + "name": "result", + "value": { + "totalCount": 10, + "expires": "2025-01-01T00:00:00.000Z", + "entries": [ + { + "identifiers": { + "entityId": "345" + }, + "entityType": "program", + "programType": "movie", + "title": "Cool Runnings", + "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", + "releaseDate": "1993-01-01T00:00:00.000Z", + "contentRatings": [ + { + "scheme": "US-Movie", + "rating": "PG" + }, + { + "scheme": "CA-Movie", + "rating": "G" + } + ], + "waysToWatch": [ + { + "identifiers": { + "assetId": "123" + }, + "expires": "2025-01-01T00:00:00.000Z", + "entitled": true, + "entitledExpires": "2025-01-01T00:00:00.000Z", + "offeringType": "buy", + "price": 2.99, + "videoQuality": [ + "UHD" + ], + "audioProfile": [ + "dolbyAtmos" + ], + "audioLanguages": [ + "en" + ], + "closedCaptions": [ + "en" + ], + "subtitles": [ + "es" + ], + "audioDescriptions": [ + "en" + ] + } + ] + } + ] + } + } + ], + "result": { + "name": "success", + "value": true + } + } + ], + "description": "Return content purchased by the user, such as rentals and electronic sell through purchases.\n\nThe app should return the user's 100 most recent purchases in `entries`. The total count of purchases must be provided in `count`. If `count` is greater than the total number of `entries`, the UI may provide a link into the app to see the complete purchase list.\n\nThe `EntityInfo` object returned is not required to have `waysToWatch` populated, but it is recommended that it do so in case the UI wants to surface additional information on the purchases screen.\n\nThe app should implement both Push and Pull methods for `purchasedContent`.\n\nThe app should actively push `purchasedContent` when:\n\n* The app becomes Active.\n* When the state of the purchasedContent set has changed.\n* The app goes into Inactive or Background state, if there is a chance a change event has been missed." + }, + { + "name": "watched", + "summary": "Notify the platform that content was partially or completely watched", + "tags": [ + { + "name": "polymorphic-reducer" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:watched" + ] + } + ], + "params": [ + { + "name": "entityId", + "required": true, + "schema": { + "type": "string" + }, + "summary": "The entity Id of the watched content." + }, + { + "name": "progress", + "summary": "How much of the content has been watched (percentage as 0-1 for VOD, number of seconds for live)", + "schema": { + "type": "number", + "minimum": 0 + } + }, + { + "name": "completed", + "summary": "Whether or not this viewing is considered \"complete,\" per the app's definition thereof", + "schema": { + "type": "boolean" + } + }, + { + "name": "watchedOn", + "summary": "Date/Time the content was watched, ISO 8601 Date/Time", + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "result": { + "name": "success", + "summary": "whether the call was successful or not", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Notifying the platform of watched content", + "params": [ + { + "name": "entityId", + "value": "partner.com/entity/123" + }, + { + "name": "progress", + "value": 0.95 + }, + { + "name": "completed", + "value": true + }, + { + "name": "watchedOn", + "value": "2021-04-23T18:25:43.511Z" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "watchNext", + "summary": "Suggest a call-to-action for this app on the platform home screen", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:watch-next" + ] + } + ], + "params": [ + { + "name": "title", + "summary": "The title of this call to action", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/LocalizedString" + }, + "required": true + }, + { + "name": "identifiers", + "summary": "A set of content identifiers for this call to action", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/ContentIdentifiers" + }, + "required": true + }, + { + "name": "expires", + "summary": "When this call to action should no longer be presented to users", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "images", + "summary": "A set of images for this call to action", + "schema": { + "type": "object", + "patternProperties": { + "^.*$": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/LocalizedString" + } + } + } + } + ], + "result": { + "name": "success", + "summary": "whether the call was successful or not", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Suggest a watch-next tile for the home screen", + "params": [ + { + "name": "title", + "value": "A Cool Show" + }, + { + "name": "identifiers", + "value": { + "entityId": "partner.com/entity/123" + } + }, + { + "name": "expires", + "value": "2021-04-23T18:25:43.511Z" + }, + { + "name": "images", + "value": { + "3x4": { + "en-US": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg", + "es": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg" + }, + "16x9": { + "en": "https://i.ytimg.com/vi/4r7wHMg5Yjg/maxresdefault.jpg" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Suggest a watch-next tile for the home screen", + "params": [ + { + "name": "title", + "value": "A Fantastic Show" + }, + { + "name": "identifiers", + "value": { + "entityId": "partner.com/entity/456" + } + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "entitlements", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:content-access" + ] + }, + { + "name": "deprecated", + "x-since": "0.10.0", + "x-alternative": "Discovery.contentAccess()" + } + ], + "summary": "Inform the platform of the users latest entitlements w/in this app.", + "params": [ + { + "name": "entitlements", + "summary": "Array of entitlement objects", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/Entitlement" + } + }, + "required": true + } + ], + "result": { + "name": "success", + "summary": "whether the call was successful or not", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Update user's entitlements", + "params": [ + { + "name": "entitlements", + "value": [ + { + "entitlementId": "partner.com/entitlement/123", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + }, + { + "entitlementId": "partner.com/entitlement/456", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + } + ] + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "contentAccess", + "summary": "Inform the platform of what content the user can access either by discovering it or consuming it. Availabilities determine which content is discoverable to a user, while entitlements determine if the user can currently consume that content. Content can be available but not entitled, this means that user can see the content but when they try to open it they must gain an entitlement either through purchase or subscription upgrade. In case the access changed off-device, this API should be called any time the app comes to the foreground to refresh the access. This API should also be called any time the availabilities or entitlements change within the app for any reason. Typical reasons may include the user signing into an account or upgrading a subscription. Less common cases can cause availabilities to change, such as moving to a new service location. When availabilities or entitlements are removed from the subscriber (such as when the user signs out), then an empty array should be given. To clear both, use the Discovery.clearContentAccess convenience API.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:content-access" + ] + } + ], + "params": [ + { + "name": "ids", + "summary": "A list of identifiers that represent content that is discoverable or consumable for the subscriber", + "schema": { + "$ref": "#/components/schemas/ContentAccessIdentifiers" + }, + "required": true + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Update subscriber's availabilities", + "params": [ + { + "name": "ids", + "value": { + "availabilities": [ + { + "type": "channel-lineup", + "id": "partner.com/availability/123", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + }, + { + "type": "channel-lineup", + "id": "partner.com/availability/456", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + } + ] + } + } + ], + "result": { + "name": "result", + "value": null + } + }, + { + "name": "Update subscriber's availabilities and entitlements", + "params": [ + { + "name": "ids", + "value": { + "availabilities": [ + { + "type": "channel-lineup", + "id": "partner.com/availability/123", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + }, + { + "type": "channel-lineup", + "id": "partner.com/availability/456", + "startTime": "2021-04-23T18:25:43.511Z", + "endTime": "2021-04-23T18:25:43.511Z" + } + ], + "entitlements": [ + { + "entitlementId": "123", + "startTime": "2025-01-01T00:00:00.000Z", + "endTime": "2025-01-01T00:00:00.000Z" + } + ] + } + } + ], + "result": { + "name": "result", + "value": null + } + }, + { + "name": "Update subscriber's entitlements", + "params": [ + { + "name": "ids", + "value": { + "entitlements": [ + { + "entitlementId": "123", + "startTime": "2025-01-01T00:00:00.000Z", + "endTime": "2025-01-01T00:00:00.000Z" + } + ] + } + } + ], + "result": { + "name": "result", + "value": null + } + }, + { + "name": "Clear a subscriber's entitlements", + "params": [ + { + "name": "ids", + "value": { + "entitlements": [] + } + } + ], + "result": { + "name": "result", + "value": null + } + }, + { + "name": "Clear a subscriber's availabilities", + "params": [ + { + "name": "ids", + "value": { + "availabilities": [] + } + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "clearContentAccess", + "summary": "Clear both availabilities and entitlements from the subscriber. This is equivalent of calling `Discovery.contentAccess({ availabilities: [], entitlements: []})`. This is typically called when the user signs out of an account.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:content-access" + ] + } + ], + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Clear subscriber's availabilities and entitlements", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "launch", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:lifecycle:launch" + ] + } + ], "summary": "Launch or foreground the specified app, and optionally instructs it to navigate to the specified user action. \n For the Primary Experience, the appId can be any one of: \n\n - xrn:firebolt:application-type:main \n\n - xrn:firebolt:application-type:settings", - "params": [ - { - "name": "appId", - "required": true, - "summary": "The durable app Id of the app to launch", - "schema": { - "type": "string" - } - }, - { - "name": "intent", - "required": false, - "summary": "An optional `NavigationIntent` with details about what part of the app to show first, and context around how/why it was launched", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/intents#/definitions/NavigationIntent" - } - } - ], - "result": { - "name": "success", - "summary": "whether the call was successful or not", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Launch the 'Foo' app to it's home screen.", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "intent", - "value": { - "action": "home", - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the 'Foo' app to it's own page for a specific entity.", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "intent", - "value": { - "action": "entity", - "data": { - "entityType": "program", - "programType": "movie", - "entityId": "example-movie-id" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the 'Foo' app to a fullscreen playback experience for a specific entity.", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "intent", - "value": { - "action": "playback", - "data": { - "entityType": "program", - "programType": "movie", - "entityId": "example-movie-id" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to a global page for a specific entity.", - "params": [ - { - "name": "appId", + "params": [ + { + "name": "appId", + "required": true, + "summary": "The durable app Id of the app to launch", + "schema": { + "type": "string" + } + }, + { + "name": "intent", + "required": false, + "summary": "An optional `NavigationIntent` with details about what part of the app to show first, and context around how/why it was launched", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/intents#/definitions/NavigationIntent" + } + } + ], + "result": { + "name": "success", + "summary": "whether the call was successful or not", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Launch the 'Foo' app to it's home screen.", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "intent", + "value": { + "action": "home", + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the 'Foo' app to it's own page for a specific entity.", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "intent", + "value": { + "action": "entity", + "data": { + "entityType": "program", + "programType": "movie", + "entityId": "example-movie-id" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the 'Foo' app to a fullscreen playback experience for a specific entity.", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "intent", + "value": { + "action": "playback", + "data": { + "entityType": "program", + "programType": "movie", + "entityId": "example-movie-id" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to a global page for a specific entity.", + "params": [ + { + "name": "appId", "value": "xrn:firebolt:application-type:main" - }, - { - "name": "intent", - "value": { - "action": "entity", - "data": { - "entityType": "program", - "programType": "movie", - "entityId": "example-movie-id" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to a global page for the company / partner with the ID 'foo'.", - "params": [ - { - "name": "appId", + }, + { + "name": "intent", + "value": { + "action": "entity", + "data": { + "entityType": "program", + "programType": "movie", + "entityId": "example-movie-id" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to a global page for the company / partner with the ID 'foo'.", + "params": [ + { + "name": "appId", "value": "xrn:firebolt:application-type:main" - }, - { - "name": "intent", - "value": { - "action": "section", - "data": { - "sectionName": "company:foo" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to it's home screen, as if the Home remote button was pressed.", - "params": [ - { - "name": "appId", + }, + { + "name": "intent", + "value": { + "action": "section", + "data": { + "sectionName": "company:foo" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to it's home screen, as if the Home remote button was pressed.", + "params": [ + { + "name": "appId", "value": "xrn:firebolt:application-type:main" - }, - { - "name": "intent", - "value": { - "action": "home", - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to it's search screen.", - "params": [ - { - "name": "appId", + }, + { + "name": "intent", + "value": { + "action": "home", + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to it's search screen.", + "params": [ + { + "name": "appId", "value": "xrn:firebolt:application-type:main" - }, - { - "name": "intent", - "value": { - "action": "search", - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to it's settings screen.", - "params": [ - { - "name": "appId", - "value": "xrn:firebolt:application-type:settings " - }, - { - "name": "intent", - "value": { - "action": "section", - "data": { - "sectionName": "settings" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to it's linear/epg guide.", - "params": [ - { - "name": "appId", + }, + { + "name": "intent", + "value": { + "action": "search", + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to it's settings screen.", + "params": [ + { + "name": "appId", "value": "xrn:firebolt:application-type:main" - }, - { - "name": "intent", - "value": { - "action": "section", - "data": { - "sectionName": "guide" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Launch the Aggregated Experience to the App Store details page for a specific app with the ID 'foo'.", - "params": [ - { - "name": "appId", - "value": "xrn:firebolt:application-type:main " - }, - { - "name": "intent", - "value": { - "action": "section", - "data": { - "sectionName": "app:foo" - }, - "context": { - "source": "voice" - } - } - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "onNavigateTo", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:navigate-to" - ] - } - ], - "summary": "listen to `navigateTo` events", - "params": [], - "result": { - "name": "value", - "summary": "An object describing where in the app the user intends to navigate to", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/intents#/definitions/NavigationIntent" - } - }, - "examples": [ - { - "name": "Listening for `navigateTo` events", - "params": [], - "result": { - "name": "event", - "value": { - "action": "search", - "data": { - "query": "a cool show" - }, - "context": { - "campaign": "unknown", - "source": "voice" - } - } - } - } - ] - }, + }, + { + "name": "intent", + "value": { + "action": "section", + "data": { + "sectionName": "settings" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to it's linear/epg guide.", + "params": [ + { + "name": "appId", + "value": "xrn:firebolt:application-type:main" + }, + { + "name": "intent", + "value": { + "action": "section", + "data": { + "sectionName": "guide" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Launch the Aggregated Experience to the App Store details page for a specfic app with the ID 'foo'.", + "params": [ + { + "name": "appId", + "value": "xrn:firebolt:application-type:main" + }, + { + "name": "intent", + "value": { + "action": "section", + "data": { + "sectionName": "app:foo" + }, + "context": { + "source": "voice" + } + } + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "navigateTo", + "tags": [ + { + "name": "notifier", + "x-event": "Discovery.onNavigateTo" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:navigate-to" + ] + } + ], + "summary": "listen to `navigateTo` events", + "params": [ + { + "name": "value", + "summary": "An object describing where in the app the user intends to navigate to", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/intents#/definitions/NavigationIntent" + } + } + ], + "examples": [ + { + "name": "Listening for `navigateTo` events", + "params": [ + { + "name": "event", + "value": { + "action": "search", + "data": { + "query": "a cool show" + }, + "context": { + "campaign": "unknown", + "source": "voice" + } + } + } + ] + } + ] + }, + { + "name": "signIn", + "tags": [ + { + "name": "calls-metrics" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:sign-in-status" + ] + } + ], + "summary": "Inform the platform that your user is signed in, for increased visibility in search & discovery. Sign-in state is used separately from what content can be access through entitlements and availabilities. Sign-in state may be used when deciding whether to choose this app to handle a user intent. For instance, if the user tries to launch something generic like playing music from an artist, only a signed-in app will be chosen. If the user wants to tune to a channel, only a signed-in app will be chosen to handle that intent. While signIn can optionally include entitlements as those typically change at signIn time, it is recommended to make a separate call to Discovery.contentAccess for entitlements. signIn is not only for when a user explicitly enters login credentials. If an app does not require any credentials from the user to consume content, such as in a free app, then the app should call signIn immediately on launch.", + "params": [ + { + "name": "entitlements", + "summary": "Optional array of Entitlements, in case of a different user account, or a long time since last sign-in.", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/Entitlement" + } + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send signIn metric", + "params": [], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send signIn notification with entitlements", + "params": [ + { + "name": "entitlements", + "value": [ + { + "entitlementId": "123", + "startTime": "2025-01-01T00:00:00.000Z", + "endTime": "2025-01-01T00:00:00.000Z" + } + ] + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "signOut", + "tags": [ + { + "name": "calls-metrics" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:discovery:sign-in-status" + ] + } + ], + "summary": "Inform the platform that your user has signed out. See `Discovery.signIn` for more details on how the sign-in state is used.signOut will NOT clear entitlements, the app should make a separate call to Discovery.clearContentAccess. Apps should also call signOut when a login token has expired and the user is now in a signed-out state.", + "params": [], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send signOut notification", + "params": [], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "signIn", + "tags": [ + { + "name": "notifier", + "x-event": "Discovery.onSignIn" + }, + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:discovery:sign-in-status" + ] + } + ], + "summary": "Listen to events from all apps that call Discovery.signIn", + "params": [ + { + "name": "event", + "schema": { + "type": "object", + "properties": { + "appId": { + "type": "string" + } + }, + "required": [ + "appId" + ] + } + } + ], + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "Default Event", + "value": { + "appId": "firecert" + } + } + ] + } + ] + }, + { + "name": "signOut", + "tags": [ + { + "name": "notifier", + "x-event": "Discovery.onSignOut" + }, + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:discovery:sign-in-status" + ] + } + ], + "summary": "Listen to events from all apps that call Discovery.signOut", + "params": [ + { + "name": "event", + "schema": { + "type": "object", + "properties": { + "appId": { + "type": "string" + } + }, + "required": [ + "appId" + ] + } + } + ], + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "Default Event", + "value": { + "appId": "firecert" + } + } + ] + } + ] + }, + { + "name": "provideInterest", + "tags": [ + { + "name": "registration", + "x-interface": "Interest" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:discovery:interest" + } + ], + "summary": "Register an app's Interest interface.", + "params": [ + { + "name": "enabled", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "enabled", + "value": true + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, { - "name": "signIn", + "name": "Interest.userInterest", + "summary": "Send an entity that the user has expressed interest in to the platform.", "tags": [ - { - "name": "calls-metrics" - }, { "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:sign-in-status" - ] + "x-provides": "xrn:firebolt:capability:discovery:interest" } ], - "summary": "Inform the platform that your user is signed in, for increased visibility in search & discovery. Sign-in state is used separately from what content can be access through entitlements and availabilities. Sign-in state may be used when deciding whether to choose this app to handle a user intent. For instance, if the user tries to launch something generic like playing music from an artist, only a signed-in app will be chosen. If the user wants to tune to a channel, only a signed-in app will be chosen to handle that intent. While signIn can optionally include entitlements as those typically change at signIn time, it is recommended to make a separate call to Discovery.contentAccess for entitlements. signIn is not only for when a user explicitly enters login credentials. If an app does not require any credentials from the user to consume content, such as in a free app, then the app should call signIn immediately on launch.", "params": [ { - "name": "entitlements", - "summary": "Optional array of Entitlements, in case of a different user account, or a long time since last sign-in.", + "name": "type", + "required": true, "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/Entitlement" - } - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send signIn metric", - "params": [], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send signIn notification with entitlements", - "params": [ - { - "name": "entitlements", - "value": [ - { - "entitlementId": "123", - "startTime": "2025-01-01T00:00:00.000Z", - "endTime": "2025-01-01T00:00:00.000Z" - } - ] - } - ], - "result": { - "name": "success", - "value": true + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestType" } - } - ] - }, - { - "name": "signOut", - "tags": [ - { - "name": "calls-metrics" }, { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:discovery:sign-in-status" - ] - } - ], - "summary": "Inform the platform that your user has signed out. See `Discovery.signIn` for more details on how the sign-in state is used.signOut will NOT clear entitlements, the app should make a separate call to Discovery.clearContentAccess. Apps should also call signOut when a login token has expired and the user is now in a signed-out state.", - "params": [], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send signOut notification", - "params": [], - "result": { - "name": "success", - "value": true + "name": "reason", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestReason" } } - ] - }, - { - "name": "onSignIn", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:discovery:sign-in-status" - ] - } ], - "summary": "Listen to events from all apps that call Discovery.signIn", - "params": [], "result": { - "name": "event", + "name": "entity", "schema": { - "type": "object", - "properties": { - "appId": { - "type": "string" - } - }, - "required": [ - "appId" - ] + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/EntityDetails" } }, "examples": [ { "name": "Default Example", - "params": [], - "result": { - "name": "Default Event", - "value": { - "appId": "firecert" - } - } - } - ] - }, - { - "name": "onSignOut", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:discovery:sign-in-status" - ] - } - ], - "summary": "Listen to events from all apps that call Discovery.signOut", - "params": [], - "result": { - "name": "event", - "schema": { - "type": "object", - "properties": { - "appId": { - "type": "string" + "params": [ + { + "name": "type", + "value": "interest" + }, + { + "name": "reason", + "value": "playlist" } - }, - "required": [ - "appId" - ] - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Event", + ], + "result": { + "name": "entity", "value": { - "appId": "firecert" + "identifiers": { + "entityId": "345", + "entityType": "program", + "programType": "movie" + }, + "info": {} } } } @@ -1478,35 +1587,36 @@ }, { "name": "userInterest", - "summary": "Send an entity that the user has expressed interest in to the platform.", "tags": [ { "name": "capabilities", - "x-provides": "xrn:firebolt:capability:discovery:interest" + "x-provides": "xrn:firebolt:capability:discovery:interest", + "x-push": true } ], + "summary": "Provide information about the entity currently displayed or selected on the screen.", + "description": "Provide information about the entity currently displayed or selected on the screen.", "params": [ { "name": "type", "required": true, "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestType" } }, { "name": "reason", "required": true, "schema": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestReason" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestReason" } }, { "name": "entity", - "required": true, "schema": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/EntityDetails" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/EntityDetails" } - } + } ], "result": { "name": "result", @@ -1529,35 +1639,6 @@ { "name": "entity", "value": { - "identifiers": { - "entityId": "345", - "entityType": "program", - "programType": "movie" - }, - "info": {} - } - } - ], - "result": { - "name": "result", - "value": null - } - } - ] - }, - { - "name": "Discovery.onRequestUserInterest", - "tags": [ - { - "name": "rpc-only" - }, - { - "name": "event", - "x-response-name": "entity", - "x-response": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/EntityDetails", - "examples": [ - { "identifiers": { "entityId": "345", "entityType": "program", @@ -1579,371 +1660,333 @@ ] } } - ] - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:discovery:interest" - } - ], - "summary": "Provide information about the entity currently displayed or selected on the screen.", - "description": "Provide information about the entity currently displayed or selected on the screen.", - "params": [], - "result": { - "name": "request", - "schema": { - "type": "object", - "required": [ - "correlationId", - "parameters" + } ], - "properties": { - "correlationId": { - "type": "string" - }, - "parameters": { - "$ref": "#/components/schemas/UserInterestProviderParameters" - } - }, - "additionalProperties": false - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], "result": { - "name": "request", - "value": { - "correlationId": "xyz", - "parameters": { - "type": "interest", - "reason": "playlist" - } - } + "name": "result", + "value": null } } ] - } - ], - "components": { - "schemas": { - "DiscoveryPolicy": { - "title": "DiscoveryPolicy", - "type": "object", - "required": [ - "enableRecommendations", - "shareWatchHistory", - "rememberWatchedPrograms" - ], - "properties": { - "enableRecommendations": { - "type": "boolean", - "description": "Whether or not to the user has enabled history-based recommendations" - }, - "shareWatchHistory": { - "type": "boolean", - "description": "Whether or not the user has enabled app watch history data to be shared with the platform" - }, - "rememberWatchedPrograms": { - "type": "boolean", - "description": "Whether or not the user has enabled watch history" - } - } - }, - "FederatedRequest": { - "title": "FederatedRequest", - "type": "object", - "properties": { - "correlationId": { - "type": "string" - } - }, - "required": [ - "correlationId" - ], - "propertyNames": { - "enum": [ - "correlationId", - "parameters" - ] - }, - "examples": [ - { - "correlationId": "xyz" - } - ] - }, - "FederatedResponse": { - "title": "FederatedResponse", - "type": "object", - "properties": { - "correlationId": { - "type": "string" - } - }, - "required": [ - "correlationId", - "result" - ], - "propertyNames": { - "enum": [ - "correlationId", - "result" - ] - }, - "examples": [ - { - "correlationId": "xyz" - } - ] - }, - "EntityInfoFederatedRequest": { - "title": "EntityInfoFederatedRequest", - "allOf": [ - { - "$ref": "#/components/schemas/FederatedRequest" - }, - { - "type": "object", - "properties": { - "parameters": { - "$ref": "#/components/schemas/EntityInfoParameters" - } - }, - "required": [ - "correlationId", - "parameters" - ] - } - ], - "examples": [ - { - "correlationId": "xyz", - "parameters": { - "entityId": "345" - } - } - ] - }, - "EntityInfoParameters": { - "title": "EntityInfoParameters", - "type": "object", - "properties": { - "entityId": { - "type": "string" - }, - "assetId": { - "type": "string" - } - }, - "required": [ - "entityId" - ], - "additionalProperties": false, - "examples": [ - { - "entityId": "345" - } - ] - }, - "EntityInfoFederatedResponse": { - "title": "EntityInfoFederatedResponse", - "allOf": [ - { - "$ref": "#/components/schemas/FederatedResponse" - }, - { - "type": "object", - "properties": { - "result": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/EntityInfoResult" - } - } - } - ] - }, - "EntityInfoResult": { - "title": "EntityInfoResult", - "description": "The result for an `entityInfo()` push or pull.", - "type": "object", - "properties": { - "expires": { - "type": "string", - "format": "date-time" - }, - "entity": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" - }, - "related": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" - } - } - }, - "required": [ - "expires", - "entity" - ], - "additionalProperties": false - }, - "PurchasedContentFederatedRequest": { - "title": "PurchasedContentFederatedRequest", - "allOf": [ - { - "$ref": "#/components/schemas/FederatedRequest" - }, - { - "type": "object", - "properties": { - "parameters": { - "$ref": "#/components/schemas/PurchasedContentParameters" - } - }, - "required": [ - "correlationId", - "parameters" - ] - } - ], - "examples": [ - { - "correlationId": "xyz", - "parameters": { - "limit": 100 - } - } - ] - }, - "PurchasedContentParameters": { - "title": "PurchasedContentParameters", - "type": "object", - "properties": { - "limit": { - "type": "integer", - "minimum": -1 - }, - "offeringType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/OfferingType" - }, - "programType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/ProgramType" - } - }, - "required": [ - "limit" - ], - "additionalProperties": false, - "examples": [ - { - "limit": 100 - } - ] - }, - "PurchasedContentFederatedResponse": { - "title": "PurchasedContentFederatedResponse", - "allOf": [ - { - "$ref": "#/components/schemas/FederatedResponse" - }, - { - "type": "object", - "properties": { - "result": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/PurchasedContentResult" - } - } - } - ] - }, - "PurchasedContentResult": { - "title": "PurchasedContentResult", - "type": "object", - "properties": { - "expires": { - "type": "string", - "format": "date-time" - }, - "totalCount": { - "type": "integer", - "minimum": 0 - }, - "entries": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" - } - } - }, - "required": [ - "expires", - "totalCount", - "entries" - ], - "additionalProperties": false - }, - "Availability": { - "title": "Availability", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "channel-lineup", - "program-lineup" - ] - }, - "id": { - "type": "string" - }, - "catalogId": { - "type": "string" - }, - "startTime": { - "type": "string", - "format": "date-time" - }, - "endTime": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "type", - "id" - ] - }, - "ContentAccessIdentifiers": { - "title": "ContentAccessIdentifiers", - "type": "object", - "properties": { - "availabilities": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Availability" - }, - "description": "A list of identifiers that represent what content is discoverable for the subscriber. Excluding availabilities will cause no change to the availabilities that are stored for this subscriber. Providing an empty array will clear the subscriber's availabilities" - }, - "entitlements": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/Entitlement" - }, - "description": "A list of identifiers that represent what content is consumable for the subscriber. Excluding entitlements will cause no change to the entitlements that are stored for this subscriber. Providing an empty array will clear the subscriber's entitlements" - } - }, - "required": [] - }, - "TuneChannels": { - "title": "TuneChannels", - "description": "An enumeration of xrn values for the TuneIntent that have special meaning.", - "type": "string", - "enum": [ - "xrn:firebolt:channel:any" - ] - }, + } + ], + "components": { + "schemas": { + "DiscoveryPolicy": { + "title": "DiscoveryPolicy", + "type": "object", + "required": [ + "enableRecommendations", + "shareWatchHistory", + "rememberWatchedPrograms" + ], + "properties": { + "enableRecommendations": { + "type": "boolean", + "description": "Whether or not to the user has enabled history-based recommendations" + }, + "shareWatchHistory": { + "type": "boolean", + "description": "Whether or not the user has enabled app watch history data to be shared with the platform" + }, + "rememberWatchedPrograms": { + "type": "boolean", + "description": "Whether or not the user has enabled watch history" + } + } + }, + "FederatedRequest": { + "title": "FederatedRequest", + "type": "object", + "properties": { + "correlationId": { + "type": "string" + } + }, + "required": [ + "correlationId" + ], + "propertyNames": { + "enum": [ + "correlationId", + "parameters" + ] + }, + "examples": [ + { + "correlationId": "xyz" + } + ] + }, + "FederatedResponse": { + "title": "FederatedResponse", + "type": "object", + "properties": { + "correlationId": { + "type": "string" + } + }, + "required": [ + "correlationId", + "result" + ], + "propertyNames": { + "enum": [ + "correlationId", + "result" + ] + }, + "examples": [ + { + "correlationId": "xyz" + } + ] + }, + "EntityInfoFederatedRequest": { + "title": "EntityInfoFederatedRequest", + "allOf": [ + { + "$ref": "#/components/schemas/FederatedRequest" + }, + { + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/EntityInfoParameters" + } + }, + "required": [ + "correlationId", + "parameters" + ] + } + ], + "examples": [ + { + "correlationId": "xyz", + "parameters": { + "entityId": "345" + } + } + ] + }, + "EntityInfoParameters": { + "title": "EntityInfoParameters", + "type": "object", + "properties": { + "entityId": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "entityId" + ], + "additionalProperties": false, + "examples": [ + { + "entityId": "345" + } + ] + }, + "EntityInfoFederatedResponse": { + "title": "EntityInfoFederatedResponse", + "allOf": [ + { + "$ref": "#/components/schemas/FederatedResponse" + }, + { + "type": "object", + "properties": { + "result": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/EntityInfoResult" + } + } + } + ] + }, + "EntityInfoResult": { + "title": "EntityInfoResult", + "description": "The result for an `entityInfo()` push or pull.", + "type": "object", + "properties": { + "expires": { + "type": "string", + "format": "date-time" + }, + "entity": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" + }, + "related": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" + } + } + }, + "required": [ + "expires", + "entity" + ], + "additionalProperties": false + }, + "PurchasedContentFederatedRequest": { + "title": "PurchasedContentFederatedRequest", + "allOf": [ + { + "$ref": "#/components/schemas/FederatedRequest" + }, + { + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/PurchasedContentParameters" + } + }, + "required": [ + "correlationId", + "parameters" + ] + } + ], + "examples": [ + { + "correlationId": "xyz", + "parameters": { + "limit": 100 + } + } + ] + }, + "PurchasedContentParameters": { + "title": "PurchasedContentParameters", + "type": "object", + "properties": { + "limit": { + "type": "integer", + "minimum": -1 + }, + "offeringType": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/OfferingType" + }, + "programType": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/ProgramType" + } + }, + "required": [ + "limit" + ], + "additionalProperties": false, + "examples": [ + { + "limit": 100 + } + ] + }, + "PurchasedContentFederatedResponse": { + "title": "PurchasedContentFederatedResponse", + "allOf": [ + { + "$ref": "#/components/schemas/FederatedResponse" + }, + { + "type": "object", + "properties": { + "result": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/PurchasedContentResult" + } + } + } + ] + }, + "PurchasedContentResult": { + "title": "PurchasedContentResult", + "type": "object", + "properties": { + "expires": { + "type": "string", + "format": "date-time" + }, + "totalCount": { + "type": "integer", + "minimum": 0 + }, + "entries": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" + } + } + }, + "required": [ + "expires", + "totalCount", + "entries" + ], + "additionalProperties": false + }, + "Availability": { + "title": "Availability", + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "channel-lineup", + "program-lineup" + ] + }, + "id": { + "type": "string" + }, + "catalogId": { + "type": "string" + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "endTime": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "type", + "id" + ] + }, + "ContentAccessIdentifiers": { + "title": "ContentAccessIdentifiers", + "type": "object", + "properties": { + "availabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Availability" + }, + "description": "A list of identifiers that represent what content is discoverable for the subscriber. Excluding availabilities will cause no change to the availabilities that are stored for this subscriber. Providing an empty array will clear the subscriber's availabilities" + }, + "entitlements": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/Entitlement" + }, + "description": "A list of identifiers that represent what content is consumable for the subscriber. Excluding entitlements will cause no change to the entitlements that are stored for this subscriber. Providing an empty array will clear the subscriber's entitlements" + } + }, + "required": [] + }, + "TuneChannels": { + "title": "TuneChannels", + "description": "An enumeration of xrn values for the TuneIntent that have special meaning.", + "type": "string", + "enum": [ + "xrn:firebolt:channel:any" + ] + }, "UserInterestProviderParameters": { "title": "UserInterestProviderParameters", "type": "object", @@ -1953,13 +1996,13 @@ ], "properties": { "type": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestType" }, "reason": { - "$ref": "https://meta.comcast.com/firebolt/discovery#/definitions/InterestReason" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/discovery#/definitions/InterestReason" } } - } - } - } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/hdmi-input.json b/src/openrpc/hdmi-input.json index 9a724aab2..13b340a82 100644 --- a/src/openrpc/hdmi-input.json +++ b/src/openrpc/hdmi-input.json @@ -173,10 +173,10 @@ ] }, { - "name": "onConnectionChanged", + "name": "connectionChanged", "tags": [ { - "name": "event" + "name": "notifier" }, { "name": "capabilities", @@ -186,32 +186,35 @@ } ], "summary": "Notification for when any HDMI port has a connection physically engaged or disengaged.", - "params": [], - "result": { - "name": "info", - "schema": { - "$ref": "#/components/schemas/ConnectionChangedInfo" + "params": [ + { + "name": "info", + "required": true, + "schema": { + "$ref": "#/components/schemas/ConnectionChangedInfo" + } } - }, + ], "examples": [ { "name": "Default Example", - "params": [], - "result": { - "name": "info", - "value": { - "port": "HDMI1", - "connected": true + "params": [ + { + "name": "info", + "value": { + "port": "HDMI1", + "connected": true + } } - } + ] } ] }, { - "name": "onSignalChanged", + "name": "signalChanged", "tags": [ { - "name": "event" + "name": "notifier" }, { "name": "capabilities", @@ -221,24 +224,27 @@ } ], "summary": "Notification for when any HDMI port has it's signal status changed.", - "params": [], - "result": { - "name": "info", - "schema": { - "$ref": "#/components/schemas/SignalChangedInfo" - } - }, + "params": [ + { + "name": "info", + "required": true, + "schema": { + "$ref": "#/components/schemas/SignalChangedInfo" + } + } + ], "examples": [ { "name": "Default Example", - "params": [], - "result": { - "name": "info", - "value": { - "port": "HDMI1", - "signal": "stable" + "params": [ + { + "name": "info", + "value": { + "port": "HDMI1", + "signal": "stable" + } } - } + ] } ] }, @@ -284,7 +290,7 @@ ] }, { - "name": "onAutoLowLatencyModeSignalChanged", + "name": "autoLowLatencyModeSignalChanged", "summary": "Notification for changes to ALLM status of any input device.", "tags": [ { @@ -294,27 +300,30 @@ ] }, { - "name": "event" + "name": "notifier" } ], - "params": [], - "result": { - "name": "info", - "schema": { - "$ref": "#/components/schemas/AutoLowLatencyModeSignalChangedInfo" - } - }, + "params": [ + { + "name": "info", + "required": true, + "schema": { + "$ref": "#/components/schemas/AutoLowLatencyModeSignalChangedInfo" + } + } + ], "examples": [ { "name": "Default Example", - "params": [], - "result": { - "name": "info", - "value": { - "port": "HDMI1", - "autoLowLatencyModeSignalled": true + "params": [ + { + "name": "info", + "value": { + "port": "HDMI1", + "autoLowLatencyModeSignalled": true + } } - } + ] } ] }, diff --git a/src/openrpc/keyboard.json b/src/openrpc/keyboard.json index 9d8e39412..8f34ea773 100644 --- a/src/openrpc/keyboard.json +++ b/src/openrpc/keyboard.json @@ -1,362 +1,245 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Keyboard", - "description": "Methods for prompting users to enter text with task-oriented UX", - "version": "0.0.0" - }, - "methods": [ - { - "name": "email", - "tags": [ - { - "name": "capabilities", - "x-provided-by": "Keyboard.onRequestEmail", - "x-uses": [ - "xrn:firebolt:capability:input:keyboard" - ] - } - ], - "summary": "Prompt the user for their email address with a simplified list of choices.", - "params": [ - { - "name": "type", - "summary": "Why the email is being requested, e.g. sign on or sign up", - "required": true, - "schema": { - "$ref": "#/components/schemas/EmailUsage" - } - }, - { - "name": "message", - "summary": "The message to display while prompting", - "required": false, - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "email", - "summary": "the selected or entered email", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Prompt the user to select or type an email address", - "params": [ - { - "name": "type", - "value": "signIn" - }, - { - "name": "message", - "value": "Enter your email to sign into this app" - } - ], - "result": { - "name": "Default Result", - "value": "user@domain.com" - } - }, - { - "name": "Prompt the user to type an email address to sign up", - "params": [ - { - "name": "type", - "value": "signUp" - }, - { - "name": "message", - "value": "Enter your email to sign up for this app" - } - ], - "result": { - "name": "Default Result", - "value": "user@domain.com" - } - } - ] - }, - { - "name": "password", - "tags": [ - { - "name": "capabilities", - "x-provided-by": "Keyboard.onRequestPassword", - "x-uses": [ - "xrn:firebolt:capability:input:keyboard" - ] - } - ], - "summary": "Show the password entry keyboard, with typing obfuscated from visibility", - "params": [ - { - "name": "message", - "summary": "The message to display while prompting", - "required": false, - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "value", - "summary": "the selected or entered password", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Prompt the user to enter their password", - "params": [ - { - "name": "message", - "value": "Enter your password" - } - ], - "result": { - "name": "Default Result", - "value": "abc123" - } - } - ] - }, - { - "name": "standard", - "tags": [ - { - "name": "capabilities", - "x-provided-by": "Keyboard.onRequestStandard", - "x-uses": [ - "xrn:firebolt:capability:input:keyboard" - ] - } - ], - "summary": "Show the standard platform keyboard, and return the submitted value", - "params": [ - { - "name": "message", - "summary": "The message to display while prompting", - "required": true, - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "value", - "summary": "the selected or entered text", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Prompt the user for an arbitrary string", - "params": [ - { - "name": "message", - "value": "Enter the name you'd like to associate with this device" - } - ], - "result": { - "name": "Default Result", - "value": "Living Room" - } - } - ] - }, - { - "name": "onRequestStandard", - "summary": "Registers as a provider for when the user should be shown a standard keyboard.", - "params": [], - "tags": [ - { - "name": "event", - "x-response": { - "type": "string", - "examples": [ - "username" - ] - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:input:keyboard", - "x-allow-focus": true - } - ], - "result": { - "name": "sessionRequest", - "summary": "The request to start a keyboard session", - "schema": { - "$ref": "#/components/schemas/KeyboardProviderRequest" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "correlationId": "abc", - "parameters": { - "message": "Enter your user name." - } - } - } - } - ] - }, - { - "name": "onRequestPassword", - "summary": "Registers as a provider for when the user should be shown a password keyboard, with dots for each character entered.", - "params": [], - "tags": [ - { - "name": "event", - "x-response": { - "type": "string", - "examples": [ - "password" - ] - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:input:keyboard", - "x-allow-focus": true - } - ], - "result": { - "name": "sessionRequest", - "summary": "The request to start a keyboard session", - "schema": { - "$ref": "#/components/schemas/KeyboardProviderRequest" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "correlationId": "abc", - "parameters": { - "message": "Enter your user name." - } - } - } - } - ] - }, - { - "name": "onRequestEmail", - "summary": "Registers as a provider for when the user should be shown a keyboard optimized for email address entry.", - "params": [], - "tags": [ - { - "name": "event", - "x-response": { - "type": "string", - "examples": [ - "email@address.com" - ] - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:input:keyboard", - "x-allow-focus": true - } - ], - "result": { - "name": "sessionRequest", - "summary": "The request to start a keyboard session", - "schema": { - "$ref": "#/components/schemas/KeyboardProviderRequest" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "correlationId": "abc", - "parameters": { - "message": "Enter your user name." - } - } - } - } - ] - } - ], - "components": { - "schemas": { - "EmailUsage": { - "title": "EmailUsage", - "type": "string", - "enum": [ - "signIn", - "signUp" - ] - }, - "KeyboardType": { - "title": "KeyboardType", - "type": "string", - "description": "The type of keyboard to show to the user", - "enum": [ - "standard", - "email", - "password" - ] - }, - "KeyboardParameters": { - "title": "KeyboardParameters", - "type": "object", - "required": [ - "message" - ], - "properties": { - "message": { - "description": "The message to display to the user so the user knows what they are entering", - "type": "string" - } - }, - "examples": [ - { - "type": "standard", - "message": "Enter your user name." - } - ] - }, - "KeyboardProviderRequest": { - "title": "KeyboardProviderRequest", - "type": "object", - "required": [ - "correlationId", - "parameters" - ], - "properties": { - "correlationId": { - "type": "string", - "description": "An id to correlate the provider response with this request" - }, - "parameters": { - "description": "The request to start a keyboard session", - "$ref": "#/components/schemas/KeyboardParameters" - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Keyboard", + "description": "Methods for prompting users to enter text with task-oriented UX", + "version": "0.0.0" + }, + "methods": [ + { + "name": "email", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:input:keyboard" + ], + "x-provided-by": "Keyboard.email" + } + ], + "summary": "Prompt the user for their email address with a simplified list of choices.", + "params": [ + { + "name": "type", + "summary": "Why the email is being requested, e.g. sign on or sign up", + "required": true, + "schema": { + "$ref": "#/components/schemas/EmailUsage" + } + }, + { + "name": "message", + "summary": "The message to display while prompting", + "required": false, + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "email", + "summary": "the selected or entered email", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Prompt the user to select or type an email address", + "params": [ + { + "name": "type", + "value": "signIn" + }, + { + "name": "message", + "value": "Enter your email to sign into this app" + } + ], + "result": { + "name": "Default Result", + "value": "user@domain.com" + } + }, + { + "name": "Prompt the user to type an email address to sign up", + "params": [ + { + "name": "type", + "value": "signUp" + }, + { + "name": "message", + "value": "Enter your email to sign up for this app" + } + ], + "result": { + "name": "Default Result", + "value": "user@domain.com" + } + } + ] + }, + { + "name": "password", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:input:keyboard" + ], + "x-provided-by": "Keyboard.password" + } + ], + "summary": "Show the password entry keyboard, with typing obfuscated from visibility", + "params": [ + { + "name": "message", + "summary": "The message to display while prompting", + "required": false, + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "value", + "summary": "the selected or entered password", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Prompt the user to enter their password", + "params": [ + { + "name": "message", + "value": "Enter your password" + } + ], + "result": { + "name": "Default Result", + "value": "abc123" + } + } + ] + }, + { + "name": "standard", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:input:keyboard" + ], + "x-provided-by": "Keyboard.standard" + } + ], + "summary": "Show the standard platform keyboard, and return the submitted value", + "params": [ + { + "name": "message", + "summary": "The message to display while prompting", + "required": true, + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "value", + "summary": "the selected or entered text", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Prompt the user for an arbitrary string", + "params": [ + { + "name": "message", + "value": "Enter the name you'd like to associate with this device" + } + ], + "result": { + "name": "Default Result", + "value": "Living Room" + } + } + ] + } + ], + "components": { + "schemas": { + "EmailUsage": { + "title": "EmailUsage", + "type": "string", + "enum": [ + "signIn", + "signUp" + ] + }, + "KeyboardType": { + "title": "KeyboardType", + "type": "string", + "description": "The type of keyboard to show to the user", + "enum": [ + "standard", + "email", + "password" + ] + }, + "KeyboardParameters": { + "title": "KeyboardParameters", + "type": "object", + "required": [ + "message" + ], + "properties": {}, + "examples": [ + { + "type": "standard", + "message": "Enter your user name." + } + ] + }, + "KeyboardProviderRequest": { + "title": "KeyboardProviderRequest", + "type": "object", + "required": [ + "correlationId", + "parameters" + ], + "properties": { + "correlationId": { + "type": "string", + "description": "An id to correlate the provider response with this request" + }, + "parameters": { + "description": "The request to start a keyboard session", + "$ref": "#/components/schemas/KeyboardParameters" + } + } + }, + "KeyboardResult": { + "title": "KeyboardResult", + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string", + "description": "The text the user entered into the keyboard" + }, + "canceled": { + "type": "boolean", + "description": "Whether the user canceled entering text before they were finished typing on the keyboard" + } + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/lifecycle.json b/src/openrpc/lifecycle.json index 4bddae9d1..f992c7136 100644 --- a/src/openrpc/lifecycle.json +++ b/src/openrpc/lifecycle.json @@ -1,387 +1,261 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Lifecycle", - "description": "Methods and events for responding to lifecycle changes in your app", - "version": "0.0.0" - }, - "methods": [ - { - "name": "ready", - "tags": [ - { - "name": "calls-metrics" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:ready" - ] - }, - { - "name": "exclude-from-sdk" - } - ], - "summary": "Notify the platform that the app is ready", - "params": [], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Let the platform know that your app is ready", - "params": [], - "result": { - "name": "Default Result", - "value": null - } - } - ] - }, - { - "name": "close", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Request that the platform move your app out of focus", - "params": [ - { - "name": "reason", - "summary": "The reason the app is requesting to be closed", - "required": true, - "schema": { - "$ref": "https://meta.comcast.com/firebolt/lifecycle#/definitions/CloseReason" - } - } - ], - "result": { - "name": "success", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Close the app when the user presses back on the app home screen", - "params": [ - { - "name": "reason", - "value": "remoteButton" - } - ], - "result": { - "name": "Default Result", - "value": null - } - }, - { - "name": "Close the app when the user selects an exit menu item", - "params": [ - { - "name": "reason", - "value": "userExit" - } - ], - "result": { - "name": "Default Result", - "value": null - } - } - ] - }, - { - "name": "finished", - "tags": [ - { - "name": "exclude-from-sdk" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Notify the platform that the app is done unloading", - "params": [], - "result": { - "name": "results", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": null - } - } - ] - }, - { - "name": "state", - "summary": "Get the current state of the app. This function is **synchronous**.", - "tags": [ - { - "name": "synchronous" - }, - { - "name": "exclude-from-sdk" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "params": [], - "result": { - "name": "state", - "summary": "the current state of the app.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/lifecycle#/definitions/LifecycleState" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "foreground" - } - } - ] - }, - { - "name": "onInactive", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Listen to the inactive event", - "params": [], - "result": { - "name": "value", - "schema": { - "$ref": "#/components/schemas/LifecycleEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "inactive", - "previous": "initializing" - } - } - } - ] - }, - { - "name": "onForeground", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Listen to the foreground event", - "params": [], - "result": { - "name": "value", - "schema": { - "$ref": "#/components/schemas/LifecycleEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "foreground", - "previous": "inactive" - } - } - }, - { - "name": "Move to foreground via remote branded buton", - "params": [], - "result": { - "name": "value", - "value": { - "state": "foreground", - "previous": "inactive", - "source": "remote" - } - } - } - ] - }, - { - "name": "onBackground", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Listen to the background event", - "params": [], - "result": { - "name": "value", - "schema": { - "$ref": "#/components/schemas/LifecycleEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "background", - "previous": "foreground" - } - } - } - ] - }, - { - "name": "onSuspended", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Listen to the suspended event", - "params": [], - "result": { - "name": "value", - "schema": { - "$ref": "#/components/schemas/LifecycleEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "suspended", - "previous": "inactive" - } - } - } - ] - }, - { - "name": "onUnloading", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Listen to the unloading event", - "params": [], - "result": { - "name": "value", - "schema": { - "$ref": "#/components/schemas/LifecycleEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "state": "unloading", - "previous": "inactive" - } - } - } - ] - } - ], - "components": { - "schemas": { - "LifecycleEvent": { - "title": "LifecycleEvent", - "description": "A an object describing the previous and current states", - "type": "object", - "required": [ - "state", - "previous" - ], - "properties": { - "state": { - "$ref": "https://meta.comcast.com/firebolt/lifecycle#/definitions/LifecycleState", - "description": "The current lifcycle state" - }, - "previous": { - "$ref": "https://meta.comcast.com/firebolt/lifecycle#/definitions/LifecycleState", - "description": "The previous lifcycle state" - }, - "source": { - "type": "string", - "enum": [ - "voice", - "remote" - ], - "description": "The source of the lifecycle change." - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Lifecycle", + "description": "Methods and events for responding to lifecycle changes in your app", + "version": "0.0.0" + }, + "methods": [ + { + "name": "provideApplication", + "tags": [ + { + "name": "registration", + "x-interface": "Application" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:application" + } + ], + "summary": "Register an app's Application interface.", + "params": [ + { + "name": "enabled", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "enabled", + "value": true + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "provideActivatable", + "tags": [ + { + "name": "registration", + "x-interface": "Activatable" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:activatable" + } + ], + "summary": "Register an app's Activatable interface.", + "params": [ + { + "name": "enabled", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "enabled", + "value": true + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "provideSleepable", + "tags": [ + { + "name": "registration", + "x-interface": "Sleepable" + }, + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:sleepable" + } + ], + "summary": "Register an app's Sleepable interface.", + "params": [ + { + "name": "enabled", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "enabled", + "value": true + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "close", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:lifecycle:state" + ] + } + ], + "summary": "Request that the platform move your app out of focus", + "params": [ + { + "name": "reason", + "summary": "The reason the app is requesting to be closed", + "required": true, + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/lifecycle#/definitions/CloseReason" + } + } + ], + "result": { + "name": "success", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Close the app when the user presses back on the app home screen", + "params": [ + { + "name": "reason", + "value": "remoteButton" + } + ], + "result": { + "name": "Default Result", + "value": null + } + }, + { + "name": "Close the app when the user selects an exit menu item", + "params": [ + { + "name": "reason", + "value": "userExit" + } + ], + "result": { + "name": "Default Result", + "value": null + } + } + ] + }, + { + "name": "finished", + "tags": [ + { + "name": "exclude-from-sdk" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:lifecycle:application" + ] + } + ], + "summary": "Notify the platform that the app is done unloading", + "params": [], + "result": { + "name": "results", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "LifecycleEvent": { + "title": "LifecycleEvent", + "description": "A an object describing the previous and current states", + "type": "object", + "required": [ + "state", + "previous" + ], + "properties": { + "state": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/lifecycle#/definitions/LifecycleState", + "description": "The current lifcycle state" + }, + "previous": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/lifecycle#/definitions/LifecycleState", + "description": "The previous lifcycle state" + }, + "source": { + "type": "string", + "enum": [ + "voice", + "remote" + ], + "description": "The source of the lifecycle change." + } + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/localization.json b/src/openrpc/localization.json index db92eeb5b..0f31566ed 100644 --- a/src/openrpc/localization.json +++ b/src/openrpc/localization.json @@ -1,480 +1,494 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Localization", - "description": "Methods for accessessing location and language preferences", - "version": "0.0.0" - }, - "methods": [ - { - "name": "locality", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:locality" - ] - }, - { - "name": "property" - } - ], - "summary": "Get the locality/city the device is located in", - "params": [], - "result": { - "name": "locality", - "summary": "the device city", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/Locality" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "Philadelphia" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "Rockville" - } - } - ] - }, - { - "name": "postalCode", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:postal-code" - ] - } - ], - "summary": "Get the postal code the device is located in", - "params": [], - "result": { - "name": "postalCode", - "summary": "the device postal code", - "schema": { "type": "string" } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "19103" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "20850" - } - } - ] - }, - { - "name": "countryCode", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:country-code" - ] - } - ], - "summary": "Get the ISO 3166-1 alpha-2 code for the country device is located in", - "params": [], - "result": { - "name": "code", - "summary": "the device country code", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/CountryCode" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "US" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "UK" - } - } - ] - }, - { - "name": "language", - "summary": "Get the ISO 639 1/2 code for the preferred language", - "params": [], - "tags": [ - { - "name": "deprecated", - "x-since": "0.17.0", - "x-alternative": "Localization.locale" - }, - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:language" - ] - } - ], - "result": { - "name": "lang", - "summary": "the device language", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/Language" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "en" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "es" - } - } - ] - }, - { - "name": "preferredAudioLanguages", - "summary": "A prioritized list of ISO 639 1/2 codes for the preferred audio languages on this device.", - "params": [], - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:language" - ] - } - ], - "result": { - "name": "languages", - "summary": "the preferred audio languages", - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/ISO639_2Language" - } - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": ["spa", "eng"] - } - }, - { - "name": "Default Example #2", - "params": [], - "result": { - "name": "Default Result", - "value": ["eng", "spa"] - } - } - ] - }, - { - "name": "locale", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:locale" - ] - } - ], - "summary": "Get the *full* BCP 47 code, including script, region, variant, etc., for the preferred langauage/locale", - "params": [], - "result": { - "name": "locale", - "summary": "the device locale", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/Locale" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "Default Result", - "value": "en-US" - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "Default Result", - "value": "es-US" - } - } - ] - }, - { - "name": "latlon", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:location" - ] - } - ], - "summary": "Get the approximate latitude and longitude coordinates of the device location", - "params": [], - "result": { - "name": "latlong", - "summary": "lat/long tuple", - "schema": { - "$ref": "#/components/schemas/LatLon" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": [39.9549, 75.1699] - } - } - ] - }, - { - "name": "additionalInfo", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:additional-info" - ] - } - ], - "summary": "Get any platform-specific localization information, in an Map", - "params": [], - "result": { - "name": "info", - "summary": "the additional info", - "schema": { - "type": "object", - "additionalProperties": { - "type": "string", - "maxLength": 1024 - }, - "maxProperties": 32 - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "info", - "value": { - } - } - } - ] - }, - { - "name": "addAdditionalInfo", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:localization:additional-info" - ] - } - ], - "summary": "Add any platform-specific localization information in key/value pair", - "params": [ - { - "name": "key", - "summary": "Key to add additionalInfo", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "value", - "summary": "Value to be set for additionalInfo", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Add an additionalInfo for localization", - "params": [ - { - "name": "key", - "value": "defaultKey" - }, - { - "name": "value", - "value": "defaultValue=" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "removeAdditionalInfo", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:localization:additional-info" - ] - } - ], - "summary": "Remove any platform-specific localization information from map", - "params": [ - { - "name": "key", - "summary": "Key to remove additionalInfo", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Remove an additionalInfo for localization", - "params": [ - { - "name": "key", - "value": "defaultKey" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "timeZone", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:localization:time-zone" - ] - } - ], - "summary": "Set the IANA timezone for the device", - "params": [], - "result": { - "name": "result", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/TimeZone" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "America/New_York" - } - }, - { - "name": "Additional Example", - "params": [], - "result": { - "name": "Default Result", - "value": "America/Los_Angeles" - } - } - ] - } - ], - "components": { - "schemas": { - "LatLon": { - "type": "array", - "items": [ - { "type": "number" }, - { "type": "number" } - ], - "additionalItems": false, - "minItems": 2, - "maxItems": 2 - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Localization", + "description": "Methods for accessessing location and language preferences", + "version": "0.0.0" + }, + "methods": [ + { + "name": "locality", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:locality" + ] + }, + { + "name": "property" + } + ], + "summary": "Get the locality/city the device is located in", + "params": [], + "result": { + "name": "locality", + "summary": "the device city", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/Locality" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "Philadelphia" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "Rockville" + } + } + ] + }, + { + "name": "postalCode", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:postal-code" + ] + } + ], + "summary": "Get the postal code the device is located in", + "params": [], + "result": { + "name": "postalCode", + "summary": "the device postal code", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "19103" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "20850" + } + } + ] + }, + { + "name": "countryCode", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:country-code" + ] + } + ], + "summary": "Get the ISO 3166-1 alpha-2 code for the country device is located in", + "params": [], + "result": { + "name": "code", + "summary": "the device country code", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/CountryCode" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "US" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "UK" + } + } + ] + }, + { + "name": "language", + "summary": "Get the ISO 639 1/2 code for the preferred language", + "params": [], + "tags": [ + { + "name": "property" + }, + { + "name": "deprecated", + "x-since": "0.17.0", + "x-alternative": "Localization.locale" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:language" + ] + } + ], + "result": { + "name": "lang", + "summary": "the device language", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/Language" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "en" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "es" + } + } + ] + }, + { + "name": "preferredAudioLanguages", + "summary": "A prioritized list of ISO 639 1/2 codes for the preferred audio languages on this device.", + "params": [], + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:language" + ] + } + ], + "result": { + "name": "languages", + "summary": "the preferred audio languages", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/ISO639_2Language" + } + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": [ + "spa", + "eng" + ] + } + }, + { + "name": "Default Example #2", + "params": [], + "result": { + "name": "Default Result", + "value": [ + "eng", + "spa" + ] + } + } + ] + }, + { + "name": "locale", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:locale" + ] + } + ], + "summary": "Get the *full* BCP 47 code, including script, region, variant, etc., for the preferred langauage/locale", + "params": [], + "result": { + "name": "locale", + "summary": "the device locale", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/Locale" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "Default Result", + "value": "en-US" + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "Default Result", + "value": "es-US" + } + } + ] + }, + { + "name": "latlon", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:location" + ] + } + ], + "summary": "Get the approximate latitude and longitude coordinates of the device location", + "params": [], + "result": { + "name": "latlong", + "summary": "lat/long tuple", + "schema": { + "$ref": "#/components/schemas/LatLon" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": [ + 39.9549, + 75.1699 + ] + } + } + ] + }, + { + "name": "additionalInfo", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:additional-info" + ] + } + ], + "summary": "Get any platform-specific localization information, in an Map", + "params": [], + "result": { + "name": "info", + "summary": "the additional info", + "schema": { + "type": "object", + "additionalProperties": { + "type": "string", + "maxLength": 1024 + }, + "maxProperties": 32 + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "info", + "value": {} + } + } + ] + }, + { + "name": "addAdditionalInfo", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:localization:additional-info" + ] + } + ], + "summary": "Add any platform-specific localization information in key/value pair", + "params": [ + { + "name": "key", + "summary": "Key to add additionalInfo", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "value", + "summary": "Value to be set for additionalInfo", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Add an additionalInfo for localization", + "params": [ + { + "name": "key", + "value": "defaultKey" + }, + { + "name": "value", + "value": "defaultValue=" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "removeAdditionalInfo", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:localization:additional-info" + ] + } + ], + "summary": "Remove any platform-specific localization information from map", + "params": [ + { + "name": "key", + "summary": "Key to remove additionalInfo", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Remove an additionalInfo for localization", + "params": [ + { + "name": "key", + "value": "defaultKey" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "timeZone", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:localization:time-zone" + ] + } + ], + "summary": "Set the IANA timezone for the device", + "params": [], + "result": { + "name": "result", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/TimeZone" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": "America/New_York" + } + }, + { + "name": "Additional Example", + "params": [], + "result": { + "name": "Default Result", + "value": "America/Los_Angeles" + } + } + ] + } + ], + "components": { + "schemas": { + "LatLon": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "additionalItems": false, + "minItems": 2, + "maxItems": 2 + } + } + } } diff --git a/src/openrpc/metrics.json b/src/openrpc/metrics.json index d3a9516c5..0fee85631 100644 --- a/src/openrpc/metrics.json +++ b/src/openrpc/metrics.json @@ -1,1153 +1,1148 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Metrics", - "description": "Methods for sending metrics", - "version": "0.0.0" - }, - "methods": [ - { - "name": "ready", - "tags": [ - { - "name": "rpc-only" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform that your app is minimally usable. This method is called automatically by `Lifecycle.ready()`", - "params": [], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send ready metric", - "params": [ - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "signIn", - "tags": [ - { - "name": "rpc-only" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Log a sign in event, called by Discovery.signIn().", - "params": [], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send signIn metric", - "params": [ - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send signIn metric with entitlements", - "params": [ - { - "name": "entitlements", - "value": [ - { - "entitlementId": "123", - "startTime": "2025-01-01T00:00:00.000Z", - "endTime": "2025-01-01T00:00:00.000Z" - } - ] - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "signOut", - "tags": [ - { - "name": "rpc-only" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Log a sign out event, called by Discovery.signOut().", - "params": [], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send signOut metric", - "params": [ - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "startContent", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform that your user has started content.", - "params": [ - { - "name": "entityId", - "summary": "Optional entity ID of the content.", - "schema": { - "type": "string" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send startContent metric", - "params": [ - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send startContent metric w/ entity", - "params": [ - { - "name": "entityId", - "value": "abc" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "stopContent", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform that your user has stopped content.", - "params": [ - { - "name": "entityId", - "summary": "Optional entity ID of the content.", - "schema": { - "type": "string" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send stopContent metric", - "params": [ - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send stopContent metric w/ entity", - "params": [ - { - "name": "entityId", - "value": "abc" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "page", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform that your user has navigated to a page or view.", - "params": [ - { - "name": "pageId", - "summary": "Page ID of the content.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send page metric", - "params": [ - { - "name": "pageId", - "value": "xyz" - } - ], - "result": { - "name": "success", - "value": true - } - }, - { - "name": "Send startContent metric w/ entity", - "params": [ - { - "name": "pageId", - "value": "home" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "action", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform of something not covered by other Metrics APIs.", - "params": [ - { - "name": "category", - "summary": "The category of action being logged. Must be 'user' for user-initated actions or 'app' for all other actions", - "schema": { - "type": "string", - "enum": [ - "user", - "app" - ] - }, - "required": true - }, - { - "name": "type", - "summary": "A short, indexible identifier for the action, e.g. 'SignIn Prompt Displayed'", - "schema": { - "type": "string", - "maxLength": 256 - }, - "required": true - }, - { - "name": "parameters", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/FlatMap" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send foo action", - "params": [ - { - "name": "category", - "value": "user" - }, - { - "name": "type", - "value": "The user did foo" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "error", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:general" - ] - } - ], - "summary": "Inform the platform of an error that has occured in your app.", - "params": [ - { - "name": "type", - "summary": "The type of error", - "schema": { - "$ref": "#/components/schemas/ErrorType" - }, - "required": true - }, - { - "name": "code", - "summary": "an app-specific error code", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "description", - "summary": "A short description of the error", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "visible", - "summary": "Whether or not this error was visible to the user.", - "schema": { - "type": "boolean" - }, - "required": true - }, - { - "name": "parameters", - "summary": "Optional additional parameters to be logged with the error", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/FlatMap" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send error metric", - "params": [ - { - "name": "type", - "value": "media" - }, - { - "name": "code", - "value": "MEDIA-STALLED" - }, - { - "name": "description", - "value": "playback stalled" - }, - { - "name": "visible", - "value": true - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaLoadStart", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when setting the URL of a media asset to play, in order to infer load time.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send loadstart metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaPlay", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when media playback should start due to autoplay, user-initiated play, or unpausing.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send play metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaPlaying", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when media playback actually starts due to autoplay, user-initiated play, unpausing, or recovering from a buffering interuption.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send playing metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaPause", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when media playback will pause due to an intentional pause operation.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send pause metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaWaiting", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when media playback will halt due to a network, buffer, or other unintentional constraint.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send waiting metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaProgress", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called every 60 seconds as media playback progresses.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "progress", - "summary": "Progress of playback, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", - "schema": { - "$ref": "#/components/schemas/MediaPosition" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send progress metric.", - "params": [ - { - "name": "entityId", - "value": "345" - }, - { - "name": "progress", - "value": 0.75 - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaSeeking", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when a seek is initiated during media playback.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "target", - "summary": "Target destination of the seek, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", - "schema": { - "$ref": "#/components/schemas/MediaPosition" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send seeking metric.", - "params": [ - { - "name": "entityId", - "value": "345" - }, - { - "name": "target", - "value": 0.50 - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaSeeked", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when a seek is completed during media playback.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "position", - "summary": "Resulting position of the seek operation, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", - "schema": { - "$ref": "#/components/schemas/MediaPosition" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send seeked metric.", - "params": [ - { - "name": "entityId", - "value": "345" - }, - { - "name": "position", - "value": 0.51 - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaRateChange", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when the playback rate of media is changed.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "rate", - "summary": "The new playback rate.", - "schema": { - "type": "number" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send ratechange metric.", - "params": [ - { - "name": "entityId", - "value": "345" - }, - { - "name": "rate", - "value": 2 - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaRenditionChange", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when the playback rendition (e.g. bitrate, dimensions, profile, etc) is changed.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "bitrate", - "summary": "The new bitrate in kbps.", - "schema": { - "type": "number" - }, - "required": true - }, - { - "name": "width", - "summary": "The new resolution width.", - "schema": { - "type": "number" - }, - "required": true - }, - { - "name": "height", - "summary": "The new resolution height.", - "schema": { - "type": "number" - }, - "required": true - }, - { - "name": "profile", - "summary": "A description of the new profile, e.g. 'HDR' etc.", - "schema": { - "type": "string" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send renditionchange metric.", - "params": [ - { - "name": "entityId", - "value": "345" - }, - { - "name": "bitrate", - "value": 5000 - }, - { - "name": "width", - "value": 1920 - }, - { - "name": "height", - "value": 1080 - }, - { - "name": "profile", - "value": "HDR+" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "mediaEnded", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:media" - ] - } - ], - "summary": "Called when playback has stopped because the end of the media was reached.", - "params": [ - { - "name": "entityId", - "summary": "The entityId of the media.", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Send ended metric.", - "params": [ - { - "name": "entityId", - "value": "345" - } - ], - "result": { - "name": "success", - "value": true - } - } - ] - }, - { - "name": "event", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:metrics:distributor" - ] - } - ], - "summary": "Inform the platform of 1st party distributor metrics.", - "params": [ - { - "name": "schema", - "summary": "The schema URI of the metric type", - "schema": { - "type": "string", - "format": "uri" - }, - "required": true - }, - { - "name": "data", - "summary": "A JSON payload conforming the the provided schema", - "schema": { - "$ref": "#/components/schemas/EventObject" - }, - "required": true - } - ], - "result": { - "name": "results", - "schema": { - "type": "null" - } - }, - "examples": [ - { - "name": "Send foo event", - "params": [ - { - "name": "schema", - "value": "http://meta.rdkcentral.com/some/schema" - }, - { - "name": "data", - "value": { - "foo": "foo" - } - } - ], - "result": { - "name": "result", - "value": null - } - } - ] - } - ], - "components": { - "schemas": { - "MediaPosition": { - "title": "MediaPosition", - "description": "Represents a position inside playback content, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", - "oneOf": [ - { - "const": 0 - }, - { - "type": "number", - "exclusiveMinimum": 0, - "exclusiveMaximum": 1 - }, - { - "type": "integer", - "minimum": 1, - "maximum": 86400 - } - ] - }, - "ErrorType": { - "title": "ErrorType", - "type": "string", - "enum": [ - "network", - "media", - "restriction", - "entitlement", - "other" - ] - }, - "EventObjectPrimitives": { - "title": "EventObjectPrimitives", - "anyOf": [ - { - "type": "string", - "maxLength": 256 - }, - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "EventObject": { - "title": "EventObject", - "type": "object", - "maxProperties": 256, - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/components/schemas/EventObjectPrimitives" - }, - { - "type": "array", - "maxItems": 256, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/EventObjectPrimitives" - }, - { - "$ref": "#/components/schemas/EventObject" - } - ] - } - }, - { - "$ref": "#/components/schemas/EventObject" - } - ] - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Metrics", + "description": "Methods for sending metrics", + "version": "0.0.0" + }, + "methods": [ + { + "name": "ready", + "tags": [ + { + "name": "rpc-only" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform that your app is minimally usable. This method is called automatically by `Lifecycle.ready()`", + "params": [], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send ready metric", + "params": [], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "signIn", + "tags": [ + { + "name": "rpc-only" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Log a sign in event, called by Discovery.signIn().", + "params": [], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send signIn metric", + "params": [], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send signIn metric with entitlements", + "params": [ + { + "name": "entitlements", + "value": [ + { + "entitlementId": "123", + "startTime": "2025-01-01T00:00:00.000Z", + "endTime": "2025-01-01T00:00:00.000Z" + } + ] + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "signOut", + "tags": [ + { + "name": "rpc-only" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Log a sign out event, called by Discovery.signOut().", + "params": [], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send signOut metric", + "params": [], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "startContent", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform that your user has started content.", + "params": [ + { + "name": "entityId", + "summary": "Optional entity ID of the content.", + "schema": { + "type": "string" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send startContent metric", + "params": [], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send startContent metric w/ entity", + "params": [ + { + "name": "entityId", + "value": "abc" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "stopContent", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform that your user has stopped content.", + "params": [ + { + "name": "entityId", + "summary": "Optional entity ID of the content.", + "schema": { + "type": "string" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send stopContent metric", + "params": [], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send stopContent metric w/ entity", + "params": [ + { + "name": "entityId", + "value": "abc" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "page", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform that your user has navigated to a page or view.", + "params": [ + { + "name": "pageId", + "summary": "Page ID of the content.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send page metric", + "params": [ + { + "name": "pageId", + "value": "xyz" + } + ], + "result": { + "name": "success", + "value": true + } + }, + { + "name": "Send startContent metric w/ entity", + "params": [ + { + "name": "pageId", + "value": "home" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "action", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform of something not covered by other Metrics APIs.", + "params": [ + { + "name": "category", + "summary": "The category of action being logged. Must be 'user' for user-initated actions or 'app' for all other actions", + "schema": { + "type": "string", + "enum": [ + "user", + "app" + ] + }, + "required": true + }, + { + "name": "type", + "summary": "A short, indexible identifier for the action, e.g. 'SignIn Prompt Displayed'", + "schema": { + "type": "string", + "maxLength": 256 + }, + "required": true + }, + { + "name": "parameters", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/FlatMap" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send foo action", + "params": [ + { + "name": "category", + "value": "user" + }, + { + "name": "type", + "value": "The user did foo" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "error", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:general" + ] + } + ], + "summary": "Inform the platform of an error that has occured in your app.", + "params": [ + { + "name": "type", + "summary": "The type of error", + "schema": { + "$ref": "#/components/schemas/ErrorType" + }, + "required": true + }, + { + "name": "code", + "summary": "an app-specific error code", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "description", + "summary": "A short description of the error", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "visible", + "summary": "Whether or not this error was visible to the user.", + "schema": { + "type": "boolean" + }, + "required": true + }, + { + "name": "parameters", + "summary": "Optional additional parameters to be logged with the error", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/FlatMap" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send error metric", + "params": [ + { + "name": "type", + "value": "media" + }, + { + "name": "code", + "value": "MEDIA-STALLED" + }, + { + "name": "description", + "value": "playback stalled" + }, + { + "name": "visible", + "value": true + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaLoadStart", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when setting the URL of a media asset to play, in order to infer load time.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send loadstart metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaPlay", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when media playback should start due to autoplay, user-initiated play, or unpausing.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send play metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaPlaying", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when media playback actually starts due to autoplay, user-initiated play, unpausing, or recovering from a buffering interuption.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send playing metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaPause", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when media playback will pause due to an intentional pause operation.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send pause metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaWaiting", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when media playback will halt due to a network, buffer, or other unintentional constraint.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send waiting metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaProgress", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called every 60 seconds as media playback progresses.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "progress", + "summary": "Progress of playback, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", + "schema": { + "$ref": "#/components/schemas/MediaPosition" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send progress metric.", + "params": [ + { + "name": "entityId", + "value": "345" + }, + { + "name": "progress", + "value": 0.75 + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaSeeking", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when a seek is initiated during media playback.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "target", + "summary": "Target destination of the seek, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", + "schema": { + "$ref": "#/components/schemas/MediaPosition" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send seeking metric.", + "params": [ + { + "name": "entityId", + "value": "345" + }, + { + "name": "target", + "value": 0.5 + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaSeeked", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when a seek is completed during media playback.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "position", + "summary": "Resulting position of the seek operation, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", + "schema": { + "$ref": "#/components/schemas/MediaPosition" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send seeked metric.", + "params": [ + { + "name": "entityId", + "value": "345" + }, + { + "name": "position", + "value": 0.51 + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaRateChange", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when the playback rate of media is changed.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "rate", + "summary": "The new playback rate.", + "schema": { + "type": "number" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send ratechange metric.", + "params": [ + { + "name": "entityId", + "value": "345" + }, + { + "name": "rate", + "value": 2 + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaRenditionChange", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when the playback rendition (e.g. bitrate, dimensions, profile, etc) is changed.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "bitrate", + "summary": "The new bitrate in kbps.", + "schema": { + "type": "number" + }, + "required": true + }, + { + "name": "width", + "summary": "The new resolution width.", + "schema": { + "type": "number" + }, + "required": true + }, + { + "name": "height", + "summary": "The new resolution height.", + "schema": { + "type": "number" + }, + "required": true + }, + { + "name": "profile", + "summary": "A description of the new profile, e.g. 'HDR' etc.", + "schema": { + "type": "string" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send renditionchange metric.", + "params": [ + { + "name": "entityId", + "value": "345" + }, + { + "name": "bitrate", + "value": 5000 + }, + { + "name": "width", + "value": 1920 + }, + { + "name": "height", + "value": 1080 + }, + { + "name": "profile", + "value": "HDR+" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "mediaEnded", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:media" + ] + } + ], + "summary": "Called when playback has stopped because the end of the media was reached.", + "params": [ + { + "name": "entityId", + "summary": "The entityId of the media.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Send ended metric.", + "params": [ + { + "name": "entityId", + "value": "345" + } + ], + "result": { + "name": "success", + "value": true + } + } + ] + }, + { + "name": "event", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:metrics:distributor" + ] + } + ], + "summary": "Inform the platform of 1st party distributor metrics.", + "params": [ + { + "name": "schema", + "summary": "The schema URI of the metric type", + "schema": { + "type": "string", + "format": "uri" + }, + "required": true + }, + { + "name": "data", + "summary": "A JSON payload conforming the the provided schema", + "schema": { + "$ref": "#/components/schemas/EventObject" + }, + "required": true + } + ], + "result": { + "name": "results", + "schema": { + "type": "null" + } + }, + "examples": [ + { + "name": "Send foo event", + "params": [ + { + "name": "schema", + "value": "http://meta.rdkcentral.com/some/schema" + }, + { + "name": "data", + "value": { + "foo": "foo" + } + } + ], + "result": { + "name": "result", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "MediaPosition": { + "title": "MediaPosition", + "description": "Represents a position inside playback content, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.", + "oneOf": [ + { + "const": 0 + }, + { + "type": "number", + "exclusiveMinimum": 0, + "exclusiveMaximum": 1 + }, + { + "type": "integer", + "minimum": 1, + "maximum": 86400 + } + ] + }, + "ErrorType": { + "title": "ErrorType", + "type": "string", + "enum": [ + "network", + "media", + "restriction", + "entitlement", + "other" + ] + }, + "EventObjectPrimitives": { + "title": "EventObjectPrimitives", + "anyOf": [ + { + "type": "string", + "maxLength": 256 + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "EventObject": { + "title": "EventObject", + "type": "object", + "maxProperties": 256, + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/components/schemas/EventObjectPrimitives" + }, + { + "type": "array", + "maxItems": 256, + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/EventObjectPrimitives" + }, + { + "$ref": "#/components/schemas/EventObject" + } + ] + } + }, + { + "$ref": "#/components/schemas/EventObject" + } + ] + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/parameters.json b/src/openrpc/parameters.json index 101d140bd..d510d3c65 100644 --- a/src/openrpc/parameters.json +++ b/src/openrpc/parameters.json @@ -1,90 +1,90 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Parameters", - "description": "Methods for getting initialization parameters for an app cold launch.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "initialization", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:lifecycle:state" - ] - } - ], - "summary": "Returns any initialization parameters for the app, e.g. initialial `NavigationIntent`.", - "params": [], - "result": { - "name": "init", - "summary": "The initialization parameters.", - "schema": { - "$ref": "#/components/schemas/AppInitialization" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "init", - "value": { - "lmt": 0, - "us_privacy": "1-Y-", - "discovery": { - "navigateTo": { - "action": "entity", - "data": { - "entityId": "abc", - "entityType": "program", - "programType": "movie" - }, - "context": { - "source": "voice" - } - } - } - } - } - } - ] - } - ], - "components": { - "schemas": { - "AppInitialization": { - "title": "AppInitialization", - "type": "object", - "properties": { - "us_privacy": { - "type": "string", - "description": "The IAB US Privacy string." - }, - "lmt": { - "type": "integer", - "description": "The IAB limit ad tracking opt out value." - }, - "discovery": { - "type": "object", - "properties": { - "navigateTo": { - "$ref": "https://meta.comcast.com/firebolt/intents#/definitions/NavigationIntent" - } - } - }, - "secondScreen": { - "type": "object", - "properties": { - "launchRequest": { - "$ref": "https://meta.comcast.com/firebolt/secondscreen#/definitions/SecondScreenEvent" - } - } - } - } - } - } - } - } \ No newline at end of file + "openrpc": "1.2.4", + "info": { + "title": "Parameters", + "description": "Methods for getting initialization parameters for an app cold launch.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "initialization", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:lifecycle:state" + ] + } + ], + "summary": "Returns any initialization parameters for the app, e.g. initialial `NavigationIntent`.", + "params": [], + "result": { + "name": "init", + "summary": "The initialization parameters.", + "schema": { + "$ref": "#/components/schemas/AppInitialization" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "init", + "value": { + "lmt": 0, + "us_privacy": "1-Y-", + "discovery": { + "navigateTo": { + "action": "entity", + "data": { + "entityId": "abc", + "entityType": "program", + "programType": "movie" + }, + "context": { + "source": "voice" + } + } + } + } + } + } + ] + } + ], + "components": { + "schemas": { + "AppInitialization": { + "title": "AppInitialization", + "type": "object", + "properties": { + "us_privacy": { + "type": "string", + "description": "The IAB US Privacy string." + }, + "lmt": { + "type": "integer", + "description": "The IAB limit ad tracking opt out value." + }, + "discovery": { + "type": "object", + "properties": { + "navigateTo": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/intents#/definitions/NavigationIntent" + } + } + }, + "secondScreen": { + "type": "object", + "properties": { + "launchRequest": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/secondscreen#/definitions/SecondScreenEvent" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/openrpc/pin_challenge.json b/src/openrpc/pin_challenge.json index c1a61ef7b..275d0b4c6 100644 --- a/src/openrpc/pin_challenge.json +++ b/src/openrpc/pin_challenge.json @@ -1,174 +1,174 @@ { - "openrpc": "1.2.4", - "info": { - "title": "PinChallenge", - "description": "A module for registering as a provider for a user grant in which the user is prompted for a pin for access to a capability", - "version": "0.0.0" - }, - "methods": [ - { - "name": "onRequestChallenge", - "summary": "Registers as a provider for when the user should be challenged in order to confirm access to a capability through a pin prompt", - "params": [], - "tags": [ - { - "name": "event", - "x-response": { - "$ref": "#/components/schemas/PinChallengeResult", - "examples": [ - { - "granted": true, - "reason": "correctPin" - }, - { - "granted": false, - "reason": "exceededPinFailures" - }, - { - "granted": null, - "reason": "cancelled" - } - ] - } - }, - { - "name": "capabilities", - "x-provides": "xrn:firebolt:capability:usergrant:pinchallenge", - "x-allow-focus": true - } - ], - "result": { - "name": "challenge", - "summary": "The request to challenge the user", - "schema": { - "$ref": "#/components/schemas/PinChallengeProviderRequest" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "correlationId": "abc", - "parameters": { - "capability": "xrn:firebolt:capability:commerce::purchase", - "requestor": { - "id": "ReferenceApp", - "name": "Firebolt Reference App" - }, - "pinSpace": "purchase" - } - } - } - } - ] - } - ], - "components": { - "schemas": { - "PinChallenge": { - "title": "PinChallenge", - "type": "object", - "required": [ - "requestor", - "pinSpace" - ], - "properties": { - "pinSpace": { - "type": "string", - "description": "The pin space that this challenge is for", - "enum": [ - "purchase", - "content" - ] - }, - "capability": { - "type": "string", - "description": "The capability that is gated by a pin challenge" - }, - "requestor": { - "description": "The identity of which app is requesting access to this capability", - "$ref": "#/components/schemas/ChallengeRequestor" - } - } - }, - "ChallengeRequestor": { - "title": "ChallengeRequestor", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "type": "string", - "description": "The id of the app that requested the challenge" - }, - "name": { - "type": "string", - "description": "The name of the app that requested the challenge" - } - } - }, - "PinChallengeProviderRequest": { - "title": "PinChallengeProviderRequest", - "allOf": [ - { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/ProviderRequest" - }, - { - "type": "object", - "required": [ - "parameters" - ], - "properties": { - "parameters": { - "description": "The request to challenge the user", - "$ref": "#/components/schemas/PinChallenge" - } - } - } - ] - }, - "ResultReason": { - "title": "ResultReason", - "type": "string", - "description": "The reason for the result of challenging the user", - "enum": [ - "noPinRequired", - "noPinRequiredWindow", - "exceededPinFailures", - "correctPin", - "cancelled" - ] - }, - "PinChallengeResult": { - "title": "PinChallengeResult", - "type": "object", - "required": [ - "granted", - "reason" - ], - "properties": { - "granted": { - "oneOf": [ - { - "type": "boolean", - "description": "Whether the user succeeded in the pin challenge" - }, - { - "const": null - } - ] - }, - "reason": { - "$ref": "#/components/schemas/ResultReason", - "description": "The reason for the result " - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "PinChallenge", + "description": "A module for registering as a provider for a user grant in which the user is prompted for a pin for access to a capability", + "version": "0.0.0" + }, + "methods": [ + { + "name": "challenge", + "summary": "Registers as a provider for when the user should be challenged in order to confirm access to a capability through a pin prompt", + "params": [ + { + "name": "requestor", + "required": true, + "schema": { + "description": "The identity of which app is requesting access to this capability", + "$ref": "#/components/schemas/ChallengeRequestor" + } + }, + { + "name": "pinSpace", + "required": true, + "schema": { + "type": "string", + "description": "The pin space that this challenge is for", + "enum": [ + "purchase", + "content" + ] + } + }, + { + "name": "capability", + "required": false, + "schema": { + "type": "string", + "description": "The capability that is gated by a pin challenge" + } + } + ], + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:usergrant:pinchallenge", + "x-allow-focus": true + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PinChallengeResult" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:commerce::purchase" + }, + { + "name": "requestor", + "value": { + "id": "ReferenceApp", + "name": "Firebolt Reference App" + } + }, + { + "name": "pinSpace", + "value": "purchase" + } + ], + "result": { + "name": "result", + "value": { + "granted": true, + "reason": "correctPin" + } + } + } + ] + } + ], + "components": { + "schemas": { + "PinChallenge": { + "title": "PinChallenge", + "type": "object", + "required": [ + "requestor", + "pinSpace" + ], + "properties": {} + }, + "ChallengeRequestor": { + "title": "ChallengeRequestor", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The id of the app that requested the challenge" + }, + "name": { + "type": "string", + "description": "The name of the app that requested the challenge" + } + } + }, + "PinChallengeProviderRequest": { + "title": "PinChallengeProviderRequest", + "allOf": [ + { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/ProviderRequest" + }, + { + "type": "object", + "required": [ + "parameters" + ], + "properties": { + "parameters": { + "description": "The request to challenge the user", + "$ref": "#/components/schemas/PinChallenge" + } + } + } + ] + }, + "ResultReason": { + "title": "ResultReason", + "type": "string", + "description": "The reason for the result of challenging the user", + "enum": [ + "noPinRequired", + "noPinRequiredWindow", + "exceededPinFailures", + "correctPin", + "cancelled" + ] + }, + "PinChallengeResult": { + "title": "PinChallengeResult", + "type": "object", + "required": [ + "granted", + "reason" + ], + "properties": { + "granted": { + "oneOf": [ + { + "type": "boolean", + "description": "Whether the user succeeded in the pin challenge" + }, + { + "const": null + } + ] + }, + "reason": { + "$ref": "#/components/schemas/ResultReason", + "description": "The reason for the result " + } + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/privacy.json b/src/openrpc/privacy.json index ed117f6c1..f5e489d5f 100644 --- a/src/openrpc/privacy.json +++ b/src/openrpc/privacy.json @@ -1,632 +1,632 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Privacy", - "description": "A module for managing device settings.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "allowResumePoints", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows resume points for content to show in the main experience", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowUnentitledResumePoints", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows resume points for content from unentitled providers to show in the main experience", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowWatchHistory", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their watch history from all sources to show in the main experience", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowProductAnalytics", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their usage data can be used for analytics about the product", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowPersonalization", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their usage data to be used for personalization and recommendations", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowUnentitledPersonalization", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their usage data to be used for personalization and recommendations for unentitled content", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowRemoteDiagnostics", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their personal data to be included in diagnostic telemetry. This also allows whether device logs can be remotely accessed from the client device", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowPrimaryContentAdTargeting", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows ads to be targeted to the user while watching content in the primary experience", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowPrimaryBrowseAdTargeting", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows ads to be targeted to the user while browsing in the primary experience", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowAppContentAdTargeting", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows ads to be targeted to the user while watching content in apps", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowACRCollection", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows their automatic content recognition data to be collected", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "allowCameraAnalytics", - "tags": [ - { - "name": "property", - "x-allow-value": true - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Whether the user allows data from their camera to be used for Product Analytics", - "params": [], - "result": { - "name": "allow", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [], - "result": { - "name": "allow", - "value": true - } - }, - { - "name": "Default example #2", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "settings", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:privacy:settings" - ] - } - ], - "summary": "Gets the allowed value for all privacy settings", - "params": [], - "result": { - "name": "settings", - "schema": { - "$ref": "#/components/schemas/PrivacySettings" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "settings", - "value": { - "allowACRCollection": true, - "allowResumePoints": false, - "allowAppContentAdTargeting": false, - "allowCameraAnalytics": true, - "allowPersonalization": true, - "allowPrimaryBrowseAdTargeting": false, - "allowPrimaryContentAdTargeting": false, - "allowProductAnalytics": true, - "allowRemoteDiagnostics": true, - "allowUnentitledPersonalization": true, - "allowUnentitledResumePoints": false, - "allowWatchHistory": true - } - } - } - ] - } - ], - "components": { - "schemas": { - "PrivacySettings": { - "title": "PrivacySettings", - "type": "object", - "required": [ - "allowACRCollection", - "allowResumePoints", - "allowAppContentAdTargeting", - "allowCameraAnalytics", - "allowPersonalization", - "allowPrimaryBrowseAdTargeting", - "allowPrimaryContentAdTargeting", - "allowProductAnalytics", - "allowRemoteDiagnostics", - "allowUnentitledPersonalization", - "allowUnentitledResumePoints", - "allowWatchHistory" - ], - "properties": { - "allowACRCollection": { - "description": "", - "type": "boolean" - }, - "allowResumePoints": { - "description": "", - "type": "boolean" - }, - "allowAppContentAdTargeting": { - "description": "", - "type": "boolean" - }, - "allowCameraAnalytics": { - "description": "", - "type": "boolean" - }, - "allowPersonalization": { - "description": "", - "type": "boolean" - }, - "allowPrimaryBrowseAdTargeting": { - "description": "", - "type": "boolean" - }, - "allowPrimaryContentAdTargeting": { - "description": "", - "type": "boolean" - }, - "allowProductAnalytics": { - "description": "", - "type": "boolean" - }, - "allowRemoteDiagnostics": { - "description": "", - "type": "boolean" - }, - "allowUnentitledPersonalization": { - "description": "", - "type": "boolean" - }, - "allowUnentitledResumePoints": { - "description": "", - "type": "boolean" - }, - "allowWatchHistory": { - "description": "", - "type": "boolean" - } - }, - "examples": [ - { - "allowACRCollection": true, - "allowResumePoints": false, - "allowAppContentAdTargeting": false, - "allowCameraAnalytics": true, - "allowPersonalization": true, - "allowPrimaryBrowseAdTargeting": false, - "allowPrimaryContentAdTargeting": false, - "allowProductAnalytics": true, - "allowRemoteDiagnostics": true, - "allowUnentitledPersonalization": true, - "allowUnentitledResumePoints": false, - "allowWatchHistory": true - } - ] - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "Privacy", + "description": "A module for managing device settings.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "allowResumePoints", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows resume points for content to show in the main experience", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowUnentitledResumePoints", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows resume points for content from unentitled providers to show in the main experience", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowWatchHistory", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their watch history from all sources to show in the main experience", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowProductAnalytics", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their usage data can be used for analytics about the product", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowPersonalization", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their usage data to be used for personalization and recommendations", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowUnentitledPersonalization", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their usage data to be used for personalization and recommendations for unentitled content", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowRemoteDiagnostics", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their personal data to be included in diagnostic telemetry. This also allows whether device logs can be remotely accessed from the client device", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowPrimaryContentAdTargeting", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows ads to be targeted to the user while watching content in the primary experience", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowPrimaryBrowseAdTargeting", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows ads to be targeted to the user while browsing in the primary experience", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowAppContentAdTargeting", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows ads to be targeted to the user while watching content in apps", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowACRCollection", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows their automatic content recognition data to be collected", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "allowCameraAnalytics", + "tags": [ + { + "name": "property", + "x-allow-value": true + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Whether the user allows data from their camera to be used for Product Analytics", + "params": [], + "result": { + "name": "allow", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "allow", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "settings", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:privacy:settings" + ] + } + ], + "summary": "Gets the allowed value for all privacy settings", + "params": [], + "result": { + "name": "settings", + "schema": { + "$ref": "#/components/schemas/PrivacySettings" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "settings", + "value": { + "allowACRCollection": true, + "allowResumePoints": false, + "allowAppContentAdTargeting": false, + "allowCameraAnalytics": true, + "allowPersonalization": true, + "allowPrimaryBrowseAdTargeting": false, + "allowPrimaryContentAdTargeting": false, + "allowProductAnalytics": true, + "allowRemoteDiagnostics": true, + "allowUnentitledPersonalization": true, + "allowUnentitledResumePoints": false, + "allowWatchHistory": true + } + } + } + ] + } + ], + "components": { + "schemas": { + "PrivacySettings": { + "title": "PrivacySettings", + "type": "object", + "required": [ + "allowACRCollection", + "allowResumePoints", + "allowAppContentAdTargeting", + "allowCameraAnalytics", + "allowPersonalization", + "allowPrimaryBrowseAdTargeting", + "allowPrimaryContentAdTargeting", + "allowProductAnalytics", + "allowRemoteDiagnostics", + "allowUnentitledPersonalization", + "allowUnentitledResumePoints", + "allowWatchHistory" + ], + "properties": { + "allowACRCollection": { + "description": "", + "type": "boolean" + }, + "allowResumePoints": { + "description": "", + "type": "boolean" + }, + "allowAppContentAdTargeting": { + "description": "", + "type": "boolean" + }, + "allowCameraAnalytics": { + "description": "", + "type": "boolean" + }, + "allowPersonalization": { + "description": "", + "type": "boolean" + }, + "allowPrimaryBrowseAdTargeting": { + "description": "", + "type": "boolean" + }, + "allowPrimaryContentAdTargeting": { + "description": "", + "type": "boolean" + }, + "allowProductAnalytics": { + "description": "", + "type": "boolean" + }, + "allowRemoteDiagnostics": { + "description": "", + "type": "boolean" + }, + "allowUnentitledPersonalization": { + "description": "", + "type": "boolean" + }, + "allowUnentitledResumePoints": { + "description": "", + "type": "boolean" + }, + "allowWatchHistory": { + "description": "", + "type": "boolean" + } + }, + "examples": [ + { + "allowACRCollection": true, + "allowResumePoints": false, + "allowAppContentAdTargeting": false, + "allowCameraAnalytics": true, + "allowPersonalization": true, + "allowPrimaryBrowseAdTargeting": false, + "allowPrimaryContentAdTargeting": false, + "allowProductAnalytics": true, + "allowRemoteDiagnostics": true, + "allowUnentitledPersonalization": true, + "allowUnentitledResumePoints": false, + "allowWatchHistory": true + } + ] + } + } + } } \ No newline at end of file diff --git a/src/openrpc/profile.json b/src/openrpc/profile.json index 15019931e..428904495 100644 --- a/src/openrpc/profile.json +++ b/src/openrpc/profile.json @@ -1,102 +1,102 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Profile", - "description": "Methods for getting information about the current user/account profile", - "version": "0.0.0" - }, - "methods": [ - { - "name": "approveContentRating", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:approve:content" - ] - } - ], - "summary": "Verifies that the current profile should have access to mature/adult content.", - "params": [], - "result": { - "name": "allow", - "summary": "Whether or not to allow access", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "approvePurchase", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:approve:purchase" - ] - } - ], - "summary": "Verifies that the current profile should have access to making purchases.", - "params": [], - "result": { - "name": "allow", - "summary": "Whether or not to allow access", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "allow", - "value": false - } - } - ] - }, - { - "name": "flags", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:profile:flags" - ] - } - ], - "summary": "Get a map of profile flags for the current session.", - "params": [], - "result": { - "name": "flags", - "summary": "The profile flags.", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/FlatMap" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "flags", - "value": { - "userExperience": "1000" - } - } - } - ] - } - ] + "openrpc": "1.2.4", + "info": { + "title": "Profile", + "description": "Methods for getting information about the current user/account profile", + "version": "0.0.0" + }, + "methods": [ + { + "name": "approveContentRating", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:approve:content" + ] + } + ], + "summary": "Verifies that the current profile should have access to mature/adult content.", + "params": [], + "result": { + "name": "allow", + "summary": "Whether or not to allow access", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "approvePurchase", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:approve:purchase" + ] + } + ], + "summary": "Verifies that the current profile should have access to making purchases.", + "params": [], + "result": { + "name": "allow", + "summary": "Whether or not to allow access", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "allow", + "value": false + } + } + ] + }, + { + "name": "flags", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:profile:flags" + ] + } + ], + "summary": "Get a map of profile flags for the current session.", + "params": [], + "result": { + "name": "flags", + "summary": "The profile flags.", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/FlatMap" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "flags", + "value": { + "userExperience": "1000" + } + } + } + ] + } + ] } \ No newline at end of file diff --git a/src/openrpc/second_screen.json b/src/openrpc/second_screen.json index af25e2c9d..186a3e210 100644 --- a/src/openrpc/second_screen.json +++ b/src/openrpc/second_screen.json @@ -1,186 +1,192 @@ { - "openrpc": "1.2.4", - "info": { - "title": "SecondScreen", - "version": "0.0.0", - "description": "Methods for communicating with second screen devices" - }, - "methods": [ - { - "name": "protocols", - "summary": "Get the supported second screen discovery protocols", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:device:info" - ] - } - ], - "params": [], - "result": { - "name": "protocols", - "summary": "the supported protocols", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/BooleanMap" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "dial1.7": true - } - } - } - ] - }, - { - "name": "device", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:dial" - ] - } - ], - "summary": "Get the broadcasted id for the device", - "params": [ - { - "name": "type", - "summary": "The type of second screen protocol, e.g. \"dial\"", - "required": false, - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "deviceId", - "summary": "the device id", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": "device-id" - } - } - ] - }, - { - "name": "friendlyName", - "summary": "Get the broadcasted friendly name for the device", - "params": [], - "tags": [ - { - "name": "property:readonly" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:dial" - ] - } - ], - "result": { - "name": "friendlyName", - "summary": "the device friendly-name", - "schema": { - "type": "string" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "friendlyName", - "value": "Living Room" - } - } - ] - }, - { - "name": "onLaunchRequest", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:dial" - ] - } - ], - "summary": "Listen to the launchRequest event", - "params": [], - "result": { - "name": "launchRequestEvent", - "summary": "Dispatched when a second screen device on the local network has requested this app to be launched", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/secondscreen#/definitions/SecondScreenEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "type": "dial", - "version": "1.7", - "data": "{\"code\":\"AQDPQZiQcb3KQ7gY7yy5tHTMbbkGHR9Zjp-KL53H3eKBZIeAt7O9UKYPu6B21l2UZVmIqkFXDXBmXvK4g2e3EgZtjMNmKPsTltgnRl95DImtOXjSpWtTjSaOkW4w1kZKUTwLKdwVWTzBVH8ERHorvLU6vCGOVHxXt65LNwdl5HKRweShVC1V9QsyvRnQS61ov0UclmrH_xZML2Bt-Q-rZFjey5MjwupIb4x4f53XUJMhjHpDHoIUKrjpdPDQvK2a\",\"friendlyName\":\"Operator_TX061AEI\",\"UDN\":\"608fef11-2800-482a-962b-23a6690c93c1\"}" - } - } - } - ] - }, - { - "name": "onCloseRequest", - "tags": [ - { - "name": "event" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:dial" - ] - } - ], - "summary": "Listen to the closeRequest event", - "params": [], - "result": { - "name": "closeRequestEvent", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/secondscreen#/definitions/SecondScreenEvent" - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "Default Result", - "value": { - "type": "dial", - "version": "1.7" - } - } - } - ] - } - ] + "openrpc": "1.2.4", + "info": { + "title": "SecondScreen", + "version": "0.0.0", + "description": "Methods for communicating with second screen devices" + }, + "methods": [ + { + "name": "protocols", + "summary": "Get the supported second screen discovery protocols", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:device:info" + ] + } + ], + "params": [], + "result": { + "name": "protocols", + "summary": "the supported protocols", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/BooleanMap" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": { + "dial1.7": true + } + } + } + ] + }, + { + "name": "device", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:dial" + ] + } + ], + "summary": "Get the broadcasted id for the device", + "params": [ + { + "name": "type", + "summary": "The type of second screen protocol, e.g. \"dial\"", + "required": false, + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "deviceId", + "summary": "the device id", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "Default Result", + "value": "device-id" + } + } + ] + }, + { + "name": "friendlyName", + "summary": "Get the broadcasted friendly name for the device", + "params": [], + "tags": [ + { + "name": "property:readonly" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:dial" + ] + } + ], + "result": { + "name": "friendlyName", + "summary": "the device friendly-name", + "schema": { + "type": "string" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "friendlyName", + "value": "Living Room" + } + } + ] + }, + { + "name": "launchRequest", + "tags": [ + { + "name": "notifier", + "x-event": "SecondScreen.onLaunchRequest" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:dial" + ] + } + ], + "summary": "Listen to the launchRequest event", + "params": [ + { + "name": "launchRequestEvent", + "summary": "Dispatched when a second screen device on the local network has requested this app to be launched", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/secondscreen#/definitions/SecondScreenEvent" + } + } + ], + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "Default Result", + "value": { + "type": "dial", + "version": "1.7", + "data": "{\"code\":\"AQDPQZiQcb3KQ7gY7yy5tHTMbbkGHR9Zjp-KL53H3eKBZIeAt7O9UKYPu6B21l2UZVmIqkFXDXBmXvK4g2e3EgZtjMNmKPsTltgnRl95DImtOXjSpWtTjSaOkW4w1kZKUTwLKdwVWTzBVH8ERHorvLU6vCGOVHxXt65LNwdl5HKRweShVC1V9QsyvRnQS61ov0UclmrH_xZML2Bt-Q-rZFjey5MjwupIb4x4f53XUJMhjHpDHoIUKrjpdPDQvK2a\",\"friendlyName\":\"Operator_TX061AEI\",\"UDN\":\"608fef11-2800-482a-962b-23a6690c93c1\"}" + } + } + ] + } + ] + }, + { + "name": "closeRequest", + "tags": [ + { + "name": "notifier", + "x-event": "SecondScreen.onCloseRequest" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:dial" + ] + } + ], + "summary": "Listen to the closeRequest event", + "params": [ + { + "name": "closeRequestEvent", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/secondscreen#/definitions/SecondScreenEvent" + } + } + ], + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "Default Result", + "value": { + "type": "dial", + "version": "1.7" + } + } + ] + } + ] + } + ] } \ No newline at end of file diff --git a/src/openrpc/secure_storage.json b/src/openrpc/secure_storage.json index 1d65c1d4b..ae79d07da 100644 --- a/src/openrpc/secure_storage.json +++ b/src/openrpc/secure_storage.json @@ -1,571 +1,577 @@ { - "openrpc": "1.2.4", - "info": { - "title": "SecureStorage", - "version": "0.0.0", - "description": "A module for storing and retrieving secure data owned by the app" - }, - "methods": [ - { - "name": "get", - "summary": "Get stored value by key", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "scope", - "summary": "The scope of the key/value", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - }, - { - "name": "key", - "summary": "Key to get", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "value", - "summary": "The retrieved value, if found.", - "schema": { - "oneOf": [ - {"type": "string"}, - {"type": "null"} - ] - } - }, - "examples": [ - { - "name": "Successfully retrieve a refresh token with key authRefreshToken", - "params": [ - { - "name": "scope", - "value": "device" - }, - { - "name": "key", - "value": "authRefreshToken" - } - ], - "result": { - "name": "value", - "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" - } - }, - { - "name": "Attempt to retrieve a key with no value set", - "params": [ - { - "name": "scope", - "value": "account" - }, - { - "name": "key", - "value": "authRefreshToken" - } - ], - "result": { - "name": "value", - "value": null - } - } - ] - }, - { - "name": "set", - "summary": "Set or update a secure data value", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "scope", - "summary": "The scope of the data key", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - }, - { - "name": "key", - "summary": "Key to set", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "value", - "summary": "Value to set", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "options", - "summary": "Optional parameters to set", - "schema": { - "$ref": "#/components/schemas/StorageOptions" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Set a refresh token with name authRefreshToken with optional paramter", - "params": [ - { - "name": "scope", - "value": "device" - }, - { - "name": "key", - "value": "authRefreshToken" - }, - { - "name": "value", - "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" - }, - { - "name": "options", - "value": { - "ttl": 600 - } - } - ], - "result": { - "name": "defaultResult", - "value": null - } - }, - { - "name": "Set a refresh token with name authRefreshToken without optional parameter", - "params": [ - { - "name": "scope", - "value": "account" - }, - { - "name": "key", - "value": "authRefreshToken" - }, - { - "name": "value", - "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "remove", - "summary": "Remove a secure data value", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "scope", - "summary": "The scope of the data key", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - }, - { - "name": "key", - "summary": "Key to remove", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "summary": "", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Remove the value with key authRefreshToken for device", - "params": [ - { - "name": "scope", - "value": "device" - }, - { - "name": "key", - "value": "authRefreshToken" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - }, - { - "name": "Remove the value with key authRefreshToken for account", - "params": [ - { - "name": "scope", - "value": "account" - }, - { - "name": "key", - "value": "authRefreshToken" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "setForApp", - "summary": "Set or update a secure data value for a specific app.", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "appId", - "summary": "appId for which value is being set", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "scope", - "summary": "The scope of the data key", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - }, - { - "name": "key", - "summary": "Key to set", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "value", - "summary": "Value to set", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "options", - "summary": "Optional parameters to set", - "schema": { - "$ref": "#/components/schemas/StorageOptions" - }, - "required": false - } - ], - "result": { - "name": "success", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Set a refresh token with name authRefreshToken with optional parameter for appId foo", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "scope", - "value": "device" - }, - { - "name": "key", - "value": "authRefreshToken" - }, - { - "name": "value", - "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" - }, - { - "name": "options", - "value": { - "ttl": 600 - } - } - ], - "result": { - "name": "defaultResult", - "value": null - } - }, - { - "name": "Set a refresh token with name authRefreshToken without optional parameter for appId foo", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "scope", - "value": "account" - }, - { - "name": "key", - "value": "authRefreshToken" - }, - { - "name": "value", - "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "removeForApp", - "summary": "Removes single data value for a specific app.", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "appId", - "summary": "appId for which values are removed", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "scope", - "summary": "The scope of the key/value", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - }, - { - "name": "key", - "summary": "Key to remove", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "success", - "summary": "", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Removes authRefreshToken for appId foo", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "scope", - "value": "account" - }, - { - "name": "key", - "value": "authRefreshToken" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "clearForApp", - "summary": "Clears all the secure data values for a specific app", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "appId", - "summary": "appId for which values are removed", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "scope", - "summary": "The scope of the key/value", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - } - ], - "result": { - "name": "success", - "summary": "", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Clears all the secure data values for appId foo", - "params": [ - { - "name": "appId", - "value": "foo" - }, - { - "name": "scope", - "value": "account" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "clear", - "summary": "Clears all the secure data values", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:storage:secure" - ] - } - ], - "params": [ - { - "name": "scope", - "summary": "The scope of the key/value", - "schema": { - "$ref": "#/components/schemas/StorageScope" - }, - "required": true - } - ], - "result": { - "name": "success", - "summary": "", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Clears all the data values of storage", - "params": [ - { - "name": "scope", - "value": "account" - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - } - ], - "components": { - "schemas": { - "StorageScope": { - "title": "StorageScope", - "type": "string", - "enum": [ - "device", - "account" - ], - "description": "The scope of the data" - }, - "StorageOptions": { - "title": "StorageOptions", - "type": "object", - "required": ["ttl"], - "properties": { - "ttl": { - "type": "number", - "description": "Seconds from set time before the data expires and is removed" - } - } - } - } - } + "openrpc": "1.2.4", + "info": { + "title": "SecureStorage", + "version": "0.0.0", + "description": "A module for storing and retrieving secure data owned by the app" + }, + "methods": [ + { + "name": "get", + "summary": "Get stored value by key", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "scope", + "summary": "The scope of the key/value", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + }, + { + "name": "key", + "summary": "Key to get", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "value", + "summary": "The retrieved value, if found.", + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "examples": [ + { + "name": "Successfully retrieve a refresh token with key authRefreshToken", + "params": [ + { + "name": "scope", + "value": "device" + }, + { + "name": "key", + "value": "authRefreshToken" + } + ], + "result": { + "name": "value", + "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" + } + }, + { + "name": "Attempt to retrieve a key with no value set", + "params": [ + { + "name": "scope", + "value": "account" + }, + { + "name": "key", + "value": "authRefreshToken" + } + ], + "result": { + "name": "value", + "value": null + } + } + ] + }, + { + "name": "set", + "summary": "Set or update a secure data value", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "scope", + "summary": "The scope of the data key", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + }, + { + "name": "key", + "summary": "Key to set", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "value", + "summary": "Value to set", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "options", + "summary": "Optional parameters to set", + "schema": { + "$ref": "#/components/schemas/StorageOptions" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Set a refresh token with name authRefreshToken with optional paramter", + "params": [ + { + "name": "scope", + "value": "device" + }, + { + "name": "key", + "value": "authRefreshToken" + }, + { + "name": "value", + "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" + }, + { + "name": "options", + "value": { + "ttl": 600 + } + } + ], + "result": { + "name": "defaultResult", + "value": null + } + }, + { + "name": "Set a refresh token with name authRefreshToken without optional parameter", + "params": [ + { + "name": "scope", + "value": "account" + }, + { + "name": "key", + "value": "authRefreshToken" + }, + { + "name": "value", + "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "remove", + "summary": "Remove a secure data value", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "scope", + "summary": "The scope of the data key", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + }, + { + "name": "key", + "summary": "Key to remove", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "summary": "", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Remove the value with key authRefreshToken for device", + "params": [ + { + "name": "scope", + "value": "device" + }, + { + "name": "key", + "value": "authRefreshToken" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + }, + { + "name": "Remove the value with key authRefreshToken for account", + "params": [ + { + "name": "scope", + "value": "account" + }, + { + "name": "key", + "value": "authRefreshToken" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "setForApp", + "summary": "Set or update a secure data value for a specific app.", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "appId", + "summary": "appId for which value is being set", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "scope", + "summary": "The scope of the data key", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + }, + { + "name": "key", + "summary": "Key to set", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "value", + "summary": "Value to set", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "options", + "summary": "Optional parameters to set", + "schema": { + "$ref": "#/components/schemas/StorageOptions" + }, + "required": false + } + ], + "result": { + "name": "success", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Set a refresh token with name authRefreshToken with optional parameter for appId foo", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "scope", + "value": "device" + }, + { + "name": "key", + "value": "authRefreshToken" + }, + { + "name": "value", + "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" + }, + { + "name": "options", + "value": { + "ttl": 600 + } + } + ], + "result": { + "name": "defaultResult", + "value": null + } + }, + { + "name": "Set a refresh token with name authRefreshToken without optional parameter for appId foo", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "scope", + "value": "account" + }, + { + "name": "key", + "value": "authRefreshToken" + }, + { + "name": "value", + "value": "VGhpcyBub3QgYSByZWFsIHRva2VuLgo=" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "removeForApp", + "summary": "Removes single data value for a specific app.", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "appId", + "summary": "appId for which values are removed", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "scope", + "summary": "The scope of the key/value", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + }, + { + "name": "key", + "summary": "Key to remove", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "success", + "summary": "", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Removes authRefreshToken for appId foo", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "scope", + "value": "account" + }, + { + "name": "key", + "value": "authRefreshToken" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "clearForApp", + "summary": "Clears all the secure data values for a specific app", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "appId", + "summary": "appId for which values are removed", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "scope", + "summary": "The scope of the key/value", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + } + ], + "result": { + "name": "success", + "summary": "", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Clears all the secure data values for appId foo", + "params": [ + { + "name": "appId", + "value": "foo" + }, + { + "name": "scope", + "value": "account" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "clear", + "summary": "Clears all the secure data values", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:storage:secure" + ] + } + ], + "params": [ + { + "name": "scope", + "summary": "The scope of the key/value", + "schema": { + "$ref": "#/components/schemas/StorageScope" + }, + "required": true + } + ], + "result": { + "name": "success", + "summary": "", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Clears all the data values of storage", + "params": [ + { + "name": "scope", + "value": "account" + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + } + ], + "components": { + "schemas": { + "StorageScope": { + "title": "StorageScope", + "type": "string", + "enum": [ + "device", + "account" + ], + "description": "The scope of the data" + }, + "StorageOptions": { + "title": "StorageOptions", + "type": "object", + "required": [ + "ttl" + ], + "properties": { + "ttl": { + "type": "number", + "description": "Seconds from set time before the data expires and is removed" + } + } + } + } + } } \ No newline at end of file diff --git a/src/openrpc/sleepable.json b/src/openrpc/sleepable.json new file mode 100644 index 000000000..40db30dc4 --- /dev/null +++ b/src/openrpc/sleepable.json @@ -0,0 +1,64 @@ +{ + "openrpc": "1.2.4", + "info": { + "title": "Sleepable", + "description": "Methods and events for responding to lifecycle changes in your app", + "version": "0.0.0" + }, + "methods": [ + { + "name": "sleep", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:sleepable" + } + ], + "summary": "Called when the platform is ready to create the lifecycle session for the app. Only called only once, during the `INITIALIZING` state.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App creation.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + }, + { + "name": "wake", + "tags": [ + { + "name": "capabilities", + "x-provides": "xrn:firebolt:capability:lifecycle:sleepable" + } + ], + "summary": "Called when the platform wants the app to reallocate its graphics surface and prepare to be potentially used.", + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "App resuming.", + "params": [], + "result": { + "name": "result", + "value": null + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/openrpc/user_grants.json b/src/openrpc/user_grants.json index fcfe8b1c0..db41630db 100644 --- a/src/openrpc/user_grants.json +++ b/src/openrpc/user_grants.json @@ -1,397 +1,397 @@ { - "openrpc": "1.2.4", - "info": { - "title": "UserGrants", - "description": "A module for managing grants given by the user", - "version": "0.0.0" - }, - "methods": [ - { - "name": "app", - "summary": "Get all granted and denied user grants for the given app", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "appId", - "schema": { - "type": "string" - }, - "required": true - } - ], - "result": { - "name": "info", - "summary": "The list of grants for this app", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GrantInfo" - } - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "appId", - "value": "certapp" - } - ], - "result": { - "name": "defaultResult", - "value": [ - { - "app": { - "id": "certapp", - "title": "Firebolt Certification" - }, - "state": "granted", - "capability": "xrn:firebolt:capability:data:app-usage", - "role": "use", - "lifespan": "seconds", - "expires": "2022-12-14T20:20:39+00:00" - }, - { - "app": { - "id": "certapp", - "title": "Firebolt Certification" - }, - "state": "denied", - "capability": "xrn:firebolt:capability:localization:postal-code", - "role": "use", - "lifespan": "appActive" - } - ] - } - } - ] - }, - { - "name": "device", - "summary": "Get all granted and denied user grants for the device", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [], - "result": { - "name": "info", - "summary": "The list of grants for the device", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GrantInfo" - } - } - }, - "examples": [ - { - "name": "Default Example", - "params": [], - "result": { - "name": "defaultResult", - "value": [ - { - "state": "granted", - "capability": "xrn:firebolt:capability:localization:postal-code", - "role": "use", - "lifespan": "powerActive" - } - ] - } - } - ] - }, - { - "name": "capability", - "summary": "Get all granted and denied user grants for the given capability", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "capability", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "required": true - } - ], - "result": { - "name": "info", - "summary": "The list of grants associated with the given capability", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GrantInfo" - } - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - } - ], - "result": { - "name": "defaultResult", - "value": [ - { - "state": "granted", - "capability": "xrn:firebolt:capability:localization:postal-code", - "role": "use", - "lifespan": "powerActive" - } - ] - } - } - ] - }, - { - "name": "grant", - "summary": "Grants a given capability to a specific app, if appropriate. Calling this results in a persisted active grant that lasts for the duration of the grant policy lifespan. ", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "role", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - }, - "required": true - }, - { - "name": "capability", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "required": true - }, - { - "name": "options", - "schema": { - "$ref": "#/components/schemas/GrantModificationOptions" - } - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "role", - "value": "use" - }, - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - }, - { - "name": "options", - "value": { - "appId": "certapp" - } - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "deny", - "summary": "Denies a given capability, to a specific app if appropriate. Calling this results in a persisted Denied Grant that lasts for the duration of the Grant Policy lifespan. ", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "role", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - }, - "required": true - }, - { - "name": "capability", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "required": true - }, - { - "name": "options", - "schema": { - "$ref": "#/components/schemas/GrantModificationOptions" - } - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "role", - "value": "use" - }, - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - }, - { - "name": "options", - "value": { - "appId": "certapp" - } - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "clear", - "summary": "Clears the grant for a given capability, to a specific app if appropriate. Calling this results in a persisted Denied Grant that lasts for the duration of the Grant Policy lifespan. ", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "role", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - }, - "required": true - }, - { - "name": "capability", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "required": true - }, - { - "name": "options", - "schema": { - "$ref": "#/components/schemas/GrantModificationOptions" - } - } - ], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Default Example", - "params": [ - { - "name": "role", - "value": "use" - }, - { - "name": "capability", - "value": "xrn:firebolt:capability:localization:postal-code" - }, - { - "name": "options", - "value": { - "appId": "certapp" - } - } - ], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "request", - "summary": "Requests Firebolt to carry out a set of user grants for a given application such that the user grant provider is notified or an existing user grant is reused.", - "tags": [ - { - "name": "capabilities", - "x-manages": [ - "xrn:firebolt:capability:grants:state" - ] - } - ], - "params": [ - { - "name": "appId", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "permissions", - "schema": { - "type": "array", - "items": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Permission" - }, - "minItems": 1 - }, - "required": true - }, + "openrpc": "1.2.4", + "info": { + "title": "UserGrants", + "description": "A module for managing grants given by the user", + "version": "0.0.0" + }, + "methods": [ + { + "name": "app", + "summary": "Get all granted and denied user grants for the given app", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "appId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "info", + "summary": "The list of grants for this app", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GrantInfo" + } + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "appId", + "value": "certapp" + } + ], + "result": { + "name": "defaultResult", + "value": [ + { + "app": { + "id": "certapp", + "title": "Firebolt Certification" + }, + "state": "granted", + "capability": "xrn:firebolt:capability:data:app-usage", + "role": "use", + "lifespan": "seconds", + "expires": "2022-12-14T20:20:39+00:00" + }, + { + "app": { + "id": "certapp", + "title": "Firebolt Certification" + }, + "state": "denied", + "capability": "xrn:firebolt:capability:localization:postal-code", + "role": "use", + "lifespan": "appActive" + } + ] + } + } + ] + }, + { + "name": "device", + "summary": "Get all granted and denied user grants for the device", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [], + "result": { + "name": "info", + "summary": "The list of grants for the device", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GrantInfo" + } + } + }, + "examples": [ + { + "name": "Default Example", + "params": [], + "result": { + "name": "defaultResult", + "value": [ + { + "state": "granted", + "capability": "xrn:firebolt:capability:localization:postal-code", + "role": "use", + "lifespan": "powerActive" + } + ] + } + } + ] + }, + { + "name": "capability", + "summary": "Get all granted and denied user grants for the given capability", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "capability", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "required": true + } + ], + "result": { + "name": "info", + "summary": "The list of grants associated with the given capability", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GrantInfo" + } + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + } + ], + "result": { + "name": "defaultResult", + "value": [ + { + "state": "granted", + "capability": "xrn:firebolt:capability:localization:postal-code", + "role": "use", + "lifespan": "powerActive" + } + ] + } + } + ] + }, + { + "name": "grant", + "summary": "Grants a given capability to a specific app, if appropriate. Calling this results in a persisted active grant that lasts for the duration of the grant policy lifespan. ", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "role", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + }, + "required": true + }, + { + "name": "capability", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "required": true + }, + { + "name": "options", + "schema": { + "$ref": "#/components/schemas/GrantModificationOptions" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "role", + "value": "use" + }, + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + }, + { + "name": "options", + "value": { + "appId": "certapp" + } + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "deny", + "summary": "Denies a given capability, to a specific app if appropriate. Calling this results in a persisted Denied Grant that lasts for the duration of the Grant Policy lifespan. ", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "role", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + }, + "required": true + }, + { + "name": "capability", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "required": true + }, + { + "name": "options", + "schema": { + "$ref": "#/components/schemas/GrantModificationOptions" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "role", + "value": "use" + }, + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + }, + { + "name": "options", + "value": { + "appId": "certapp" + } + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "clear", + "summary": "Clears the grant for a given capability, to a specific app if appropriate. Calling this results in a persisted Denied Grant that lasts for the duration of the Grant Policy lifespan. ", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "role", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + }, + "required": true + }, + { + "name": "capability", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "required": true + }, + { + "name": "options", + "schema": { + "$ref": "#/components/schemas/GrantModificationOptions" + } + } + ], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "role", + "value": "use" + }, + { + "name": "capability", + "value": "xrn:firebolt:capability:localization:postal-code" + }, + { + "name": "options", + "value": { + "appId": "certapp" + } + } + ], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "request", + "summary": "Requests Firebolt to carry out a set of user grants for a given application such that the user grant provider is notified or an existing user grant is reused.", + "tags": [ + { + "name": "capabilities", + "x-manages": [ + "xrn:firebolt:capability:grants:state" + ] + } + ], + "params": [ + { + "name": "appId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "permissions", + "schema": { + "type": "array", + "items": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Permission" + }, + "minItems": 1 + }, + "required": true + }, { "name": "options", "summary": "Request options", @@ -400,53 +400,53 @@ }, "required": false } - ], - "result": { - "name": "info", - "summary": "The result of all grants requested by this", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GrantInfo" - } - } - }, - "examples": [ - { - "name": "Default result #1", - "params": [ - { - "name": "appId", - "value": "certapp" - }, - { - "name": "permissions", - "value": [ - { - "role": "use", - "capability": "xrn:firebolt:capability:localization:postal-code" - } - ] - } - ], - "result": { - "name": "defaultResult", - "value": [ - { - "app": { - "id": "certapp", - "title": "Certification App" - }, - "state": "granted", - "capability": "xrn:firebolt:capability:localization:postal-code", - "role": "use", - "lifespan": "powerActive" - } - ] - } - }, + ], + "result": { + "name": "info", + "summary": "The result of all grants requested by this", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GrantInfo" + } + } + }, + "examples": [ + { + "name": "Example #1", + "params": [ + { + "name": "appId", + "value": "certapp" + }, + { + "name": "permissions", + "value": [ + { + "role": "use", + "capability": "xrn:firebolt:capability:localization:postal-code" + } + ] + } + ], + "result": { + "name": "defaultResult", + "value": [ + { + "app": { + "id": "certapp", + "title": "Certification App" + }, + "state": "granted", + "capability": "xrn:firebolt:capability:localization:postal-code", + "role": "use", + "lifespan": "powerActive" + } + ] + } + }, { - "name": "Default result #2", + "name": "Example #2", "params": [ { "name": "appId", @@ -484,98 +484,98 @@ ] } } - ] - } - ], - "components": { - "schemas": { - "GrantInfo": { - "description": "Information about a grant given by a user", - "type": "object", - "properties": { - "app": { - "$ref": "#/components/schemas/AppInfo" - }, - "state": { - "$ref": "#/components/schemas/GrantState" - }, - "capability": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" - }, - "role": { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Role" - }, - "lifespan": { - "type": "string", - "enum": [ - "once", - "forever", - "appActive", - "powerActive", - "seconds" - ] - }, - "expires": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "state", - "capability", - "role", - "lifespan" - ], - "examples": [ - { - "app": { - "id": "certapp", - "title": "Firebolt Certification" - }, - "state": "granted", - "capability": "xrn:firebolt:capability:data:app-usage", - "role": "use", - "lifespan": "seconds", - "expires": "2022-12-14T20:20:39+00:00" - } - ] - }, - "AppInfo": { - "description": "Information about an app that a grant was for", - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "id" - ] - }, - "GrantState": { - "description": "The state the grant is in", - "type": "string", - "enum": [ - "granted", - "denied" - ] - }, - "GrantModificationOptions": { - "description": "Options when modifying any grant", - "type": "object", - "properties": { - "appId": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [] - }, + ] + } + ], + "components": { + "schemas": { + "GrantInfo": { + "description": "Information about a grant given by a user", + "type": "object", + "properties": { + "app": { + "$ref": "#/components/schemas/AppInfo" + }, + "state": { + "$ref": "#/components/schemas/GrantState" + }, + "capability": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" + }, + "role": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Role" + }, + "lifespan": { + "type": "string", + "enum": [ + "once", + "forever", + "appActive", + "powerActive", + "seconds" + ] + }, + "expires": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false, + "required": [ + "state", + "capability", + "role", + "lifespan" + ], + "examples": [ + { + "app": { + "id": "certapp", + "title": "Firebolt Certification" + }, + "state": "granted", + "capability": "xrn:firebolt:capability:data:app-usage", + "role": "use", + "lifespan": "seconds", + "expires": "2022-12-14T20:20:39+00:00" + } + ] + }, + "AppInfo": { + "description": "Information about an app that a grant was for", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "id" + ] + }, + "GrantState": { + "description": "The state the grant is in", + "type": "string", + "enum": [ + "granted", + "denied" + ] + }, + "GrantModificationOptions": { + "description": "Options when modifying any grant", + "type": "object", + "properties": { + "appId": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [] + }, "RequestOptions": { "title": "RequestOptions", "type": "object", @@ -586,6 +586,6 @@ } } } - } - } + } + } } \ No newline at end of file diff --git a/src/openrpc/voice_guidance.json b/src/openrpc/voice_guidance.json index ead88fa48..5e18a009f 100644 --- a/src/openrpc/voice_guidance.json +++ b/src/openrpc/voice_guidance.json @@ -1,100 +1,93 @@ { - "openrpc": "1.2.4", - "info": { - "title": "VoiceGuidance", - "description": "A module for managing voice-guidance Settings.", - "version": "0.0.0" - }, - "methods": [ - { - "name": "enabled", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:voiceguidance" - ] - } - ], - "summary": "Whether or not voice-guidance is enabled.", - "params": [ - ], - "result": { - "name": "enabled", - "schema": { - "type": "boolean" - } - }, - "examples": [ - { - "name": "Default example #1", - "params": [ - ], - "result": { - "name": "enabled", - "value": true - } - }, - { - "name": "Default example #2", - "params": [ - ], - "result": { - "name": "enabled", - "value": false - } - } - ] - }, - { - "name": "speed", - "tags": [ - { - "name": "property" - }, - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:accessibility:voiceguidance" - ] - } - ], - "summary": "The speed at which voice guidance speech will be read back to the user.", - "params": [ - ], - "result": { - "name": "speed", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/VoiceSpeed" - } - }, - "examples": [ - { - "name": "Voice guidance speed to 1", - "params": [ - ], - "result": { - "name": "speed", - "value": 1 - } - }, - { - "name": "Voice guidance speed to 2", - "params": [ - ], - "result": { - "name": "speed", - "value": 2 - } - } - ] - } - ], - "components": { - "schemas": { - } - } + "openrpc": "1.2.4", + "info": { + "title": "VoiceGuidance", + "description": "A module for managing voice-guidance Settings.", + "version": "0.0.0" + }, + "methods": [ + { + "name": "enabled", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:voiceguidance" + ] + } + ], + "summary": "Whether or not voice-guidance is enabled.", + "params": [], + "result": { + "name": "enabled", + "schema": { + "type": "boolean" + } + }, + "examples": [ + { + "name": "Default example #1", + "params": [], + "result": { + "name": "enabled", + "value": true + } + }, + { + "name": "Default example #2", + "params": [], + "result": { + "name": "enabled", + "value": false + } + } + ] + }, + { + "name": "speed", + "tags": [ + { + "name": "property" + }, + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:accessibility:voiceguidance" + ] + } + ], + "summary": "The speed at which voice guidance speech will be read back to the user.", + "params": [], + "result": { + "name": "speed", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/VoiceSpeed" + } + }, + "examples": [ + { + "name": "Voice guidance speed to 1", + "params": [], + "result": { + "name": "speed", + "value": 1 + } + }, + { + "name": "Voice guidance speed to 2", + "params": [], + "result": { + "name": "speed", + "value": 2 + } + } + ] + } + ], + "components": { + "schemas": {} + } } \ No newline at end of file diff --git a/src/openrpc/wifi.json b/src/openrpc/wifi.json index 1661ed2e6..165ac2361 100644 --- a/src/openrpc/wifi.json +++ b/src/openrpc/wifi.json @@ -1,351 +1,355 @@ { - "openrpc": "1.2.4", - "info": { - "title": "Wifi", - "description": "A module for providing support for Wifi.", - "version": "0.0.0" - }, - "components": { - "schemas": { - "AccessPointList": { - "title": "AccessPointList", - "type": "object", - "description": "List of scanned Wifi networks available near the device.", - "properties": { - "list": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccessPoint" - } - } - } - }, - "WifiSecurityMode": { - "title": "WifiSecurityMode", - "description": "Security Mode supported for Wifi", - "type": "string", - "enum": [ - "none", - "wep64", - "wep128", - "wpaPskTkip", - "wpaPskAes", - "wpa2PskTkip", - "wpa2PskAes", - "wpaEnterpriseTkip", - "wpaEnterpriseAes", - "wpa2EnterpriseTkip", - "wpa2EnterpriseAes", - "wpa2Psk", - "wpa2Enterprise", - "wpa3PskAes", - "wpa3Sae" - ] - }, - "WifiSignalStrength": { - "title": "WifiSignalStrength", - "description": "Strength of Wifi signal, value is negative based on RSSI specification.", - "type": "integer", - "default": -255, - "minimum": -255, - "maximum": 0 - }, - "WifiFrequency": { - "title": "WifiFrequency", - "description": "Wifi Frequency in Ghz, example 2.4Ghz and 5Ghz.", - "type": "number", - "default": 0, - "minimum": 0 - }, - "AccessPoint": { - "title": "AccessPoint", - "description": "Properties of a scanned wifi list item.", - "type": "object", - "properties": { - "ssid": { - "type": "string", - "description": "Name of the wifi." - }, - "securityMode": { - "$ref": "#/components/schemas/WifiSecurityMode" - }, - "signalStrength": { - "$ref": "#/components/schemas/WifiSignalStrength" - }, - "frequency": { - "$ref": "#/components/schemas/WifiFrequency" - } - } - }, - "WPSSecurityPin": { - "title": "WPSSecurityPin", - "description": "Security pin type for WPS(Wifi Protected Setup).", - "type": "string", - "enum": ["pushButton", "pin", "manufacturerPin"] - }, - "WifiConnectRequest": { - "title": "WifiConnectRequest", - "description": "Request object for the wifi connection.", - "type": "object", - "properties": { - "ssid": { - "schema": { - "type": "string" - } - }, - "passphrase": { - "schema": { - "type": "string" - } - }, - "securityMode": { - "schema": { - "$ref": "#/components/schemas/WifiSecurityMode" - } - }, - "timeout": { - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/Timeout" - } - } - } - } - } - }, - "methods": [ - { - "name": "scan", - "summary": "Scan available wifi networks in the location.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:wifi" - ] - } - ], - "params": [ - { - "name": "timeout", - "schema": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/Timeout" - } - } - ], - "result": { - "name": "list", - "summary": "Contains a list of wifi networks available near the device.", - "schema": { - "$ref": "#/components/schemas/AccessPointList" - } - }, - "examples": [ - { - "name": "Successful Wifi List", - "params": [ - { - "name": "timeout", - "value": 30 - } - ], - "result": { - "name": "successfulWifiResultExample", - "value": { - "list": [ - { - "ssid": "DND", - "security": "wpa2Psk", - "signalStrength": -70, - "frequency": 2.4 - }, - { - "ssid": "Fortnite", - "security": "WPA2_ENTERPRISE_AES", - "signalStrength": -70, - "frequency": 5 - }, - { - "ssid": "Guardian", - "security": "none", - "signalStrength": -70, - "frequency": 2.4 - } - ] - } - } - } - ] - }, - { - "name": "connect", - "summary": "Connect the device to the specified SSID.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:wifi" - ] - } - ], - "params": [ - { - "name": "ssid", - "schema": { - "type": "string" - }, - "description": "Name of Wifi SSID to connect for the device." - }, - { - "name": "passphrase", - "schema": { - "type": "string" - }, - "description": "Password or Passphrase for the wifi." - }, - { - "name": "security", - "schema": { - "$ref": "#/components/schemas/WifiSecurityMode" - } - } - ], - "result": { - "name": "connectedWifi", - "summary": "Successful Response after connecting to the Wifi.", - "schema": { - "$ref": "#/components/schemas/AccessPoint" - } - }, - "examples": [ - { - "name": "Connect to a wpa2Psk Wifi with password", - "params": [ - { - "name": "ssid", - "value": "DND" - }, - { - "name": "passphrase", - "value": "gargoyle" - }, - { - "name": "security", - "value": "wpa2Psk" - } - ], - "result": { - "name": "successfulWifiConnection", - "value": { - "ssid": "DND", - "security": "wpa2Psk", - "signalStrength": -70, - "frequency": 2.4 - } - } - }, - { - "name": "Connect to a WPA2 PSK Wifi with password", - "params": [ - { - "name": "ssid", - "value": "Guardian WIFI" - }, - { - "name": "passphrase", - "value": "" - }, - { - "name": "security", - "value": "none" - } - ], - "result": { - "name": "successfulWifiConnection", - "value": { - "ssid": "Guardian WIFI", - "security": "none", - "signalStrength": -70, - "frequency": 2.4 - } - } - } - ] - }, - { - "name": "disconnect", - "summary": "Disconnect the device if connected via WIFI.", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:wifi" - ] - } - ], - "params": [], - "result": { - "name": "result", - "schema": { - "const": null - } - }, - "examples": [ - { - "name": "Disconnect", - "params": [], - "result": { - "name": "defaultResult", - "value": null - } - } - ] - }, - { - "name": "wps", - "summary": "Connect to WPS", - "tags": [ - { - "name": "capabilities", - "x-uses": [ - "xrn:firebolt:capability:protocol:wifi" - ] - } - ], - "params": [ - { - "name": "security", - "schema": { - "$ref": "#/components/schemas/WPSSecurityPin" - } - } - ], - "result": { - "name": "connectedWifi", - "summary": "Successful Response after connecting to the Wifi.", - "schema": { - "$ref": "#/components/schemas/AccessPoint" - } - }, - "examples": [ - { - "name": "Connect to a WPS Wifi router", - "params": [ - { - "name": "security", - "value": "pushButton" - } - ], - "result": { - "name": "successfulWifiConnection", - "value": { - "ssid": "DND", - "security": "wpa2Psk", - "signalStrength": -70, - "frequency": 2.4 - } - } - } - ] - } - ] -} + "openrpc": "1.2.4", + "info": { + "title": "Wifi", + "description": "A module for providing support for Wifi.", + "version": "0.0.0" + }, + "components": { + "schemas": { + "AccessPointList": { + "title": "AccessPointList", + "type": "object", + "description": "List of scanned Wifi networks available near the device.", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessPoint" + } + } + } + }, + "WifiSecurityMode": { + "title": "WifiSecurityMode", + "description": "Security Mode supported for Wifi", + "type": "string", + "enum": [ + "none", + "wep64", + "wep128", + "wpaPskTkip", + "wpaPskAes", + "wpa2PskTkip", + "wpa2PskAes", + "wpaEnterpriseTkip", + "wpaEnterpriseAes", + "wpa2EnterpriseTkip", + "wpa2EnterpriseAes", + "wpa2Psk", + "wpa2Enterprise", + "wpa3PskAes", + "wpa3Sae" + ] + }, + "WifiSignalStrength": { + "title": "WifiSignalStrength", + "description": "Strength of Wifi signal, value is negative based on RSSI specification.", + "type": "integer", + "default": -255, + "minimum": -255, + "maximum": 0 + }, + "WifiFrequency": { + "title": "WifiFrequency", + "description": "Wifi Frequency in Ghz, example 2.4Ghz and 5Ghz.", + "type": "number", + "default": 0, + "minimum": 0 + }, + "AccessPoint": { + "title": "AccessPoint", + "description": "Properties of a scanned wifi list item.", + "type": "object", + "properties": { + "ssid": { + "type": "string", + "description": "Name of the wifi." + }, + "securityMode": { + "$ref": "#/components/schemas/WifiSecurityMode" + }, + "signalStrength": { + "$ref": "#/components/schemas/WifiSignalStrength" + }, + "frequency": { + "$ref": "#/components/schemas/WifiFrequency" + } + } + }, + "WPSSecurityPin": { + "title": "WPSSecurityPin", + "description": "Security pin type for WPS(Wifi Protected Setup).", + "type": "string", + "enum": [ + "pushButton", + "pin", + "manufacturerPin" + ] + }, + "WifiConnectRequest": { + "title": "WifiConnectRequest", + "description": "Request object for the wifi connection.", + "type": "object", + "properties": { + "ssid": { + "schema": { + "type": "string" + } + }, + "passphrase": { + "schema": { + "type": "string" + } + }, + "securityMode": { + "schema": { + "$ref": "#/components/schemas/WifiSecurityMode" + } + }, + "timeout": { + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/Timeout" + } + } + } + } + } + }, + "methods": [ + { + "name": "scan", + "summary": "Scan available wifi networks in the location.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:wifi" + ] + } + ], + "params": [ + { + "name": "timeout", + "schema": { + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/Timeout" + } + } + ], + "result": { + "name": "list", + "summary": "Contains a list of wifi networks available near the device.", + "schema": { + "$ref": "#/components/schemas/AccessPointList" + } + }, + "examples": [ + { + "name": "Successful Wifi List", + "params": [ + { + "name": "timeout", + "value": 30 + } + ], + "result": { + "name": "successfulWifiResultExample", + "value": { + "list": [ + { + "ssid": "DND", + "security": "wpa2Psk", + "signalStrength": -70, + "frequency": 2.4 + }, + { + "ssid": "Fortnite", + "security": "WPA2_ENTERPRISE_AES", + "signalStrength": -70, + "frequency": 5 + }, + { + "ssid": "Guardian", + "security": "none", + "signalStrength": -70, + "frequency": 2.4 + } + ] + } + } + } + ] + }, + { + "name": "connect", + "summary": "Connect the device to the specified SSID.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:wifi" + ] + } + ], + "params": [ + { + "name": "ssid", + "schema": { + "type": "string" + }, + "description": "Name of Wifi SSID to connect for the device." + }, + { + "name": "passphrase", + "schema": { + "type": "string" + }, + "description": "Password or Passphrase for the wifi." + }, + { + "name": "security", + "schema": { + "$ref": "#/components/schemas/WifiSecurityMode" + } + } + ], + "result": { + "name": "connectedWifi", + "summary": "Successful Response after connecting to the Wifi.", + "schema": { + "$ref": "#/components/schemas/AccessPoint" + } + }, + "examples": [ + { + "name": "Connect to a wpa2Psk Wifi with password", + "params": [ + { + "name": "ssid", + "value": "DND" + }, + { + "name": "passphrase", + "value": "gargoyle" + }, + { + "name": "security", + "value": "wpa2Psk" + } + ], + "result": { + "name": "successfulWifiConnection", + "value": { + "ssid": "DND", + "security": "wpa2Psk", + "signalStrength": -70, + "frequency": 2.4 + } + } + }, + { + "name": "Connect to a WPA2 PSK Wifi with password", + "params": [ + { + "name": "ssid", + "value": "Guardian WIFI" + }, + { + "name": "passphrase", + "value": "" + }, + { + "name": "security", + "value": "none" + } + ], + "result": { + "name": "successfulWifiConnection", + "value": { + "ssid": "Guardian WIFI", + "security": "none", + "signalStrength": -70, + "frequency": 2.4 + } + } + } + ] + }, + { + "name": "disconnect", + "summary": "Disconnect the device if connected via WIFI.", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:wifi" + ] + } + ], + "params": [], + "result": { + "name": "result", + "schema": { + "const": null + } + }, + "examples": [ + { + "name": "Disconnect", + "params": [], + "result": { + "name": "defaultResult", + "value": null + } + } + ] + }, + { + "name": "wps", + "summary": "Connect to WPS", + "tags": [ + { + "name": "capabilities", + "x-uses": [ + "xrn:firebolt:capability:protocol:wifi" + ] + } + ], + "params": [ + { + "name": "security", + "schema": { + "$ref": "#/components/schemas/WPSSecurityPin" + } + } + ], + "result": { + "name": "connectedWifi", + "summary": "Successful Response after connecting to the Wifi.", + "schema": { + "$ref": "#/components/schemas/AccessPoint" + } + }, + "examples": [ + { + "name": "Connect to a WPS Wifi router", + "params": [ + { + "name": "security", + "value": "pushButton" + } + ], + "result": { + "name": "successfulWifiConnection", + "value": { + "ssid": "DND", + "security": "wpa2Psk", + "signalStrength": -70, + "frequency": 2.4 + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/schemas/accessibility.json b/src/schemas/accessibility.json index ce6ad419a..3194d9b38 100644 --- a/src/schemas/accessibility.json +++ b/src/schemas/accessibility.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/accessibility", "title": "Accessibility", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/accessibility", "anyOf": [ { "$ref": "#/definitions/ClosedCaptionsStyles" @@ -13,7 +13,7 @@ "FontFamily": { "type": ["string", "null"], "enum": [ - "monospaced_serif", + "monospace_serif", "proportional_serif", "monospaced_sanserif", "proportional_sanserif", @@ -114,7 +114,7 @@ "preferredLanguages": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/ISO639_2Language" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/ISO639_2Language" } } }, @@ -122,7 +122,7 @@ { "enabled": true, "styles": { - "fontFamily": "monospaced_serif", + "fontFamily": "monospace_serif", "fontSize": 1, "fontColor": "#ffffff", "fontEdge": "none", @@ -161,7 +161,7 @@ "description": "Whether or not voice guidance should be enabled by default" }, "speed": { - "$ref": "https://meta.comcast.com/firebolt/accessibility#/definitions/VoiceSpeed", + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/accessibility#/definitions/VoiceSpeed", "description": "The speed at which voice guidance speech will be read back to the user" } }, diff --git a/src/schemas/advertising.json b/src/schemas/advertising.json index e3aca3ede..5d7fa8b54 100644 --- a/src/schemas/advertising.json +++ b/src/schemas/advertising.json @@ -1,23 +1,23 @@ { - "$id": "https://meta.comcast.com/firebolt/advertising", - "title": "Advertising", - "oneOf": [ - { - "$ref": "#/definitions/SkipRestriction" - } - ], - "definitions": { - "SkipRestriction": { - "title": "SkipRestriction", - "$comment": "xrn:advertising:policy:skipRestriction:", - "type": "string", - "enum": [ - "none", - "adsUnwatched", - "adsAll", - "all" - ], - "description": "The advertisement skip restriction.\n\nApplies to fast-forward/rewind (e.g. trick mode), seeking over an entire opportunity (e.g. jump), seeking out of what's currently playing, and \"Skip this ad...\" features. Seeking over multiple ad opportunities only requires playback of the _last_ opportunity, not all opportunities, preceding the seek destination.\n\n| Value | Description |\n|--------------|--------------------------------------------------------------------------------|\n| none |No fast-forward, jump, or skip restrictions |\n| adsUnwatched | Restrict fast-forward, jump, and skip for unwatched ad opportunities only. |\n| adsAll | Restrict fast-forward, jump, and skip for all ad opportunities |\n| all | Restrict fast-forward, jump, and skip for all ad opportunities and all content |\n\nNamespace: `xrn:advertising:policy:skipRestriction:`\n\n" + "title": "Advertising", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/advertising", + "oneOf": [ + { + "$ref": "#/definitions/SkipRestriction" + } + ], + "definitions": { + "SkipRestriction": { + "title": "SkipRestriction", + "$comment": "xrn:advertising:policy:skipRestriction:", + "type": "string", + "enum": [ + "none", + "adsUnwatched", + "adsAll", + "all" + ], + "description": "The advertisement skip restriction.\n\nApplies to fast-forward/rewind (e.g. trick mode), seeking over an entire opportunity (e.g. jump), seeking out of what's currently playing, and \"Skip this ad...\" features. Seeking over multiple ad opportunities only requires playback of the _last_ opportunity, not all opportunities, preceding the seek destination.\n\n| Value | Description |\n|--------------|--------------------------------------------------------------------------------|\n| none |No fast-forward, jump, or skip restrictions |\n| adsUnwatched | Restrict fast-forward, jump, and skip for unwatched ad opportunities only. |\n| adsAll | Restrict fast-forward, jump, and skip for all ad opportunities |\n| all | Restrict fast-forward, jump, and skip for all ad opportunities and all content |\n\nNamespace: `xrn:advertising:policy:skipRestriction:`\n\n" + } } } -} \ No newline at end of file diff --git a/src/schemas/capabilities.json b/src/schemas/capabilities.json index 3ed851624..91617c777 100644 --- a/src/schemas/capabilities.json +++ b/src/schemas/capabilities.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/capabilities", "title": "Capabilities", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/capabilities", "oneOf": [ { "$ref": "#/definitions/Capability" @@ -202,9 +202,10 @@ } }, "GrantKey": { + "title": "GrantKey", "allOf": [ { - "$ref": "https://meta.comcast.com/firebolt/capabilities#/definitions/Capability" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/capabilities#/definitions/Capability" }, { "type": "string", diff --git a/src/schemas/discovery.json b/src/schemas/discovery.json index 1c13435a7..beb249c92 100644 --- a/src/schemas/discovery.json +++ b/src/schemas/discovery.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/discovery", "title": "Discovery", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/discovery", "anyOf": [ { "$ref": "#/definitions/PurchasedContentResult" @@ -22,7 +22,7 @@ "entries": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" } } }, @@ -43,12 +43,12 @@ "format": "date-time" }, "entity": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" }, "related": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/EntityInfo" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/EntityInfo" } } }, diff --git a/src/schemas/entertainment.json b/src/schemas/entertainment.json index 8f94854e8..1ec0d85b2 100644 --- a/src/schemas/entertainment.json +++ b/src/schemas/entertainment.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/entertainment", "title": "Entertainment", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/entertainment", "anyOf": [ { "$ref": "#/definitions/ProgramType" @@ -99,10 +99,10 @@ "description": "The type of the entity, e.g. `program` or `music`." }, "programType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/ProgramType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/ProgramType" }, "musicType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/MusicType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/MusicType" }, "synopsis": { "type": "string", @@ -209,7 +209,7 @@ "description": "Time when the entity is no longer entitled." }, "offeringType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/OfferingType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/OfferingType" }, "hasAds": { "type": "boolean", @@ -234,7 +234,7 @@ "audioProfile": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/AudioProfile" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/types#/definitions/AudioProfile" }, "description": "List of the audio types available via the WayToWatch." }, diff --git a/src/schemas/entity.json b/src/schemas/entity.json index 2e486e865..afd76bac7 100644 --- a/src/schemas/entity.json +++ b/src/schemas/entity.json @@ -1,5 +1,5 @@ { - "$id": "https://meta.comcast.com/firebolt/entity", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/entity", "title": "Entity", "oneOf": [ { @@ -48,7 +48,7 @@ "waysToWatch": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/WayToWatch" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/WayToWatch" }, "description": "An array of ways a user is might watch this entity, regardless of entitlements." } @@ -112,7 +112,7 @@ "const": "music" }, "musicType": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/MusicType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/MusicType" }, "entityId": { "type": "string" @@ -446,7 +446,7 @@ "contentRatings": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/ContentRating" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/ContentRating" }, "description": "A list of ContentRating objects, describing the entity's ratings in various rating schemes." } diff --git a/src/schemas/errors.json b/src/schemas/errors.json index c8116a53f..f826bd4f3 100644 --- a/src/schemas/errors.json +++ b/src/schemas/errors.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/errors", "title": "Errors", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/errors", "oneOf": [ { "$ref": "#/definitions/FireboltError" }, { "$ref": "#/definitions/UserNotAuthenticatedError" } diff --git a/src/schemas/intents.json b/src/schemas/intents.json index 8f5a86c38..06c93044c 100644 --- a/src/schemas/intents.json +++ b/src/schemas/intents.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/intents", "title": "Intents", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/intents", "oneOf": [ { "$ref": "#/definitions/AppIntentMessage" @@ -421,7 +421,7 @@ "const": "entity" }, "data": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/Entity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/Entity" } } } @@ -495,7 +495,7 @@ "additionalProperties": false, "properties": { "entity": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/ChannelEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/ChannelEntity" }, "options": { "description": "The options property of the data property MUST have only one of the following fields.", @@ -564,7 +564,7 @@ "const": "playback" }, "data": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/PlayableEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/PlayableEntity" } } } @@ -695,7 +695,7 @@ "type": "object", "properties": { "entity": { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/PlayableEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/PlayableEntity" }, "options": { "type": "object", @@ -821,13 +821,13 @@ "programTypes": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/ProgramType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/ProgramType" } }, "musicTypes": { "type": "array", "items": { - "$ref": "https://meta.comcast.com/firebolt/entertainment#/definitions/MusicType" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entertainment#/definitions/MusicType" } } }, @@ -1034,19 +1034,19 @@ "entity": { "anyOf": [ { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/MovieEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/MovieEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVEpisodeEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVEpisodeEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVSeriesEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVSeriesEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVSeasonEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVSeasonEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/AdditionalEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/AdditionalEntity" } ] }, @@ -1061,19 +1061,19 @@ "entity": { "anyOf": [ { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/MovieEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/MovieEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVEpisodeEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVEpisodeEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVSeriesEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVSeriesEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/TVSeasonEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/TVSeasonEntity" }, { - "$ref": "https://meta.comcast.com/firebolt/entity#/definitions/AdditionalEntity" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/entity#/definitions/AdditionalEntity" } ] } @@ -2320,7 +2320,7 @@ "const": true }, "language": { - "$ref": "https://meta.comcast.com/firebolt/localization#/definitions/ISO639_2Language" + "$ref": "https://meta.rdkcentral.com/firebolt/schemas/localization#/definitions/ISO639_2Language" } }, "if": { @@ -2537,7 +2537,6 @@ } ] }, - "Identifier": { "type": "string" }, diff --git a/src/schemas/lifecycle.json b/src/schemas/lifecycle.json index 906cf41ea..7613d5286 100644 --- a/src/schemas/lifecycle.json +++ b/src/schemas/lifecycle.json @@ -1,38 +1,59 @@ { - "$id": "https://meta.comcast.com/firebolt/lifecycle", - "title": "Lifecycle", - "oneOf": [ - { - "$ref": "#/definitions/LifecycleState" - }, - { - "$ref": "#/definitions/CloseReason" + "title": "Lifecycle", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/lifecycle", + "oneOf": [ + { + "$ref": "#/definitions/LifecycleState" + }, + { + "$ref": "#/definitions/CloseReason" + } + ], + "definitions": { + "LifecycleState": { + "title": "LifecycleState", + "description": "The application lifecycle state", + "type": "string", + "enum": [ + "initializing", + "inactive", + "foreground", + "background", + "unloading", + "suspended" + ] + }, + "CloseReason": { + "title": "CloseReason", + "description": "The application close reason", + "type": "string", + "enum": [ + "remoteButton", + "userExit", + "done", + "error" + ] + }, + "CreateParameters": { + "title": "CreateParameters", + "description": "A an object describing the initialization parameters passed to an app during the create method.", + "type": "object", + "required": [ + "preload" + ], + "properties": { + "preload": { + "type": "boolean" + }, + "preloadReason": { + "type": "string", + "enum": [ + "boot", + "restart", + "user" + ] + } + } + } } - ], - "definitions": { - "LifecycleState": { - "title": "LifecycleState", - "description": "The application lifecycle state", - "type": "string", - "enum": [ - "initializing", - "inactive", - "foreground", - "background", - "unloading", - "suspended" - ] - }, - "CloseReason": { - "title": "CloseReason", - "description": "The application close reason", - "type": "string", - "enum": [ - "remoteButton", - "userExit", - "done", - "error" - ] - } - } -} + } \ No newline at end of file diff --git a/src/schemas/localization.json b/src/schemas/localization.json index 1bc606672..0e6d17471 100644 --- a/src/schemas/localization.json +++ b/src/schemas/localization.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/localization", "title": "Localization", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/localization", "oneOf": [ { "$ref": "#/definitions/Locality" diff --git a/src/schemas/secondscreen.json b/src/schemas/secondscreen.json index 03ce1593b..9a44c6824 100644 --- a/src/schemas/secondscreen.json +++ b/src/schemas/secondscreen.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/secondscreen", "title": "SecondScreen", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/secondscreen", "anyOf": [ { "$ref": "#/definitions/SecondScreenEvent" } ], diff --git a/src/schemas/types.json b/src/schemas/types.json index 0caa49c1f..985766b7d 100644 --- a/src/schemas/types.json +++ b/src/schemas/types.json @@ -1,6 +1,6 @@ { - "$id": "https://meta.comcast.com/firebolt/types", "title": "Types", + "$id": "https://meta.rdkcentral.com/firebolt/schemas/types", "definitions": { "SemanticVersion": { "title": "SemanticVersion", diff --git a/src/sdks/core/package.json b/src/sdks/core/package.json index 13c9535b3..d7abe747f 100644 --- a/src/sdks/core/package.json +++ b/src/sdks/core/package.json @@ -1,6 +1,6 @@ { "name": "@firebolt-js/sdk", - "version": "1.2.0-next.4", + "version": "2.0.0-next.4", "description": "The Firebolt JS SDK", "main": "./dist/lib/firebolt.mjs", "types": "./dist/lib/firebolt.d.ts", @@ -9,19 +9,21 @@ }, "type": "module", "scripts": { - "validate": "npx firebolt-openrpc validate --input ./dist/firebolt-core-open-rpc.json", - "sdk": "npx firebolt-openrpc sdk --input ./dist/firebolt-core-open-rpc.json --template ./src/js --output ./build/javascript/src --static-module Platform", - "native": "npx firebolt-openrpc sdk --input ./dist/firebolt-core-open-rpc.json --template ./src/cpp --output ./build/c/src --static-module Platform --language ../../../node_modules/@firebolt-js/openrpc/languages/c", + "validate": "npx firebolt-openrpc validate --input ./dist/firebolt-open-rpc.json", + "sdk": "npx firebolt-openrpc sdk --server ./dist/firebolt-open-rpc.json --client ./dist/firebolt-app-open-rpc.json --template ./src/js --output ./build/javascript/src", + "native": "npx firebolt-openrpc sdk --server ./dist/firebolt-open-rpc.json --client ./dist/firebolt-app-open-rpc.json --template ./src/cpp --output ./build/c/src --static-module Platform --language ../../../node_modules/@firebolt-js/openrpc/languages/cpp", + "compile": "cd ../../.. && npm run compile", "cpp": "npm run cpp:compile && npm run cpp:install", "cpp:compile": "npx firebolt-openrpc sdk --input ./dist/firebolt-core-open-rpc.json --template ./src/cpp --output ./build/cpp/src --static-module Platform --language ../../../node_modules/@firebolt-js/openrpc/languages/cpp", "cpp:install": "./build/cpp/src/scripts/install.sh -i ./build/cpp/src -s ./build/cpp/src/ -m core", - "compile": "cd ../../.. && npm run compile", - "slice": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-core-open-rpc.json", - "docs": "npx firebolt-openrpc docs --input ./dist/firebolt-core-open-rpc.json --output build/docs/markdown --as-path", - "wiki": "npx firebolt-openrpc docs --input ./dist/firebolt-core-open-rpc.json --output build/docs/markdown", + "slice": "npm run slice:server&& npm run slice:client", + "slice:server": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-open-rpc.json", + "slice:client": "npx firebolt-openrpc slice -i ../../../dist/firebolt-app-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-app-open-rpc.json", + "docs": "npx firebolt-openrpc docs --server ./dist/firebolt-open-rpc.json --client ./dist/firebolt-app-open-rpc.json --output build/docs/markdown --as-path", + "wiki": "npx firebolt-openrpc docs --server ./dist/firebolt-open-rpc.json --client ./dist/firebolt-app-open-rpc.json --output build/docs/markdown", "dist:notest": "npm run clean && npm run slice && npm run validate && npm run sdk && npm run docs && npm run prettier && npm run dist:copy && echo 'Firebolt Core SDK /dist/ is ready.\n'", "dist:copy": "npm run dist:copy:sdk && npm run dist:copy:docs", - "dist:copy:sdk": "mkdirp ./dist && cp -R build/javascript/src dist/lib && cp ./dist/firebolt-core-open-rpc.json ../../../dist/firebolt-core-open-rpc.json", + "dist:copy:sdk": "mkdirp ./dist && cp -R build/javascript/src dist/lib && cp ./dist/firebolt-open-rpc.json ../../../dist/firebolt-core-open-rpc.json && cp ./dist/firebolt-app-open-rpc.json ../../../dist/firebolt-core-app-open-rpc.json", "dist:copy:docs": "mkdirp ./dist && cp -R build/docs/markdown dist/docs", "dist": "npm run dist:notest && npm run test", "clean": "rm -rf ./build && rm -rf ./dist", diff --git a/src/sdks/core/sdk.config.json b/src/sdks/core/sdk.config.json index 14ba4d55c..f96b652da 100644 --- a/src/sdks/core/sdk.config.json +++ b/src/sdks/core/sdk.config.json @@ -88,10 +88,41 @@ { "module": "Lifecycle", "use": [ - "xrn:firebolt:capability:lifecycle:ready", - "xrn:firebolt:capability:lifecycle:state" + "xrn:firebolt:capability:lifecycle:state", + "xrn:firebolt:capability:lifecycle:application", + "xrn:firebolt:capability:lifecycle:activatable", + "xrn:firebolt:capability:lifecycle:sleepable" + ], + "provide": [ + "xrn:firebolt:capability:lifecycle:application", + "xrn:firebolt:capability:lifecycle:activatable", + "xrn:firebolt:capability:lifecycle:sleepable" ] }, + { + "module": "Application", + "provide": [ + "xrn:firebolt:capability:lifecycle:application" + ] + }, + { + "module": "Activatable", + "provide": [ + "xrn:firebolt:capability:lifecycle:activatable" + ] + }, + { + "module": "Sleepable", + "provide": [ + "xrn:firebolt:capability:lifecycle:sleepable" + ] + }, + { + "module": "Interest", + "provide": [ + "xrn:firebolt:capability:discovery:interest" + ] + }, { "module": "Localization", "use": [ diff --git a/src/sdks/core/src/js/sdk/Device/index.mjs b/src/sdks/core/src/js/sdk/Device/index.mjs index 86f9fb39a..ed129a42c 100644 --- a/src/sdks/core/src/js/sdk/Device/index.mjs +++ b/src/sdks/core/src/js/sdk/Device/index.mjs @@ -22,7 +22,7 @@ function version() { return new Promise( (resolve, reject) => { - Transport.send('device', 'version').then( v => { + Gateway.request('Device.version').then( v => { v = v || {} v.sdk = v.sdk || {} v.sdk.major = parseInt('${major}') @@ -41,7 +41,7 @@ function version() { export default { /* ${EVENTS_ENUM} */ - /* ${ENUMS} */ + /* ${ENUM_IMPLEMENTATIONS} */ version, /* ${METHOD_LIST} */ diff --git a/src/sdks/core/src/js/sdk/Lifecycle/defaults.mjs b/src/sdks/core/src/js/sdk/Lifecycle/defaults.mjs index 324d4267a..cf3000428 100644 --- a/src/sdks/core/src/js/sdk/Lifecycle/defaults.mjs +++ b/src/sdks/core/src/js/sdk/Lifecycle/defaults.mjs @@ -18,12 +18,6 @@ import MockTransport from '../Transport/MockTransport.mjs' -let inactive = 0 /* ${EXAMPLE:onInactive} */ -let foreground = 0 /* ${EXAMPLE:onForeground} */ -let background = 0 /* ${EXAMPLE:onBackground} */ -let suspended = 0 /* ${EXAMPLE:onSuspended} */ -let unloading = 0 /* ${EXAMPLE:onUnloading} */ - const emit = (value) => { MockTransport.event('Lifecycle', value.state, value) } @@ -32,24 +26,22 @@ const win = typeof window !== 'undefined' ? window : {} const automation = win.__firebolt ? !!win.__firebolt.automation : false export default { - ready: function() { - inactive.previous = 'initializing' - setTimeout(() => emit(inactive), automation ? 1 : 500) - foreground.previous = 'inactive' - setTimeout(() => emit(foreground), automation ? 2 : 1000) + provideApplication: async function() { + await MockTransport.request('Application.create', { params: { preload: false }}) + await MockTransport.request('Activatable.activate', { intent: { action: "launch" }}) }, close: function(params) { let reason = params.reason if (reason === 'remoteButton') { - inactive.previous = 'foreground' - setTimeout(() => emit(inactive), automation ? 1 : 500) +// inactive.previous = 'foreground' +// setTimeout(() => emit(inactive), automation ? 1 : 500) } else if (['userExit', 'error'].includes(reason)) { - inactive.previous = 'foreground' - unloading.previous = 'inactive' - setTimeout(() => emit(inactive), automation ? 1 : 500) - setTimeout(() => emit(unloading), automation ? 2 : 1000) + // inactive.previous = 'foreground' + // unloading.previous = 'inactive' + // setTimeout(() => emit(inactive), automation ? 1 : 500) + // setTimeout(() => emit(unloading), automation ? 2 : 1000) } else { throw "Invalid close reason" diff --git a/src/sdks/core/src/js/sdk/Lifecycle/index.mjs b/src/sdks/core/src/js/sdk/Lifecycle/index.mjs index e0184ff91..ee8526c60 100644 --- a/src/sdks/core/src/js/sdk/Lifecycle/index.mjs +++ b/src/sdks/core/src/js/sdk/Lifecycle/index.mjs @@ -60,7 +60,7 @@ export default { /* ${EVENTS_ENUM} */ - /* ${ENUMS} */ + /* ${ENUM_IMPLEMENTATIONS} */ ready, state, diff --git a/src/sdks/core/src/js/sdk/Metrics/index.mjs b/src/sdks/core/src/js/sdk/Metrics/index.mjs index 630914358..86499a2da 100644 --- a/src/sdks/core/src/js/sdk/Metrics/index.mjs +++ b/src/sdks/core/src/js/sdk/Metrics/index.mjs @@ -21,15 +21,15 @@ /* ${INITIALIZATION} */ function ready() { - return Transport.send('metrics', 'ready', {}) + return Gateway.request('Metrics.ready', {}) } function signIn() { - return Transport.send('metrics', 'signIn', {}) + return Gateway.request('Metrics.signIn', {}) } function signOut() { - return Transport.send('metrics', 'signOut', {}) + return Gateway.request('Metrics.signOut', {}) } @@ -38,7 +38,7 @@ function signOut() { export default { /* ${EVENTS_ENUM} */ - /* ${ENUMS} */ + /* ${ENUM_IMPLEMENTATIONS} */ /* ${METHOD_LIST} */ } diff --git a/src/sdks/core/test/suite/declarations.test.ts b/src/sdks/core/test/suite/declarations.test.ts index 8ec319eeb..af93acbe4 100644 --- a/src/sdks/core/test/suite/declarations.test.ts +++ b/src/sdks/core/test/suite/declarations.test.ts @@ -2,16 +2,16 @@ import Setup from "../../../../../test/Setup" import { sent } from "../../../../../test/Setup" import { test, expect } from "@jest/globals" -import { Lifecycle, Device, Discovery } from "../../build/javascript/src/firebolt"; +import { Lifecycle, Device, Discovery, Entertainment } from "../../build/javascript/src/firebolt"; let listenerId:number -test('Able to get TypeScript listenerId', () => { - return Lifecycle.listen('inactive', () => {}).then((id:number) => { - listenerId = id - expect(listenerId > 0).toBe(true) - }) -}) +// test('Able to get TypeScript listenerId', () => { +// return Lifecycle.listen('inactive', () => {}).then((id:number) => { +// listenerId = id +// expect(listenerId > 0).toBe(true) +// }) +// }) test('Able to get resolution', () => { return Device.screenResolution().then( (res:[number, number]) => { @@ -39,7 +39,7 @@ const result: Discovery.EntityInfoResult = { "identifiers": { "entityId": "123" }, - "programType": Discovery.ProgramType.MOVIE, + "programType": Entertainment.ProgramType.MOVIE, "title": "A title" }, "expires": "" @@ -67,7 +67,7 @@ test('entityInfo pull', () => { return Promise.resolve(result) }) - Setup.emit('discovery', 'pullEntityInfo', { + Setup.emit('Discovery', 'pullEntityInfo', { correlationId: '123', parameters: { entityId: '123' diff --git a/src/sdks/core/test/suite/device.test.ts b/src/sdks/core/test/suite/device.test.ts index 7f9601cac..84ddfd537 100644 --- a/src/sdks/core/test/suite/device.test.ts +++ b/src/sdks/core/test/suite/device.test.ts @@ -17,33 +17,33 @@ */ import { test, expect } from "@jest/globals"; -import { Device } from "../../build/javascript/src/firebolt"; +import { Device, Types } from "../../build/javascript/src/firebolt"; test("Device.version()", () => { const debug: string = "Non-parsable build info for error logging only." - const os:Device.SemanticVersion = { + const os:Types.SemanticVersion = { major: 0, minor: 1, patch: 0, readable: "Firebolt OS v0.1.0" } - const sdk:Device.SemanticVersion = { + const sdk:Types.SemanticVersion = { major: 0, minor: 8, patch: 0, readable: "The Firebolt JS SDK", } - const firmware:Device.SemanticVersion = { + const firmware:Types.SemanticVersion = { major: 1, minor: 2, patch: 3, readable: "Device Firmware v1.2.3" } - const api:Device.SemanticVersion = { + const api:Types.SemanticVersion = { major: 0, minor: 8, patch: 0, @@ -112,17 +112,17 @@ test("Device.make()", () => { }); test("Device.hdcp()", () => { - const expectedOutput: Device.BooleanMap = { + const expectedOutput: Types.BooleanMap = { "hdcp1.4": true, "hdcp2.2": true, }; - return Device.hdcp().then((res: Device.BooleanMap) => { + return Device.hdcp().then((res: Types.BooleanMap) => { expect(res).toEqual(expectedOutput); }); }); test("Device.hdcp(subscriber)", () => { - return Device.hdcp((supportedHdrProfiles: Device.BooleanMap) => {}).then( + return Device.hdcp((supportedHdrProfiles: Types.BooleanMap) => {}).then( (res: number) => { expect(res > 0).toBe(true); } diff --git a/src/sdks/core/test/suite/discovery.test.ts b/src/sdks/core/test/suite/discovery.test.ts index 7402dce42..1ab56a01d 100644 --- a/src/sdks/core/test/suite/discovery.test.ts +++ b/src/sdks/core/test/suite/discovery.test.ts @@ -17,7 +17,7 @@ */ import { test, expect } from "@jest/globals"; -import { Discovery } from "../../build/javascript/src/firebolt"; +import { Discovery, Entertainment, Entity } from "../../build/javascript/src/firebolt"; test("watched(entityId)", () => { return Discovery.watched("abc").then((success: boolean) => { @@ -50,7 +50,7 @@ test("entityInfo(EntityInfoResult)", () => { }, title: "Test", entityType: "program", - programType: Discovery.ProgramType.MOVIE, + programType: Entertainment.ProgramType.MOVIE, }, }; return Discovery.entityInfo(dummyData).then((res: boolean) => { @@ -65,7 +65,7 @@ test("watchNext(title?: LocalizedString, identifiers: ContentIdentifiers, expire }); test("entitlements(entitlements: Entitlement[])", () => { - const dummyData: Array = [ + const dummyData: Array = [ { entitlementId: "test123", startTime: `${new Date().getTime()}`, @@ -84,7 +84,7 @@ test("launch(appId)", () => { }); test("signIn(appId)", () => { - const dummyData: Array = [ + const dummyData: Array = [ { entitlementId: "test123", startTime: `${new Date().getTime()}`, @@ -113,7 +113,7 @@ test("purchasedContent()", () => { }, title: "TEST", entityType: "program", - programType: Discovery.ProgramType.MOVIE, + programType: Entertainment.ProgramType.MOVIE, }, ], }; @@ -153,9 +153,9 @@ test("clear()", () => { test("details() provider", () => { - class myUserInterestProvider implements Discovery.UserInterestProvider { - userInterest(parameters?: object, session?: Discovery.ProviderSession): Promise { - return null + class myUserInterestProvider implements Discovery.Interest { + userInterest(type: Discovery.InterestType, reason: Discovery.InterestReason): Promise { + return Promise.resolve(null) } } -}) \ No newline at end of file +}) diff --git a/src/sdks/core/test/suite/federation.test.ts b/src/sdks/core/test/suite/federation.test.ts index 6e8dab8e1..41bf84968 100644 --- a/src/sdks/core/test/suite/federation.test.ts +++ b/src/sdks/core/test/suite/federation.test.ts @@ -20,7 +20,7 @@ // setup for Firebolt SDK/TL handshake import { test, expect, beforeAll } from "@jest/globals"; -import { Lifecycle, Discovery } from '../../build/javascript/src/firebolt' +import { Lifecycle, Discovery, Entertainment, Types } from '../../build/javascript/src/firebolt' // holds test transport layer state, e.g. callback @@ -41,8 +41,8 @@ beforeAll(() => { return new Promise( (resolve, reject) => { const transport = { send: function(message: string) { - sendCalled = true const json = JSON.parse(message) + sendCalled = true if (json.method.toLowerCase() === 'discovery.onpullentityinfo') { // we'll assert on this later... pullEntityInfoListenCount++ @@ -54,7 +54,7 @@ beforeAll(() => { id: json.id, result: { listening: true, - event: 'discovery.onPullEntityInfo' + event: 'Discovery.onPullEntityInfo' } } // catching errors, so all tests don't fail if this breaks @@ -71,11 +71,13 @@ beforeAll(() => { try { response = { jsonrpc: '2.0', - id: json.id, - result: { - correlationId: correlationId, - parameters: { - entityId: "345" + method: 'Discovery.pullEntityInfo', + params: { + value: { + correlationId: correlationId, + parameters: { + entityId: "345" + } } } } @@ -84,11 +86,13 @@ beforeAll(() => { state.callback(JSON.stringify({ jsonrpc: '2.0', - id: json.id, - result: { - correlationId: 'this-will-fail', - parameters: { - entityId: "this-will-fail" + method: 'Discovery.pullEntityInfo', + params: { + value: { + correlationId: 'this-will-fail', + parameters: { + entityId: "this-will-fail" + } } } })) @@ -111,11 +115,14 @@ beforeAll(() => { else if (!json.params.correlationId && json.params.result.entity.identifiers.entityId === "PUSH:345") { entityInfoPushed = true } - state.callback(JSON.stringify({ - jsonrpc: '2.0', - id: json.id, - result: true - })) + + setTimeout(() => { + state.callback(JSON.stringify({ + jsonrpc: '2.0', + id: json.id, + result: true + })) + }, 100) } }, receive: function(callback: (a:string) => void) { @@ -125,7 +132,7 @@ beforeAll(() => { } const win:any = window; - win.__firebolt.setTransportLayer(transport) + win.__firebolt.transport = transport const result:Discovery.EntityInfoResult = { "expires": "2025-01-01T00:00:00.000Z", @@ -134,7 +141,7 @@ beforeAll(() => { "entityId": "PUSH:345" }, "entityType": "program", - "programType": Discovery.ProgramType.MOVIE, + "programType": Entertainment.ProgramType.MOVIE, "title": "Cool Runnings", "synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.", "releaseDate": "1993-01-01T00:00:00.000Z", @@ -156,9 +163,9 @@ beforeAll(() => { "expires": "2025-01-01T00:00:00.000Z", "entitled": true, "entitledExpires": "2025-01-01T00:00:00.000Z", - "offeringType": Discovery.OfferingType.BUY, + "offeringType": Entertainment.OfferingType.BUY, "price": 2.99, - "audioProfile": [Discovery.AudioProfile.DOLBY_ATMOS], + "audioProfile": [Types.AudioProfile.DOLBY_ATMOS], "videoQuality": ["UHD"], "audioLanguages": [ "en" @@ -180,6 +187,8 @@ beforeAll(() => { // Setup a callback that returns the correct payload Discovery.entityInfo((parameters:Discovery.EntityInfoParameters) => { + console.dir(parameters) + if (parameters.entityId === 'this-will-fail') { throw "Intentional Test failure" } @@ -196,7 +205,7 @@ beforeAll(() => { // secondRegistrationFailed = true // }) - Lifecycle.ready() + //Lifecycle.ready() }) }) @@ -209,6 +218,7 @@ test('Transport was sent each listener only once', () => { }); test('Entity Info was pulled from the app', ()=> { + expect(callbackWiredUp).toBe(true) expect(entityInfoPulled).toBe(true) expect(entityInfoReceived).toBe(true) }); diff --git a/src/sdks/core/test/suite/lazy-transport.test.ts b/src/sdks/core/test/suite/lazy-transport.test.ts index ebfb739fe..04551a741 100644 --- a/src/sdks/core/test/suite/lazy-transport.test.ts +++ b/src/sdks/core/test/suite/lazy-transport.test.ts @@ -20,13 +20,45 @@ // setup for Firebolt SDK/TL handshake const win = globalThis || window +let _queue = [] +let _callback:Function +let target + +const queue = { + + send: function(json) { + if (target) { + target.send(json) + } + else { + _queue.push(json) + } + }, + + receive: function (callback) { + _callback = callback + }, + + flush: function (transport:any) { + target = transport + transport.receive(_callback) + _queue.forEach(item => transport.send(item)) + _queue = null + } +} + +// set up a queue to hold all Firebolt messages +win.__firebolt.transport = queue + import Setup from '../../../../../test/Setup' +import { DefaultApplication } from '../../../../../test/Setup' + import { beforeAll, test, expect } from '@jest/globals'; -import { Lifecycle, Discovery } from "../../build/javascript/src/firebolt"; +import { Lifecycle, Discovery } from "../../build/javascript/src/firebolt"; // holds test transport layer state, e.g. callback type stateType = { - callback: (arg0: string) => void | null + callback: (arg0: any) => void | null } const state:stateType = { @@ -39,11 +71,10 @@ let callbackWiredUp = false let sendCalled = false const transport = { - send: function(message) { - sendCalled = true + send: function(message: string) { const json = JSON.parse(message) - console.log('transport.send: ' + json.method) - if (json.method.toLowerCase() === 'lifecycle.ready') { + sendCalled = true + if (json.method === 'Lifecycle.provideApplication') { // we'll assert on this later... navigateToListenCount++ if (state.callback) { @@ -52,7 +83,7 @@ const transport = { let response = { jsonrpc: '2.0', id: json.id, - result: true + result: null } // catching errors, so all tests don't fail if this breaks try { @@ -64,12 +95,11 @@ const transport = { } } } - else if (json.method.toLowerCase() === 'discovery.onpullentityinfo') { + else if (json.method === 'Discovery.onPullEntityInfo') { pullEntityInfoListenCount++ } }, receive: function(callback) { - console.log('transport.receive') // store the callback state.callback = callback } @@ -90,9 +120,9 @@ beforeAll(()=> { }, 4000) }) - Lifecycle.ready() + Lifecycle.provideApplication(new DefaultApplication()) - win.__firebolt.setTransportLayer(transport) + queue.flush(transport) return p }) diff --git a/src/sdks/core/test/suite/lifecycle.test.ts b/src/sdks/core/test/suite/lifecycle.test.ts index 00d777575..0c5617a10 100644 --- a/src/sdks/core/test/suite/lifecycle.test.ts +++ b/src/sdks/core/test/suite/lifecycle.test.ts @@ -18,7 +18,7 @@ import { jest, test, expect, beforeAll } from "@jest/globals"; import { testHarness } from "../../../../../test/Setup"; -import { Lifecycle } from "../../build/javascript/src/firebolt"; +import { Lifecycle, Intents, Settings } from "../../build/javascript/src/firebolt"; let readyResolved: boolean = false; let readyCalled: boolean = false; @@ -26,9 +26,9 @@ let readyMetricCalled: boolean = false; let readyMetricCalledAfterResolve: boolean = false; testHarness.onSend = function (module: string, method: string) { - if (module === "lifecycle" && method === "ready") { + if (module === "Lifecycle" && method === "ready") { readyCalled = true; - } else if (module === "metrics" && method === "ready") { + } else if (module === "Metrics" && method === "ready") { readyMetricCalled = true; if (readyResolved) { @@ -38,125 +38,51 @@ testHarness.onSend = function (module: string, method: string) { }; const callback = jest.fn(); -const startupState: Lifecycle.LifecycleState = Lifecycle.state(); -beforeAll(() => { - Lifecycle.listen((event: string, _) => { - callback(event); - }); - - Lifecycle.once("foreground", () => { - Lifecycle.close(Lifecycle.CloseReason.USER_EXIT); - }); - - Lifecycle.once("unloading", () => { - Lifecycle.finished(); - }); - - let p = new Promise((resolve, reject) => { - Lifecycle.once("unloading", (_) => { - resolve(); - }); - }); - - Lifecycle.ready().then((_) => { - readyResolved = true; - }); - - return p; -}); - -test("Lifecycle.ready Promise resolved", () => { - expect(readyCalled).toBe(true); - expect(readyResolved).toBe(true); -}); - -test("Lifecycle.ready calls Metrics.ready", () => { - expect(readyMetricCalled).toBe(true); - expect(readyMetricCalledAfterResolve).toBe(true); -}); - -test('App starts up in the "initializing" state', () => { - expect(startupState).toBe("initializing"); -}); - -test('App moves to the "inactive" state next', () => { - expect(callback).nthCalledWith(1, "inactive"); -}); - -test('App moves to the "foreground" state next', () => { - expect(callback).nthCalledWith(2, "foreground"); -}); - -test('App moves to the "inactive" state next', () => { - expect(callback).nthCalledWith(3, "inactive"); -}); +let created, activated -test('App moves to the "unloading" state next', () => { - expect(callback).nthCalledWith(4, "unloading"); -}); +beforeAll(() => { + Settings.setLogLevel('DEBUG') -test("listen() background event.", () => { - return Lifecycle.listen("background", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + class App implements Lifecycle.Application, Lifecycle.Activatable { + create(params: Lifecycle.CreateParameters): Promise { + created = true + return Promise.resolve(null) + } -test("once() background event.", () => { - return Lifecycle.once("background", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + suspend(): Promise { + return Promise.resolve(null) + } -test("listen() foreground event.", () => { - return Lifecycle.listen("foreground", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + resume(): Promise { + return Promise.resolve(null) + } -test("once() foreground event.", () => { - return Lifecycle.once("foreground", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + destroy(): Promise { + return Promise.resolve(null) + } -test("listen() inactive event.", () => { - return Lifecycle.listen("inactive", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + activate(intent: Intents.NavigationIntent): Promise { + activated = true + return Promise.resolve(null) + } -test("once() inactive event.", () => { - return Lifecycle.once("inactive", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + deactivate(): Promise { + return Promise.resolve(null) + } -test("listen() suspended event.", () => { - return Lifecycle.listen("suspended", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + } -test("once() suspended event.", () => { - return Lifecycle.once("suspended", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); -}); + const app = new App() + Lifecycle.provideApplication(app) + Lifecycle.provideActivatable(app) +}) -test("listen() unloading event.", () => { - return Lifecycle.listen("unloading", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); +test('App moves to the "running" state next', () => { + expect(created).toBe(true) }); -test("once() unloading event.", () => { - return Lifecycle.once("unloading", () => {}).then((res: number) => { - expect(res > 0).toBe(true); - }); +test('App moves to the "active" state next', () => { + expect(activated).toBe(true) }); -test("clear()", () => { - const result: boolean = Lifecycle.clear(-1000); - expect(result).toBeFalsy(); -}); diff --git a/src/sdks/core/test/suite/listeners-transport.test.ts b/src/sdks/core/test/suite/listeners-transport.test.ts index bec4db1b7..3cfbc8d63 100644 --- a/src/sdks/core/test/suite/listeners-transport.test.ts +++ b/src/sdks/core/test/suite/listeners-transport.test.ts @@ -18,32 +18,59 @@ const win = globalThis || window; -import { test, expect } from "@jest/globals"; -import { Lifecycle, Discovery } from "../../build/javascript/src/firebolt"; +import { test, expect, beforeAll } from "@jest/globals"; +import { Settings, Lifecycle, Discovery, Intents } from "../../build/javascript/src/firebolt"; // holds test transport layer state, e.g. callback const state = { callback: Function, }; +let transportAlreadyExisted = false; let navigateToListenCount: number = 0; let callbackWiredUp: boolean = false; let sendCalled: boolean = false; -const transport = { - send: function (message: string) { - sendCalled = true; - const json = JSON.parse(message); - if (json.method.toLowerCase() === "discovery.onnavigateto") { - // we'll assert on this later... - navigateToListenCount++; - if (state.callback) { +beforeAll( async () => { + Settings.setLogLevel('DEBUG') + const transport = { + send: function (message: string) { + const json = JSON.parse(message) + console.dir(json) + sendCalled = true; + if (json.method && json.params?.listen === true) { + if (state.callback) { + // we'll assert on this later... + callbackWiredUp = true; + let response = { + jsonrpc: "2.0", + id: json.id, + result: { + listening: true, + event: json.method + } + }; + // catching errors, so all tests don't fail if this breaks + try { + // send back the onInactive event immediately, to test for race conditions + state.callback(JSON.stringify(response)); + } catch (err) { + // fail silenetly (the boolean-based tests below will figure it out...) + } + } + } + + if (json.method === 'Discovery.onNavigateTo') { // we'll assert on this later... - callbackWiredUp = true; + navigateToListenCount++; let response = { jsonrpc: "2.0", - id: json.id, - result: true, + method: "Discovery.navigateTo", + params: { + value: { + action: "home" + } + } }; // catching errors, so all tests don't fail if this breaks try { @@ -53,35 +80,55 @@ const transport = { // fail silenetly (the boolean-based tests below will figure it out...) } } - } - }, - receive: function (callback: FunctionConstructor) { - // store the callback - state.callback = callback; - }, -}; + }, + receive: function (callback: FunctionConstructor) { + // store the callback + state.callback = callback; + callbackWiredUp = true + console.log(`receive`) + }, + }; + + win.__firebolt = win.__firebolt || {} + transportAlreadyExisted = !!win.__firebolt.transport + + win.__firebolt = { + transport + } -win.__firebolt.setTransportLayer(transport); + console.log('0') -// listen twice, using event-specific call FIRST -Discovery.listen("navigateTo", (value: Discovery.NavigationIntent) => { - callbackWiredUp = true; -}); + // listen twice, using event-specific call FIRST + await Discovery.listen("navigateTo", (value: Intents.NavigationIntent) => { + callbackWiredUp = true; + }); -Discovery.listen("navigateTo", (value: Discovery.NavigationIntent) => { - /* this just adds more listen calls to make sure we don't spam */ -}); -Discovery.listen((event: string, value: object) => { - /* testing both listen signatures */ -}); -Discovery.listen((event: string, value: object) => { - /* testing both listen signatures */ -}); + console.log('1') + + await Discovery.listen("navigateTo", (value: Intents.NavigationIntent) => { + /* this just adds more listen calls to make sure we don't spam */ + }); + + console.log('2') + + await Discovery.listen((event: string, value: object) => { + /* testing both listen signatures */ + }); + + console.log('3') + + await Discovery.listen((event: string, value: object) => { + /* testing both listen signatures */ + }); + + console.log(`end of beforeAll!`) +}) -Lifecycle.ready(); +//Lifecycle.ready(); test("Transport injected after SDK", () => { expect(callbackWiredUp).toBe(true); + expect(transportAlreadyExisted).toBe(false) }); test("Transport send method working", () => { diff --git a/src/sdks/core/test/suite/synchronous-transport.test.ts b/src/sdks/core/test/suite/synchronous-transport.test.ts index f7ab896d4..accbca64e 100644 --- a/src/sdks/core/test/suite/synchronous-transport.test.ts +++ b/src/sdks/core/test/suite/synchronous-transport.test.ts @@ -16,41 +16,46 @@ * SPDX-License-Identifier: Apache-2.0 */ -import transport from "../../../../../test/helpers/synchronous-transport.mjs"; +const win: any = window; -// These all get set synchronously, so we'll update them as they happen -let sendCalled: boolean = false; -let inactiveListened: boolean = false; -let callbackWiredUp: boolean = false; +let sendCalled = false +let inactiveCalled = false +let _callback: Function; +let firstId: Number -transport.onSend((json) => { - // we'll assert on this later... - sendCalled = true; - if (json.method.toLowerCase() === "device.name") { - // we'll assert on this later... - inactiveListened = true; - - // we'll assert on this later... - callbackWiredUp = true; - let response = { - jsonrpc: "2.0", - id: json.id, - result: "Test Name", - }; - // catching errors, so all tests don't fail if this breaks - try { - // send back the onInactive event immediately, to test for race conditions - transport.response(response); - } catch (err) { - // fail silenetly (the boolean-based tests below will figure it out...) +win.__firebolt = { + transport: { + send: function(message: string) { + const json = JSON.parse(message) + if (firstId === undefined) { + firstId = json.id + } + sendCalled = true + if (json.method === 'Lifecycle.onInactive') { + inactiveCalled = true + } + else if (json.method === 'Device.name') { + console.dir(json) + _callback && setTimeout(() => { + _callback(JSON.stringify({ + jsonrpc: '2.0', + id: json.id, + result: 'Test Name' + })) + }, 100) + } + }, + receive: function(callback: Function) { + _callback = callback } } -}); +} import { test, expect, beforeAll } from "@jest/globals"; import { Lifecycle, Device } from "../../build/javascript/src/firebolt"; +import { DefaultApplication } from '../../../../../test/Setup' -Lifecycle.ready(); +Lifecycle.provideApplication(new DefaultApplication()) // Wire up our synchronous transport layer before the SDK loads beforeAll(() => { @@ -60,21 +65,17 @@ beforeAll(() => { }); test("Transport injected before SDK", () => { - expect(transport.instantiatedBeforeSdk()).toBe(true); + // NOTE: this assumes an implementation detail that we start at 1 (we do at time of this test writing) + // this isn't the best test, since there's no requirement that we start at 1 or even use numbers + // at all (could be strings or even null). + // if this test ever fails, we should find a better way to test that we didn't miss any requests + expect(firstId).toBe(1) }); test("Transport send method working", () => { expect(sendCalled).toBe(true); }); -test("Transport was sent `Lifecycle.onInactive` listener", () => { - expect( - !!transport - .history() - .find((json) => json.method.toLowerCase() === "lifecycle.oninactive") - ).toBe(true); -}); - test("Transport `receive` callback wired up", () => { return Device.name().then((name) => { expect(name).toBe("Test Name"); diff --git a/src/sdks/discovery/package.json b/src/sdks/discovery/package.json index 40e4cd992..04c1baeff 100644 --- a/src/sdks/discovery/package.json +++ b/src/sdks/discovery/package.json @@ -1,6 +1,6 @@ { "name": "@firebolt-js/discovery-sdk", - "version": "1.2.0-next.2", + "version": "2.0.0-next.4", "description": "The Firebolt Discovery JS SDK", "main": "./dist/lib/firebolt-discovery.mjs", "types": "./dist/lib/firebolt-discovery.d.ts", @@ -10,12 +10,14 @@ "type": "module", "scripts": { "validate": "npx firebolt-openrpc validate --input ./dist/firebolt-discovery-open-rpc.json", - "sdk": "npx firebolt-openrpc sdk --input ./dist/firebolt-discovery-open-rpc.json --template ./src/js --output ./build/javascript/src", - "native": "npx firebolt-openrpc sdk --input ./dist/firebolt-discovery-open-rpc.json --template ./src/js --output ./build/c/src --language ../../../node_modules/@firebolt-js/openrpc/languages/c", + "sdk": "npx firebolt-openrpc sdk --server ./dist/firebolt-discovery-open-rpc.json --client ./dist/firebolt-discovery-app-open-rpc.json --template ./src/js --output ./build/javascript/src", + "native": "npx firebolt-openrpc sdk --server ./dist/firebolt-discovery-open-rpc.json --client ./dist/firebolt-discovery-app-open-rpc.json --template ./src/cpp --output ./build/c/src --language ../../../node_modules/@firebolt-js/openrpc/languages/cpp", "compile": "cd ../../.. && npm run compile", - "slice": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-discovery-open-rpc.json", - "docs": "npx firebolt-openrpc docs --input ./dist/firebolt-discovery-open-rpc.json --output build/docs/markdown --as-path", - "wiki": "npx firebolt-openrpc docs --input ./dist/firebolt-discovery-open-rpc.json --output build/docs/markdown", + "slice": "npm run slice:server&& npm run slice:client", + "slice:server": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-discovery-open-rpc.json", + "slice:client": "npx firebolt-openrpc slice -i ../../../dist/firebolt-app-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-discovery-app-open-rpc.json", + "docs": "npx firebolt-openrpc docs --server ./dist/firebolt-discovery-open-rpc.json --client ./dist/firebolt-discovery-app-open-rpc.json --output build/docs/markdown --as-path", + "wiki": "npx firebolt-openrpc docs --server ./dist/firebolt-discovery-open-rpc.json --client ./dist/firebolt-discovery-app-open-rpc.json --output build/docs/markdown", "dist:notest": "npm run clean && npm run slice && npm run validate && npm run sdk && npm run docs && npm run prettier && npm run dist:copy && echo 'Firebolt Discovery SDK /dist/ is ready.\n'", "dist:copy": "npm run dist:copy:sdk && npm run dist:copy:docs", "dist:copy:sdk": "mkdirp ./dist && cp -R build/javascript/src dist/lib && cp ./dist/firebolt-discovery-open-rpc.json ../../../dist/firebolt-discovery-open-rpc.json", diff --git a/src/sdks/discovery/test/suite/content.test.ts b/src/sdks/discovery/test/suite/content.test.ts index 1ab4e98c8..828a909fd 100644 --- a/src/sdks/discovery/test/suite/content.test.ts +++ b/src/sdks/discovery/test/suite/content.test.ts @@ -17,10 +17,10 @@ */ import { test, expect } from "@jest/globals"; -import { Content } from "../../build/javascript/src/firebolt-discovery"; +import { Content, Discovery } from "../../build/javascript/src/firebolt-discovery"; test("Content.requestUserInterest()", () => { - return Content.requestUserInterest(Content.InterestType.INTEREST, Content.InterestReason.PLAYLIST).then((interest: Content.InterestResult) => { + return Content.requestUserInterest(Discovery.InterestType.INTEREST, Discovery.InterestReason.PLAYLIST).then((interest: Content.InterestResult) => { const entity = interest.entity const appId = interest.appId expect(appId).toBeDefined() diff --git a/src/sdks/manage/package.json b/src/sdks/manage/package.json index 9f3cbc6d3..5b33b5e50 100644 --- a/src/sdks/manage/package.json +++ b/src/sdks/manage/package.json @@ -1,6 +1,6 @@ { "name": "@firebolt-js/manage-sdk", - "version": "1.2.0-next.4", + "version": "2.0.0-next.4", "description": "The Firebolt Manage JS SDK", "main": "./dist/lib/firebolt-manage.mjs", "types": "./dist/lib/firebolt-manage.d.ts", @@ -10,18 +10,20 @@ "type": "module", "scripts": { "validate": "npx firebolt-openrpc validate --input ./dist/firebolt-manage-open-rpc.json", - "sdk": "npx firebolt-openrpc sdk --input ./dist/firebolt-manage-open-rpc.json --template ./src/js --output ./build/javascript/src", - "native": "npx firebolt-openrpc sdk --input ./dist/firebolt-manage-open-rpc.json --template ./src/js --output ./build/c/src --language ../../../node_modules/@firebolt-js/openrpc/languages/c", + "sdk": "npx firebolt-openrpc sdk --server ./dist/firebolt-manage-open-rpc.json --client ./dist/firebolt-manage-app-open-rpc.json --template ./src/js --output ./build/javascript/src", "cpp": "npm run cpp:compile && npm run cpp:install", "cpp:compile": "npx firebolt-openrpc sdk --input ./dist/firebolt-manage-open-rpc.json --template ./src/cpp --output ./build/cpp/src --static-module Platform --language ../../../node_modules/@firebolt-js/openrpc/languages/cpp", "cpp:install": "./build/cpp/src/scripts/install.sh -i ./build/cpp/src -s ./build/cpp/src/ -m manage", + "native": "npx firebolt-openrpc sdk --input ./dist/firebolt-manage-open-rpc.json --template ./src/js --output ./build/c/src --language ../../../node_modules/@firebolt-js/openrpc/languages/c", "compile": "cd ../../.. && npm run compile", - "slice": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-manage-open-rpc.json", - "docs": "npx firebolt-openrpc docs --input ./dist/firebolt-manage-open-rpc.json --output build/docs/markdown --as-path", + "slice": "npm run slice:server&& npm run slice:client", + "slice:server": "npx firebolt-openrpc slice -i ../../../dist/firebolt-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-manage-open-rpc.json", + "slice:client": "npx firebolt-openrpc slice -i ../../../dist/firebolt-app-open-rpc.json --sdk ./sdk.config.json -o ./dist/firebolt-manage-app-open-rpc.json", + "docs": "npx firebolt-openrpc docs --server ./dist/firebolt-manage-open-rpc.json --client ./dist/firebolt-manage-app-open-rpc.json --output build/docs/markdown --as-path", "wiki": "npx firebolt-openrpc docs --input ./dist/firebolt-manage-open-rpc.json --output build/docs/markdown", "dist:notest": "npm run clean && npm run slice && npm run validate && npm run sdk && npm run docs && npm run prettier && npm run dist:copy && echo 'Firebolt Manage SDK /dist/ is ready.\n'", "dist:copy": "npm run dist:copy:sdk && npm run dist:copy:docs", - "dist:copy:sdk": "mkdirp ./dist && cp -R build/javascript/src dist/lib && cp ./dist/firebolt-manage-open-rpc.json ../../../dist/firebolt-manage-open-rpc.json", + "dist:copy:sdk": "mkdirp ./dist && cp -R build/javascript/src dist/lib && cp ./dist/firebolt-manage-open-rpc.json ../../../dist/firebolt-manage-open-rpc.json && cp ./dist/firebolt-manage-app-open-rpc.json ../../../dist/firebolt-core-app-open-rpc.json", "dist:copy:docs": "mkdirp ./dist && cp -R build/docs/markdown dist/docs", "dist": "npm run dist:notest && npm run test", "clean": "rm -rf ./build && rm -rf ./dist", @@ -44,8 +46,8 @@ "devDependencies": { "jest": "^28.1.0", "jest-environment-jsdom": "^28.1.3", - "prettier": "^3.1.0", - "typescript": "^4.6.4" + "typescript": "^4.6.4", + "prettier": "^3.1.0" }, "keywords": [ "firebolt", diff --git a/src/sdks/manage/test/suite/acknowledgeChallenge.test.ts b/src/sdks/manage/test/suite/acknowledgeChallenge.test.ts index 50b180d0d..d1e38c899 100644 --- a/src/sdks/manage/test/suite/acknowledgeChallenge.test.ts +++ b/src/sdks/manage/test/suite/acknowledgeChallenge.test.ts @@ -19,32 +19,21 @@ import { test, expect } from "@jest/globals"; import { AcknowledgeChallenge } from "../../build/javascript/src/firebolt-manage"; -class ACKPovider implements AcknowledgeChallenge.ChallengeProvider { - challenge( - parameters: object, - session: AcknowledgeChallenge.FocusableProviderSession - ): Promise { - return Promise.resolve(null); + + +class ACKPovider implements AcknowledgeChallenge.AcknowledgeChallenge { + challenge(capability: string, requestor: AcknowledgeChallenge.ChallengeRequestor): Promise { + return Promise.resolve(null) } } test("AcknowledgeChallenge.provide() declarations", () => { AcknowledgeChallenge.provide( - "xrn:firebolt:capability:usergrant:acknowledgechallenge", new ACKPovider() ); expect(1).toBe(1); }); -test("AcknowledgeChallenge.provide() with blank object", () => { - expect(() => { - AcknowledgeChallenge.provide( - "xrn:firebolt:capability:usergrant:acknowledgechallenge", - {} - ); - }).toThrow(); -}); - // Events Test cases // test("AcknowledgeChallenge.listen() for requestChallenge event", () => { diff --git a/src/sdks/manage/test/suite/closedCaptions.test.ts b/src/sdks/manage/test/suite/closedCaptions.test.ts index 90c15417f..9110b845d 100644 --- a/src/sdks/manage/test/suite/closedCaptions.test.ts +++ b/src/sdks/manage/test/suite/closedCaptions.test.ts @@ -27,7 +27,7 @@ test("ClosedCaptions.enabled()", () => { test("ClosedCaptions.fontFamily()", () => { return ClosedCaptions.fontFamily().then((res: string) => { - expect(res).toEqual("monospaced_sanserif"); + expect(res).toEqual("monospace_serif"); }); }); diff --git a/src/sdks/manage/test/suite/keyboard.test.ts b/src/sdks/manage/test/suite/keyboard.test.ts index 6ee3a5aed..5991eb43a 100644 --- a/src/sdks/manage/test/suite/keyboard.test.ts +++ b/src/sdks/manage/test/suite/keyboard.test.ts @@ -30,9 +30,8 @@ class MockProviderBroker { constructor() { } - send(msg) { - let parsed = JSON.parse(msg) - if (parsed.method === 'keyboard.onRequestStandard') { + send(parsed) { + if (parsed.method === 'Keyboard.provide') { state.eventId = parsed.id } if ((parsed.method === 'keyboard.standardResponse') || (parsed.method === 'keyboard.standardError')) { @@ -61,7 +60,7 @@ class MockProviderBroker { correlationId: fullMsg.result.correlationId, callback: providerCallback }) - state.cb(JSON.stringify(fullMsg)) + state.cb(fullMsg) } } const broker = new MockProviderBroker() @@ -69,115 +68,46 @@ let provider = null beforeAll(async () => { Settings.setLogLevel('DEBUG') - window['__firebolt'].setTransportLayer(new MockProviderBroker()) + window['__firebolt'].transport = new MockProviderBroker() provider = new DelegatingKBProvider(new KBProvider()) - await Keyboard.provide("xrn:firebolt:capability:input:keyboard", provider); + Keyboard.provide(provider); }) -class DelegatingKBProvider implements Keyboard.KeyboardInputProvider { - delegate: Keyboard.KeyboardInputProvider; - constructor(delegate: Keyboard.KeyboardInputProvider) { +class DelegatingKBProvider implements Keyboard.Keyboard { + delegate: Keyboard.Keyboard; + constructor(delegate: Keyboard.Keyboard) { this.delegate = delegate; } - standard( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return this.delegate.standard(parameters, session) + standard(message: string): Promise { + return this.delegate.standard(message) } - password( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return this.delegate.password(parameters, session) - } - email( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return this.delegate.email(parameters, session) - } -} -class KBProvider implements Keyboard.KeyboardInputProvider { - standard( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return Promise.resolve('foo'); + password(message?: string): Promise { + return this.delegate.password(message) } - password( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return Promise.resolve(null); - } - email( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - return Promise.resolve(null); + + email(type: Keyboard.EmailUsage, message?: string): Promise { + return this.delegate.email(type, message) } } -class KBProviderWithError implements Keyboard.KeyboardInputProvider { - async standard( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - throw new Error('failed') +class KBProvider implements Keyboard.Keyboard { + standard(message: string): Promise { + return Promise.resolve(null) } - async password( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - throw new Error('failed') + + email(type: Keyboard.EmailUsage, message?: string): Promise { + return Promise.resolve(null) } - async email( - parameters: Keyboard.KeyboardParameters, - session: Keyboard.FocusableProviderSession - ): Promise { - throw new Error('failed') + + password(message?: string): Promise { + return Promise.resolve(null) } } -test("Keyboard.provide() declarations", async () => { - let callback = null; - let promise: Promise = new Promise((resolve, reject) => { - callback = resolve - }) - provider.delegate = new KBProvider() - await broker.triggerProvider({ - message: 'Enter name', - type: 'standard' - }, callback) - let result = await promise - console.log(result) - expect(result.method).toStrictEqual('keyboard.standardResponse') - expect(result.params.result).toStrictEqual('foo') -}); - -test("Keyboard.provide() with blank object", () => { - expect(() => { - Keyboard.provide("xrn:firebolt:capability:input:keyboard", {}); - }).toThrow(); -}); - -test("Keyboard.provide() with error response", async () => { - let callback = null; - let promise: Promise = new Promise((resolve, reject) => { - callback = resolve - }) - provider.delegate = new KBProviderWithError() - await broker.triggerProvider({ - message: 'Enter name', - type: 'standard' - }, callback) - let result = await promise - console.log(result) - expect(result.method).toStrictEqual('keyboard.standardError') - expect(result.params.error.message).toStrictEqual('failed') - expect(result.params.error.code).toStrictEqual(1000) +test("Keyboard.provide() declarations", () => { + Keyboard.provide(new KBProvider()); + expect(1).toBe(1); }); // Events Test cases diff --git a/src/sdks/manage/test/suite/pinChallenge.test.ts b/src/sdks/manage/test/suite/pinChallenge.test.ts index 2612cfa5d..565e292bf 100644 --- a/src/sdks/manage/test/suite/pinChallenge.test.ts +++ b/src/sdks/manage/test/suite/pinChallenge.test.ts @@ -19,29 +19,19 @@ import { test, expect } from "@jest/globals"; import { PinChallenge } from "../../build/javascript/src/firebolt-manage"; -class PCProvider implements PinChallenge.ChallengeProvider { - challenge( - parameters: object, - session: PinChallenge.FocusableProviderSession - ): Promise { - return Promise.resolve(null); +class PCProvider implements PinChallenge.PinChallenge { + challenge(requestor: PinChallenge.ChallengeRequestor, pinSpace: "purchase" | "content", capability?: string): Promise { + return Promise.resolve(null) } } test("PinChallenge.provide() declarations", () => { PinChallenge.provide( - "xrn:firebolt:capability:usergrant:pinchallenge", new PCProvider() ); expect(1).toBe(1); }); -test("PinChallenge.provide() with blank object", () => { - expect(() => { - PinChallenge.provide("xrn:firebolt:capability:usergrant:pinchallenge", {}); - }).toThrow(); -}); - // Events Test cases // test("PinChallenge.listen() for requestChallenge event", () => { diff --git a/test/Setup.js b/test/Setup.js index 7b4bdee97..587a05a38 100644 --- a/test/Setup.js +++ b/test/Setup.js @@ -49,4 +49,19 @@ export const testHarness = { window.__firebolt.testHarness = testHarness +export class DefaultApplication { + create(params) { + return Promise.resolve(null) + } + resume() { + return Promise.resolve(null) + } + suspend() { + return Promise.resolve(null) + } + destroy() { + return Promise.resolve(null) + } +} + export default testHarness \ No newline at end of file diff --git a/test/suite/basic.test.ts b/test/suite/basic.test.ts new file mode 100644 index 000000000..399c8fd6e --- /dev/null +++ b/test/suite/basic.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2021 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +import { test, expect } from '@jest/globals'; + +test('Basic', () => { + expect(1).toBe(1) +}) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 0e5a8d3af..56ff58bc8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,5 @@ { "include": [ - "src/sdks/core/test/suite/*", - "src/sdks/manage/test/suite/*" + "test/suite/*" ] } \ No newline at end of file