diff --git a/.gitignore b/.gitignore index 00019a05..b75dfe62 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,13 @@ **/node_modules dist .idea -.claude \ No newline at end of file +.claude +test/.out +.env +.env.* +!.env.example + +# Captures of authenticated traffic contain the session cookie in plaintext: +# Respect masks inputs marked `format: password`, but not values captured from a +# response into a step output. +*.har \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..84eb5ad6 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,122 @@ +# VRChat API specification + +VRChat publishes no specification. Every path, field, type, and example here is +reverse-engineered from live traffic, so a confident sentence nobody checked is +the failure this repo produces most. + +`test/arazzo.yaml` drives ~500 workflows against the live API and writes the +capture to `test/.out/har/arazzo.har`. That capture is the evidence. Query it +before writing anything: + +```sh +jq -r '[.log.entries[] | select(.request.url | contains("/users/")) | .response.content.text | fromjson] | .[0]' test/.out/har/arazzo.har +``` + +## Never document what the traffic has not shown + +- Every property, type, enum value, `required` entry, and example comes from a + captured response. Never add one from a field name, a sibling schema, or the + client's behaviour. +- A field that is always `null` establishes nothing about its type. Write `{}` + rather than guessing from the name. Never write a bare `nullable: true`: Ajv + rejects it without a `type`, and the schema check fails. +- `nullable: true` means JSON `null` was captured. A field that is sometimes + absent is not nullable. +- Close an `enum` only when the set is known. Two observed values do not make a + set; a generated client will reject the third. +- `/config` returns decoy properties, plausible-looking names VRChat rerolls at + random. Never document one, and keep `APIConfig` `additionalProperties: true`. + +## Absent from one capture is not absent + +Adding needs evidence; removing needs far more. A capture records one account in +one state, and a response changes shape with that state — `presence` carries +nine keys for an offline account and nineteen for an online one. + +A property missing from a capture is a coverage gap, not a phantom. Add the +workflow that reaches the state carrying it, and judge the property once that +workflow has run. Deleting on the strength of one capture removes what the +suite merely failed to reach. + +## An unevidenced schema is a missing test + +`{}`, a value only ever `null`, and a property no response has carried all mean +the same thing: no workflow reaches the case that would settle it. Add the +workflow to `test/arazzo.yaml`; never close the gap by guessing. + +`required` cuts both ways. A property every observed response carries but that +`required` omits is either required, or missing the workflow that shows it +absent. A property in `required` that some response omits is neither. + +## One operation per workflow + +A failing step ends its workflow, so every operation after it goes unexercised +and its coverage disappears without saying so. Give each operation its own +workflow. Chain steps only where a later one needs state an earlier one created: +a create-read-delete lifecycle belongs together, a run of independent reads does +not. + +## Descriptions state what the API does + +- Never write about the evidence. No "observed", "unverified", "appears to", + "not established", "no other value seen". +- Never assert what the wire cannot show: lifetimes, units, defaults, causes, + what the client does with a value. +- State a rule once. Where a response component explains a status code, the + operations returning it stay silent. + +## Examples are copied, never typed + +Copy the body from the capture verbatim. VRChat substitutes lookalike +characters in validation messages — `˸` (U+02F8) for a colon, `‚` (U+201A) for a +comma, `․` (U+2024) for a full stop — and a retyped example normalises them, +which is how you can tell nobody captured it. + +## Deprecation + +Mark `deprecated: true` only where every observed call answers the generic +"not implemented" 404. Keep the original tag and add `deprecated`, so the suite +keeps calling the route and a revival shows up. + +## Comments + +Never add a YAML comment. A fact about the API belongs in a `description`. + +## Traps + +- `respect` closes any schema that omits `additionalProperties`, so a genuinely + open one must say `additionalProperties: true`. The `vrchat/close-schemas` + decorator changes `drift` only, and does not reach the schema check. +- `respect` masks secrets in the capture and sends the real value. `********` in + a HAR is evidence about nothing. +- `dist/openapi-test.yaml` defines `jsonschema` and `internal`, so `x-if` takes + its `then` branch. The published bundles take `else`. Both must describe the + same traffic; check which one you are validating against before believing a + finding. +- `drift`'s `security-baseline` flags every unauthenticated workflow for the + missing cookie it exists to assert. Every finding it produces is a 401 and + none is actionable. +- A `oneOf` that matches no branch reports every property in the body as + unevaluated, so one missing property produces hundreds of findings naming + innocent ones. Fix the branch that should have matched, never the properties + the finding names. +- `respect` rejects `--skip` alongside `--workflow`, and runs only what you name, + so an authenticated workflow needs `-w session` too. +- A `-w` run writes `test/.out/partial.har` and leaves the suite capture alone. + `coverage` and `drift` read the suite capture, so run them after a full run. +- Some files under `openapi/components/paths/` are CRLF. Read a diff of one with + `git diff --ignore-all-space` before believing its size. + +## Commands + +| | | +| --- | --- | +| `pnpm bundle` | build `dist/` | +| `pnpm lint` | spectral, eslint, arazzo | +| `pnpm test` | drive the suite against the live API | +| `pnpm test -w session -w ` | one workflow, plus the session it reads | +| `pnpm test:coverage` | what the traffic never reached | +| `pnpm test:drift` | where traffic and description disagree | + +`pnpm test` reuses the cached session in `test/.out/`; delete +`test/.out/session` to force a fresh login. diff --git a/package.json b/package.json index d4508a45..a63ac0ab 100644 --- a/package.json +++ b/package.json @@ -4,41 +4,38 @@ "version": "1.0.0", "private": true, "description": "VRChat API OpenAPI Specification", - "author": "", "license": "MIT", - "main": "index.js", "scripts": { - "lint-spectral": "bun spectral openapi/openapi.yaml", - "lint-spectral-ci": "bun spectral -i openapi/openapi.yaml", - "lint-eslint": "eslint .", - "lint-eslint-ci": "pnpm -s run lint-eslint -f @jamesacarr/eslint-formatter-github-actions", - "lint": "pnpm --no-bail --stream --reporter-hide-prefix --color run '/^lint-(?!ci$)(?!.*-ci$).*/'", - "lint-ci": "pnpm --stream --reporter-hide-prefix run '/^lint-.*-ci$/'", - "bundle": "redocly bundle" + "bundle": "redocly bundle", + "lint": "pnpm --no-bail --stream --reporter-hide-prefix --color run '/^lint:/'", + "lint-ci": "pnpm --stream --reporter-hide-prefix run '/^lint:/'", + "lint:spectral": "bun spectral openapi/openapi.yaml", + "lint:eslint": "eslint . ${CI:+-f @jamesacarr/eslint-formatter-github-actions}", + "lint:arazzo": "redocly lint test/arazzo.yaml", + "test": "sh test/run.sh", + "test:coverage": "redocly coverage test/.out/har --api dist/openapi-internal.json", + "test:drift": "redocly drift test/.out/har --api dist/openapi-test.yaml" }, "devDependencies": { "@actions/core": "^1.11.1", - "@apidevtools/json-schema-ref-parser": "^15.1.2", "@ariesclark/eslint-config": "^3.1.1", - "@eslint-react/eslint-plugin": "^2.3.9", "@jamesacarr/eslint-formatter-github-actions": "^0.2.0", - "@redocly/cli": "^2.12.0", - "@redocly/openapi-core": "^2.12.5", - "@stoplight/spectral-cli": "^6.15.0", + "@redocly/cli": "link:../redocly-cli/packages/cli", + "@redocly/openapi-core": "^2.41.2", "@stoplight/spectral-core": "^1.20.0", "@stoplight/spectral-formats": "^1.8.2", "@stoplight/spectral-formatters": "^1.5.0", - "@stoplight/spectral-functions": "^1.10.1", "@stoplight/spectral-parsers": "^1.0.5", "@stoplight/spectral-rulesets": "^1.22.0", "@types/bun": "^1.3.3", "@types/node": "^24.10.1", "@types/pluralize": "^0.0.33", "change-case": "^5.4.4", - "cspell": "^9.3.2", "cspell-lib": "^9.3.2", "eslint": "^9.39.1", + "httpexec": "^0.0.2", "pluralize": "^8.0.0", - "semver": "^7.7.3" + "semver": "^7.7.3", + "totp-generator": "^2.0.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd6d036e..029d2e77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,27 +11,18 @@ importers: '@actions/core': specifier: ^1.11.1 version: 1.11.1 - '@apidevtools/json-schema-ref-parser': - specifier: ^15.1.2 - version: 15.1.2(@types/json-schema@7.0.15) '@ariesclark/eslint-config': specifier: ^3.1.1 - version: 3.1.1(@eslint-react/eslint-plugin@2.3.9(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.2) - '@eslint-react/eslint-plugin': - specifier: ^2.3.9 - version: 2.3.9(eslint@9.39.1)(typescript@5.9.3) + version: 3.1.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@7.0.2)(yaml@2.8.2) '@jamesacarr/eslint-formatter-github-actions': specifier: ^0.2.0 version: 0.2.0 '@redocly/cli': - specifier: ^2.12.0 - version: 2.12.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0) + specifier: link:../redocly-cli/packages/cli + version: link:../redocly-cli/packages/cli '@redocly/openapi-core': - specifier: ^2.12.5 - version: 2.12.5(ajv@8.17.1) - '@stoplight/spectral-cli': - specifier: ^6.15.0 - version: 6.15.0 + specifier: ^2.41.2 + version: 2.41.2 '@stoplight/spectral-core': specifier: ^1.20.0 version: 1.20.0 @@ -41,9 +32,6 @@ importers: '@stoplight/spectral-formatters': specifier: ^1.5.0 version: 1.5.0 - '@stoplight/spectral-functions': - specifier: ^1.10.1 - version: 1.10.1 '@stoplight/spectral-parsers': specifier: ^1.0.5 version: 1.0.5 @@ -62,21 +50,24 @@ importers: change-case: specifier: ^5.4.4 version: 5.4.4 - cspell: - specifier: ^9.3.2 - version: 9.3.2 cspell-lib: specifier: ^9.3.2 version: 9.3.2 eslint: specifier: ^9.39.1 version: 9.39.1 + httpexec: + specifier: ^0.0.2 + version: 0.0.2 pluralize: specifier: ^8.0.0 version: 8.0.0 semver: specifier: ^7.7.3 version: 7.7.3 + totp-generator: + specifier: ^2.0.1 + version: 2.0.1 packages: @@ -144,12 +135,6 @@ packages: '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - '@apidevtools/json-schema-ref-parser@15.1.2': - resolution: {integrity: sha512-54vnqDyGsDAVM0LOIdGMnfVyCN1NlqoGnHEGpMfaDBLMvClfT4j2XbJgvfuF0Ca0kxT6Gb7xUgS5W1I14QqjiQ==} - engines: {node: '>=20'} - peerDependencies: - '@types/json-schema': ^7.0.15 - '@ariesclark/eslint-config@3.1.1': resolution: {integrity: sha512-9bmdqwS+3Vwxkz27xaSyg0BKpcAHkq7SiueY2eA7QG+xRG/YmxdELBlY9WhoE1EHCi2q7TheMBGZqvXZgk/yiA==} peerDependencies: @@ -200,10 +185,6 @@ packages: resolution: {integrity: sha512-OmKzq/0FATHU671GKMzBrTyLdm25Wnziva7h4ylumVn1wnwWsXGef5bgXD7iuApqfqH9SzxsU0NtTB8m8vwEHQ==} engines: {node: '>=20'} - '@cspell/cspell-json-reporter@9.3.2': - resolution: {integrity: sha512-YRgpeHN9uY8kUlIw9q+8zJ0tRTAJMbfBTGzCq9Puah09NeMWlRMFPUkXVrkdic6NA7etboZ+zEdoZwRO9EmhiA==} - engines: {node: '>=20'} - '@cspell/cspell-pipe@9.3.2': resolution: {integrity: sha512-REF7ibG79WLEynIMUss/IRDCdYEb1nlE1rj/gt2CbPFzLa6t5MRwW2lajEvXS6/WgbMtsTVHAWi3ALqJzCwxng==} engines: {node: '>=20'} @@ -427,15 +408,6 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emotion/is-prop-valid@1.2.2': - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -768,45 +740,6 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@2.3.9': - resolution: {integrity: sha512-/RiruPxlQs6CMLJ8tiNT1jV8Zq4u80MTWYkNFz2PP9pht23bdcpngDKFoz8RQYDPt71dwiRURHiQAF75v8bIIw==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/core@2.3.9': - resolution: {integrity: sha512-pIkrGuQWyW/GgrAp0kC7nv/Jn53Xjs1/rbBqUcUYvEZnVKuUifnlXQtnmioOEj9PYsuWuOxAPijExrnNavm73w==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/eff@2.3.9': - resolution: {integrity: sha512-pkRWIPnH/jedRn5ZMEA0nDPn5BFuUHKOORbR+hfrAMFp4c3o+1/P1G/eB0vSQvAHAZdPwLZXdgxydz+2rbb8nQ==} - engines: {node: '>=20.19.0'} - - '@eslint-react/eslint-plugin@2.3.9': - resolution: {integrity: sha512-wKeXNa0vc8ACmvBoZPnRZ+s/z0KEmMKRxpOfRthcBvd0TPMIprohT/uwBXd8k15/j3CmaYe74pJFVVagJY3U3g==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/shared@2.3.9': - resolution: {integrity: sha512-LVtD76ycDC7D4OFKDQ8jyATTVxz986J+e9nzydyEUtEf1l+WYiOivPBeJUAs6JEySBl24nO76oEHDABw6l4hig==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/var@2.3.9': - resolution: {integrity: sha512-Bc36K8Lw6KV/5NMaEaFS7as4kgSgZ1wElFejgUEBPZnhUVmq2mITV1BsnMoMYM4jojnkMN80WNALyhONjOx9Jw==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@eslint/compat@1.4.1': resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -860,13 +793,6 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/schemasafe@1.3.0': - resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - - '@faker-js/faker@7.6.0': - resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} - engines: {node: '>=14.0.0', npm: '>=6.0.0'} - '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -883,10 +809,6 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/momoa@2.0.4': - resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} - engines: {node: '>=10.10.0'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -899,10 +821,6 @@ packages: resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@jamesacarr/eslint-formatter-github-actions@0.2.0': resolution: {integrity: sha512-/BMX+d6Pg36aHi7FmRsyCXUXCFQOVnJap1xl97kgglNE++d2HtqR6eHVxL56wXnXqC5wyI4T9Y3e2RccyubqQA==} @@ -940,176 +858,23 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@opentelemetry/api-logs@0.202.0': - resolution: {integrity: sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/context-async-hooks@2.0.1': - resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.0.1': - resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/exporter-trace-otlp-http@0.202.0': - resolution: {integrity: sha512-/hKE8DaFCJuaQqE1IxpgkcjOolUIwgi3TgHElPVKGdGRBSmJMTmN/cr6vWa55pCJIXPyhKvcMrbrya7DZ3VmzA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-exporter-base@0.202.0': - resolution: {integrity: sha512-nMEOzel+pUFYuBJg2znGmHJWbmvMbdX5/RhoKNKowguMbURhz0fwik5tUKplLcUtl8wKPL1y9zPnPxeBn65N0Q==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-transformer@0.202.0': - resolution: {integrity: sha512-5XO77QFzs9WkexvJQL9ksxL8oVFb/dfi9NWQSq7Sv0Efr9x3N+nb1iklP1TeVgxqJ7m1xWiC/Uv3wupiQGevMw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/resources@2.0.1': - resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-logs@0.202.0': - resolution: {integrity: sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@2.0.1': - resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@2.0.1': - resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-trace-node@2.0.1': - resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/semantic-conventions@1.34.0': - resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} - engines: {node: '>=14'} - '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@redocly/ajv@8.11.4': - resolution: {integrity: sha512-77MhyFgZ1zGMwtCpqsk532SJEc3IJmSOXKTCeWoMTAvPnQOkuOgxEip1n5pG5YX1IzCTJ4kCvPKr8xYyzWFdhg==} - - '@redocly/ajv@8.17.1': - resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==} - - '@redocly/cli@2.12.0': - resolution: {integrity: sha512-/q8RnBe+Duo+XYFCG8LnaD0kroGZ8MoS6575Xq59tCgjaCL16F+pZZ75xNBU2oXfEypJClNz/6ilc2G0q1+tlw==} - engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - hasBin: true - - '@redocly/config@0.22.2': - resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} - - '@redocly/config@0.40.0': - resolution: {integrity: sha512-MZQZs7QEGnue3rVN9Q9QvDbcGjesxbpKXUvDeckS69R1xjtgsnT9B39VA25zmwSJtgUeA9ST+sMf9GxIqixNbw==} + '@redocly/ajv@8.18.1': + resolution: {integrity: sha512-Ifm/pP/tul1qmAecpbVxCBluVE32rKfjf8gYXH4xI2gCv9mRWFhJMHzkPDM4TXlxwPQYIFegymlsy8lXz7optA==} - '@redocly/config@0.41.0': - resolution: {integrity: sha512-8yJ2e+ex8KVF25zijdpDbAEjyubk7NLfHsLI8h0MUnLEo2iEg6rTCDT9Qw71XDqd5UlXvfJb0Z0h6dd+Y6pWLw==} + '@redocly/ajv@8.18.3': + resolution: {integrity: sha512-l42u0of3hY98sN2A+M4qTX1O/KrpgGH32Hu9kP2GtHyD5Dfqq86PKFLe5dwaD8DEnNmlOlll2BAmeEtf0DaySg==} - '@redocly/openapi-core@1.34.5': - resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==} - engines: {node: '>=18.17.0', npm: '>=9.5.0'} - - '@redocly/openapi-core@2.12.0': - resolution: {integrity: sha512-RsVwmRD0KhyJbR8acIeU98ce6N+/YCuLJf6IGN+2SOsbwnDhnI5MG0TFV9D7URK/ukEewaNA701dVYsoP1VtRQ==} - engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - - '@redocly/openapi-core@2.12.5': - resolution: {integrity: sha512-PlzsfOgPUWg4OmyznsIWQ6EnfZK6KSOn2MG4sZS3DY9cHgno5YywNy8zFQWHADXLqR7hTw2M7VvbiMKVJxzyiA==} - engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} + '@redocly/config@0.52.0': + resolution: {integrity: sha512-e/++L27tRgo35GVCy4ivy+uqHi/ksg4KnhlYzj5FTJ9OokuyX18B0mJm0SUXLBih9VIQMgSk6tXsyYmhg5OsIQ==} - '@redocly/respect-core@2.12.0': - resolution: {integrity: sha512-mrYrfE81shSRS96ygXaRiSithV4Fe4Y7XlSYLSTfM8Lo3YAz7Geirg7HZ5fNFsI+hdW05ZuQewqpKL8XLwaAeA==} + '@redocly/openapi-core@2.41.2': + resolution: {integrity: sha512-qTH6xpEYffhrgJ5e9i1BW9CBi66cDacU9LYFvHuX4MQweunxohwFjVbz159sH7q9mpvqoM1yc1EpB8d7K6Y0wg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@rollup/plugin-commonjs@22.0.2': - resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} - engines: {node: '>= 12.0.0'} - peerDependencies: - rollup: ^2.68.0 - - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - '@rollup/rollup-android-arm-eabi@4.53.3': resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] @@ -1246,11 +1011,6 @@ packages: resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} engines: {node: '>=8'} - '@stoplight/spectral-cli@6.15.0': - resolution: {integrity: sha512-FVeQIuqQQnnLfa8vy+oatTKUve7uU+3SaaAfdjpX/B+uB1NcfkKRJYhKT9wMEehDRaMPL5AKIRYMCFerdEbIpw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - hasBin: true - '@stoplight/spectral-core@1.20.0': resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==} engines: {node: ^16.20 || ^18.18 || >= 20.17} @@ -1275,14 +1035,6 @@ packages: resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-ruleset-bundler@1.6.3': - resolution: {integrity: sha512-AQFRO6OCKg8SZJUupnr3+OzI1LrMieDTEUHsYgmaRpNiDRPvzImE3bzM1KyQg99q58kTQyZ8kpr7sG8Lp94RRA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-ruleset-migrator@1.11.3': - resolution: {integrity: sha512-+9Y1zFxYmSsneT5FPkgS1IlRQs0VgtdMT77f5xf6vzje9ezyhfs7oXwbZOCSZjEJew8iVZBKQtiOFndcBrdtqg==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-rulesets@1.22.0': resolution: {integrity: sha512-l2EY2jiKKLsvnPfGy+pXC0LeGsbJzcQP5G/AojHgf+cwN//VYxW1Wvv4WKFx/CLmLxc42mJYF2juwWofjWYNIQ==} engines: {node: ^16.20 || ^18.18 || >= 20.17} @@ -1303,16 +1055,9 @@ packages: resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} engines: {node: ^12.20 || >=14.13} - '@stoplight/yaml-ast-parser@0.0.48': - resolution: {integrity: sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==} - '@stoplight/yaml-ast-parser@0.0.50': resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} - '@stoplight/yaml@4.2.3': - resolution: {integrity: sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==} - engines: {node: '>=10.8'} - '@stoplight/yaml@4.3.0': resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} engines: {node: '>=10.8'} @@ -1335,9 +1080,6 @@ packages: '@types/es-aggregate-error@1.0.6': resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1365,12 +1107,6 @@ packages: '@types/sarif@2.1.7': resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} - '@types/stylis@4.2.5': - resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -1436,6 +1172,126 @@ packages: resolution: {integrity: sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -1573,10 +1429,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -1616,25 +1468,13 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1653,13 +1493,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - - ast-types@0.14.2: - resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} - engines: {node: '>=4'} - astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -1668,9 +1501,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1682,19 +1512,6 @@ packages: resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==} hasBin: true - better-ajv-errors@1.2.0: - resolution: {integrity: sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - ajv: 4.11.8 - 8 - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - birecord@0.1.1: - resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -1704,10 +1521,6 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - browserslist@4.28.0: resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1717,9 +1530,6 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - builtins@1.0.3: - resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - bun-types@1.3.3: resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} @@ -1745,44 +1555,26 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - call-me-maybe@1.0.2: - resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001757: resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk-template@1.1.2: - resolution: {integrity: sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==} - engines: {node: '>=14.16'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1791,9 +1583,6 @@ packages: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1809,10 +1598,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1823,17 +1608,6 @@ packages: colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} - engines: {node: '>=20'} - commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1846,12 +1620,6 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1865,16 +1633,9 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - core-js-compat@3.47.0: resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} - core-js@3.47.0: - resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -1890,11 +1651,6 @@ packages: resolution: {integrity: sha512-E3YhOhZzZt1a+AEbFV2B3THCyZ576PDg0mDNUDrU1Y65SyIhf4DC6itfPoAb6R3FI/DI218RqWZg/FTT8lJ2gA==} engines: {node: '>=20'} - cspell-gitignore@9.3.2: - resolution: {integrity: sha512-G2bLR+Dfb9GX4Sdm75GfCCa9V/sQYkRbLckuCuVmJxvcDB0xfczAtb6TfAXIziF3oUI6cOB1g+PoNLWBelcK5w==} - engines: {node: '>=20'} - hasBin: true - cspell-glob@9.3.2: resolution: {integrity: sha512-TuSupENEKyOCupOUZ3vnPxaTOghxY/rD1JIkb8e5kjzRprYVilO/rYqEk/52iLwJVd+4Npe8fNhR3KhU7u/UUg==} engines: {node: '>=20'} @@ -1916,29 +1672,11 @@ packages: resolution: {integrity: sha512-1Af7Mq9jIccFQyJl/ZCcqQbtJwuDqpQVkk8xfs/92x4OI6gW1iTVRMtsrh0RTw1HZoR8aQD7tRRCiLPf/D+UiQ==} engines: {node: '>=20'} - cspell@9.3.2: - resolution: {integrity: sha512-3xFyVSTYrYa/QJzLfzsCRMkMXqOsytP8E26DuGrVMJQoLPFmbOXNNtnMu4wrtr17QVloxpvutW77U4vb2L/LDQ==} - engines: {node: '>=20'} - hasBin: true - - css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} - - css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -1960,9 +1698,6 @@ packages: supports-color: optional: true - decko@1.2.0: - resolution: {integrity: sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==} - decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -1977,10 +1712,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dependency-graph@0.11.0: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} @@ -1996,29 +1727,16 @@ packages: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dompurify@3.3.0: - resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.260: resolution: {integrity: sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} @@ -2062,9 +1780,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -2196,46 +1911,11 @@ packages: peerDependencies: eslint: '>=8.45.0' - eslint-plugin-react-dom@2.3.9: - resolution: {integrity: sha512-xflcmWONib2KN54bJ25AvrYSPrp0qDWwWoG+tZJWD7xe0OcvC42zpERKyMuqTMuXfKPJNUOs2ZB1z6e3HNRviw==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-hooks-extra@2.3.9: - resolution: {integrity: sha512-ImANssr1gfBNMahqCufe2nhb1CZpqMBjKYgwtYF6u0pV11UXnGj181MW+YBEPEB+qIN4NK3hKxSsQngQJPBfQQ==} - engines: {node: '>=20.0.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-naming-convention@2.3.9: - resolution: {integrity: sha512-3cxHcn6oA29awTQr20LCw9XBhms65giuHHclU3KyLtFVoHSX/LUJtXUpv/KezkhRiaavT8PmxGTGMZiGGY9vHw==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - eslint-plugin-react-refresh@0.4.24: resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} peerDependencies: eslint: '>=8.40' - eslint-plugin-react-web-api@2.3.9: - resolution: {integrity: sha512-AlSBt0ITf1nT1I6U4Kyj9GoFEpfLh8sR62sl+6uYSladmhPAKXMOSB7Ban7VX6jZcA7LHp+acKAJCv18fKxaUg==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-x@2.3.9: - resolution: {integrity: sha512-G0Aqk7oHMVmMNnulpQ2nb/Iq2o9JNkk3WQT70zBVQJYIz6NUrXp/1ujL2+cXb5A8ZapEN53F0pP9ZoQRIzNhsA==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - eslint-plugin-regexp@2.10.0: resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==} engines: {node: ^18 || >=20} @@ -2336,9 +2016,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -2350,9 +2027,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -2363,10 +2037,6 @@ packages: resolution: {integrity: sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==} engines: {node: '>=6.0.0'} - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2376,19 +2046,9 @@ packages: fast-memoize@2.5.2: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} - hasBin: true - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -2405,10 +2065,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2431,17 +2087,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreach@2.0.6: - resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -2450,9 +2095,6 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2488,9 +2130,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -2501,23 +2140,10 @@ packages: github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@11.1.0: - resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} - engines: {node: 20 || >=22} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} @@ -2551,10 +2177,9 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} @@ -2586,16 +2211,10 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hpagent@1.2.0: - resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} - engines: {node: '>=14'} - - http2-client@1.3.5: - resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + httpexec@0.0.2: + resolution: {integrity: sha512-g0kgwLIbUDysT06Xqy2CIEeEETcawiM50TrKpc1ZPcm+U/IkOYRhbfKDrO852X1WTfU4V0NpBQIiBPXKIAZr4g==} + engines: {node: '>=22.18.0'} + hasBin: true ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} @@ -2623,13 +2242,6 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - inflight@1.0.6: - resolution: {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. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2653,10 +2265,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -2701,12 +2309,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-immutable-type@5.0.1: - resolution: {integrity: sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg==} - peerDependencies: - eslint: '*' - typescript: '>=4.7.4' - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -2719,13 +2321,6 @@ packages: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -2768,10 +2363,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -2787,6 +2378,10 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + js-yaml@5.2.2: + resolution: {integrity: sha512-dayzUzKkJ1MkuUtZglSebU43utNXH0OWQByK9rKOOuYIO8M5TV1y+n8ALMdG0rdzBnfNkOmZEqrURepb0ejqBw==} + hasBin: true + jsdoc-type-pratt-parser@4.1.0: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} @@ -2814,9 +2409,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-pointer@0.6.2: - resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} - json-schema-to-ts@2.7.2: resolution: {integrity: sha512-R1JfqKqbBR4qE8UyBR56Ms30LL62/nlhoz+1UkfI/VE7p54Awu919FZ6ZUPG8zIa3XB65usPJgr1ONVncUGSaQ==} engines: {node: '>=16'} @@ -2845,14 +2437,13 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - jsonpath-rfc9535@1.3.0: - resolution: {integrity: sha512-3jFHya7oZ45aDxIIdx+/zQARahHXxFSMWBkcBUldfXpLS9VCXDJyTKt35kQfEXLqh0K3Ixw/9xFnvcDStaxh7Q==} - engines: {node: '>=20'} - jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jssha@3.3.2: + resolution: {integrity: sha512-0RhFxzijV4W0qTXa97D5b6twAWXX7SEOpw8qzAZyZ+oeGOP9e84PnDSLjl7SBB1vBQ+chSUwsZR06i1AzA+nEA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2900,43 +2491,18 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lru-cache@11.2.2: - resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} - engines: {node: 20 || >=22} - - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - markdown-escape@2.0.0: resolution: {integrity: sha512-Trz4v0+XWlwy68LJIyw3bLbsJiC8XAbRCKF9DbEtZjyndKOGVx6n+wNB0VfoRmY2LKboQLeniap3xrb6LGSJ8A==} markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2977,10 +2543,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -3068,18 +2630,6 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3091,53 +2641,13 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - mobx-react-lite@4.1.1: - resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==} - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - - mobx-react@9.2.0: - resolution: {integrity: sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw==} - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - - mobx@6.15.0: - resolution: {integrity: sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3161,17 +2671,10 @@ packages: resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} engines: {node: '>=18'} - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nimma@0.2.3: resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} engines: {node: ^12.20 || >=14.13} - node-fetch-h2@2.3.0: - resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} - engines: {node: 4.x || >=6.0.0} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3181,9 +2684,6 @@ packages: encoding: optional: true - node-readfiles@0.2.0: - resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} - node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -3194,29 +2694,9 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - oas-kit-common@1.0.8: - resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} - - oas-linter@3.2.2: - resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} - - oas-resolver@2.5.6: - resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==} - hasBin: true - - oas-schema-walker@1.1.5: - resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==} - - oas-validator@5.0.8: - resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3233,19 +2713,10 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - openapi-sampler@1.6.2: - resolution: {integrity: sha512-NyKGiFKfSWAZr4srD/5WDhInOWDhfml32h/FKUqLpEwKJt0kG0LGUU0MdyNkKrVGuJnw6DuPWq/sHCwAMpiRxg==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - outdent@0.8.0: - resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -3270,9 +2741,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@1.5.0: resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} @@ -3298,17 +2766,10 @@ packages: parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3316,30 +2777,23 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - perfect-scrollbar@1.5.6: - resolution: {integrity: sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -3354,10 +2808,6 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - pony-cause@1.1.1: resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} engines: {node: '>=12.0.0'} @@ -3388,13 +2838,6 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -3403,20 +2846,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} - engines: {node: '>=12.0.0'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3424,29 +2853,6 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} - peerDependencies: - react: ^19.2.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-tabs@6.1.0: - resolution: {integrity: sha512-6QtbTRDKM+jA/MZTTefvigNxo0zz+gnBTVFw2CFVvq+f2BuH0nF0vDLNClL045nuTAdOoK/IL1vTP0ZLX0DAyQ==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} - read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -3455,28 +2861,10 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - redoc@2.5.1: - resolution: {integrity: sha512-LmqA+4A3CmhTllGG197F0arUpmChukAj9klfSdxNRemT9Hr07xXr7OGKu4PHzBs359sgrJ+4JwmOlM7nxLPGMg==} - engines: {node: '>=6.9', npm: '>=3.0.0'} - peerDependencies: - core-js: ^3.1.4 - mobx: ^6.0.4 - react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 - styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 - refa@0.12.1: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3485,9 +2873,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - reftools@1.1.9: - resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3512,10 +2897,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - reserved@0.1.2: - resolution: {integrity: sha512-/qO54MWj5L8WCBP9/UNe2iefJc+L9yETbH32xO/ft/EYPOTCR5k+azvDUgdCOKwZH8hXwPd0b8XBL78Nn2U69g==} - engines: {node: '>=0.8'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3532,30 +2913,15 @@ packages: engines: {node: '>= 0.4'} hasBin: true - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rollup@2.79.2: - resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} - engines: {node: '>=10.0.0'} - hasBin: true - rollup@4.53.3: resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -3567,9 +2933,6 @@ packages: safe-stable-stringify@1.1.1: resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} @@ -3583,9 +2946,6 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -3598,9 +2958,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3609,24 +2966,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - should-equal@2.0.0: - resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} - - should-format@3.0.3: - resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} - - should-type-adaptors@1.1.0: - resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} - - should-type@1.4.0: - resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} - - should-util@1.0.1: - resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} - - should@13.2.3: - resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} - side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -3643,24 +2982,13 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - simple-eval@1.0.1: resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} engines: {node: '>=12'} - simple-websocket@9.1.0: - resolution: {integrity: sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slugify@1.4.7: - resolution: {integrity: sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==} - engines: {node: '>=8.0.0'} - smol-toml@1.5.2: resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} engines: {node: '>= 18'} @@ -3669,18 +2997,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -3696,31 +3016,23 @@ packages: spdx-license-ids@3.0.22: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + srvx@0.12.5: + resolution: {integrity: sha512-IuvtDNQg5EIwv3c6dleyau7u8hCyGQ7D6+V/QM799Aud07z0wCUcurKLTRfyG33C8oUY+UWcVBFkfHMcbtmRLA==} + engines: {node: '>=20.16.0'} + hasBin: true + stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - - stickyfill@1.1.1: - resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} - stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - string-ts@2.2.1: - resolution: {integrity: sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string.prototype.trim@1.2.10: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} @@ -3733,17 +3045,10 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -3752,19 +3057,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - - styled-components@6.1.19: - resolution: {integrity: sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==} - engines: {node: '>= 16'} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' - - stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} - sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3778,10 +3070,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swagger2openapi@7.0.8: - resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} - hasBin: true - synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3807,18 +3095,21 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - toml-eslint-parser@0.10.0: resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + totp-generator@2.0.1: + resolution: {integrity: sha512-50DiKmv9zKTPzCgWOqQYVBMvxh+tpL9O3IUFIqzGUlFXzJyb/IQZac8bonXudvLbfuDY8laZ9qTDX+yAvTBNSQ==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3843,15 +3134,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-pattern@5.9.0: - resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3915,19 +3200,14 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} hasBin: true ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -3939,10 +3219,6 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} - undici@6.22.0: - resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==} - engines: {node: '>=18.17'} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -3968,23 +3244,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - uri-js-replace@1.0.1: - resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} - url-template@2.0.8: - resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3995,9 +3260,6 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@3.0.0: - resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} - vscode-languageserver-textdocument@1.0.12: resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} @@ -4041,32 +3303,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -4086,27 +3326,15 @@ packages: resolution: {integrity: sha512-MdSgP9YA9QjtAO2+lt4O7V2bnH22LPnfeVLiQqjY3cOyn8dy/Ief8otjIe6SPPTK03nM7O3Yl0LTfWuF7l+9yw==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - yaml@2.8.2: resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@17.0.1: - resolution: {integrity: sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==} - engines: {node: '>=12'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -4115,9 +3343,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@4.1.13: - resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4139,32 +3364,32 @@ snapshots: '@actions/io@1.1.3': {} - '@antfu/eslint-config@3.16.0(@eslint-react/eslint-plugin@2.3.9(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(typescript@5.9.3)': + '@antfu/eslint-config@3.16.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.9.1 '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.39.1) '@eslint/markdown': 6.6.0 - '@stylistic/eslint-plugin': 2.13.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - '@vitest/eslint-plugin': 1.5.0(eslint@9.39.1)(typescript@5.9.3) + '@stylistic/eslint-plugin': 2.13.0(eslint@9.39.1)(typescript@7.0.2) + '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1)(typescript@7.0.2) + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@7.0.2) + '@vitest/eslint-plugin': 1.5.0(eslint@9.39.1)(typescript@7.0.2) eslint: 9.39.1 eslint-config-flat-gitignore: 1.0.1(eslint@9.39.1) eslint-flat-config-utils: 1.1.0 eslint-merge-processors: 1.0.0(eslint@9.39.1) eslint-plugin-antfu: 2.7.0(eslint@9.39.1) eslint-plugin-command: 2.1.0(eslint@9.39.1) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1) eslint-plugin-jsdoc: 50.8.0(eslint@9.39.1) eslint-plugin-jsonc: 2.21.0(eslint@9.39.1) - eslint-plugin-n: 17.23.1(eslint@9.39.1)(typescript@5.9.3) + eslint-plugin-n: 17.23.1(eslint@9.39.1)(typescript@7.0.2) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 4.15.1(eslint@9.39.1)(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.1(eslint@9.39.1)(typescript@7.0.2) eslint-plugin-regexp: 2.10.0(eslint@9.39.1) eslint-plugin-toml: 0.12.0(eslint@9.39.1) eslint-plugin-unicorn: 56.0.1(eslint@9.39.1) - eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1) + eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1) eslint-plugin-vue: 9.33.0(eslint@9.39.1) eslint-plugin-yml: 1.19.0(eslint@9.39.1) eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.1) @@ -4178,7 +3403,6 @@ snapshots: yaml-eslint-parser: 1.3.1 yargs: 17.7.2 optionalDependencies: - '@eslint-react/eslint-plugin': 2.3.9(eslint@9.39.1)(typescript@5.9.3) eslint-plugin-react-refresh: 0.4.24(eslint@9.39.1) transitivePeerDependencies: - '@eslint/json' @@ -4196,19 +3420,14 @@ snapshots: '@antfu/utils@0.7.10': {} - '@apidevtools/json-schema-ref-parser@15.1.2(@types/json-schema@7.0.15)': - dependencies: - '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 - - '@ariesclark/eslint-config@3.1.1(@eslint-react/eslint-plugin@2.3.9(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.2)': + '@ariesclark/eslint-config@3.1.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@7.0.2)(yaml@2.8.2)': dependencies: - '@antfu/eslint-config': 3.16.0(@eslint-react/eslint-plugin@2.3.9(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(typescript@5.9.3) + '@antfu/eslint-config': 3.16.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(@vue/compiler-sfc@3.5.25)(eslint-plugin-react-refresh@0.4.24(eslint@9.39.1))(eslint@9.39.1)(typescript@7.0.2) eslint: 9.39.1 eslint-flat-config-utils: 0.4.0 esno: 4.8.0 local-pkg: 0.5.1 - tsup: 8.5.1(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.2) + tsup: 8.5.1(postcss@8.5.6)(tsx@4.20.6)(typescript@7.0.2)(yaml@2.8.2) transitivePeerDependencies: - '@eslint-react/eslint-plugin' - '@eslint/json' @@ -4335,10 +3554,6 @@ snapshots: '@cspell/dict-vue': 3.0.5 '@cspell/dict-zig': 1.0.0 - '@cspell/cspell-json-reporter@9.3.2': - dependencies: - '@cspell/cspell-types': 9.3.2 - '@cspell/cspell-pipe@9.3.2': {} '@cspell/cspell-resolver@9.3.2': @@ -4503,14 +3718,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emotion/is-prop-valid@1.2.2': - dependencies: - '@emotion/memoize': 0.8.1 - - '@emotion/memoize@0.8.1': {} - - '@emotion/unitless@0.8.1': {} - '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 @@ -4688,79 +3895,6 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@2.3.9(eslint@9.39.1)(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.3.9 - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - string-ts: 2.2.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/core@2.3.9(eslint@9.39.1)(typescript@5.9.3)': - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - birecord: 0.1.1 - eslint: 9.39.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/eff@2.3.9': {} - - '@eslint-react/eslint-plugin@2.3.9(eslint@9.39.1)(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - eslint-plugin-react-dom: 2.3.9(eslint@9.39.1)(typescript@5.9.3) - eslint-plugin-react-hooks-extra: 2.3.9(eslint@9.39.1)(typescript@5.9.3) - eslint-plugin-react-naming-convention: 2.3.9(eslint@9.39.1)(typescript@5.9.3) - eslint-plugin-react-web-api: 2.3.9(eslint@9.39.1)(typescript@5.9.3) - eslint-plugin-react-x: 2.3.9(eslint@9.39.1)(typescript@5.9.3) - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/shared@2.3.9(eslint@9.39.1)(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.3.9 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - zod: 4.1.13 - transitivePeerDependencies: - - supports-color - - '@eslint-react/var@2.3.9(eslint@9.39.1)(typescript@5.9.3)': - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@eslint/compat@1.4.1(eslint@9.39.1)': dependencies: '@eslint/core': 0.17.0 @@ -4832,10 +3966,6 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/schemasafe@1.3.0': {} - - '@faker-js/faker@7.6.0': {} - '@fastify/busboy@2.1.1': {} '@humanfs/core@0.19.1': {} @@ -4847,8 +3977,6 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/momoa@2.0.4': {} - '@humanwhocodes/retry@0.4.3': {} '@isaacs/balanced-match@4.0.1': {} @@ -4857,15 +3985,6 @@ snapshots: dependencies: '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jamesacarr/eslint-formatter-github-actions@0.2.0': dependencies: '@actions/core': 1.11.1 @@ -4903,263 +4022,45 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@noble/hashes@1.8.0': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} + '@pkgr/core@0.2.9': {} - '@nodelib/fs.walk@1.2.8': + '@redocly/ajv@8.18.1': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - '@opentelemetry/api-logs@0.202.0': + '@redocly/ajv@8.18.3': dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api@1.9.0': {} + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': + '@redocly/config@0.52.0': dependencies: - '@opentelemetry/api': 1.9.0 + json-schema-to-ts: 2.7.2 - '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': + '@redocly/openapi-core@2.41.2': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.34.0 + '@redocly/ajv': 8.18.3 + '@redocly/config': 0.52.0 + ajv: '@redocly/ajv@8.18.1' + ajv-formats: 3.0.1(@redocly/ajv@8.18.1) + colorette: 1.4.0 + graphql: 16.14.2 + js-levenshtein: 1.1.6 + js-yaml: 5.2.2 + picomatch: 4.0.5 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 - '@opentelemetry/exporter-trace-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true - '@opentelemetry/otlp-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-transformer@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.4 - - '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - - '@opentelemetry/sdk-logs@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - - '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/semantic-conventions@1.34.0': {} - - '@pkgr/core@0.2.9': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@redocly/ajv@8.11.4': - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js-replace: 1.0.1 - - '@redocly/ajv@8.17.1': - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - '@redocly/cli@2.12.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)': - dependencies: - '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - '@redocly/openapi-core': 2.12.0(ajv@8.17.1) - '@redocly/respect-core': 2.12.0(ajv@8.17.1) - abort-controller: 3.0.0 - chokidar: 3.6.0 - colorette: 1.4.0 - cookie: 0.7.2 - dotenv: 16.4.7 - form-data: 4.0.5 - glob: 11.1.0 - handlebars: 4.7.8 - https-proxy-agent: 7.0.6 - mobx: 6.15.0 - pluralize: 8.0.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - redoc: 2.5.1(core-js@3.47.0)(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) - semver: 7.7.3 - set-cookie-parser: 2.7.2 - simple-websocket: 9.1.0 - styled-components: 6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - undici: 6.22.0 - yargs: 17.0.1 - transitivePeerDependencies: - - '@opentelemetry/api' - - ajv - - bufferutil - - core-js - - encoding - - react-native - - supports-color - - utf-8-validate - - '@redocly/config@0.22.2': {} - - '@redocly/config@0.40.0': - dependencies: - json-schema-to-ts: 2.7.2 - - '@redocly/config@0.41.0': - dependencies: - json-schema-to-ts: 2.7.2 - - '@redocly/openapi-core@1.34.5': - dependencies: - '@redocly/ajv': 8.17.1 - '@redocly/config': 0.22.2 - colorette: 1.4.0 - https-proxy-agent: 7.0.6 - js-levenshtein: 1.1.6 - js-yaml: 4.1.1 - minimatch: 5.1.6 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - supports-color - - '@redocly/openapi-core@2.12.0(ajv@8.17.1)': - dependencies: - '@redocly/ajv': 8.17.1 - '@redocly/config': 0.40.0 - ajv-formats: 2.1.1(ajv@8.17.1) - colorette: 1.4.0 - js-levenshtein: 1.1.6 - js-yaml: 4.1.1 - picomatch: 4.0.3 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - ajv - - '@redocly/openapi-core@2.12.5(ajv@8.17.1)': - dependencies: - '@redocly/ajv': 8.17.1 - '@redocly/config': 0.41.0 - ajv-formats: 3.0.1(ajv@8.17.1) - colorette: 1.4.0 - js-levenshtein: 1.1.6 - js-yaml: 4.1.1 - picomatch: 4.0.3 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - ajv - - '@redocly/respect-core@2.12.0(ajv@8.17.1)': - dependencies: - '@faker-js/faker': 7.6.0 - '@noble/hashes': 1.8.0 - '@redocly/ajv': 8.11.4 - '@redocly/openapi-core': 2.12.0(ajv@8.17.1) - better-ajv-errors: 1.2.0(ajv@8.17.1) - colorette: 2.0.20 - json-pointer: 0.6.2 - jsonpath-rfc9535: 1.3.0 - openapi-sampler: 1.6.2 - outdent: 0.8.0 - transitivePeerDependencies: - - ajv - - '@rollup/plugin-commonjs@22.0.2(rollup@2.79.2)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.2) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.11 - rollup: 2.79.2 - - '@rollup/pluginutils@3.1.0(rollup@2.79.2)': - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.2 - - '@rollup/rollup-android-arm-eabi@4.53.3': - optional: true - - '@rollup/rollup-android-arm64@4.53.3': - optional: true + '@rollup/rollup-android-arm64@4.53.3': + optional: true '@rollup/rollup-darwin-arm64@4.53.3': optional: true @@ -5260,30 +4161,6 @@ snapshots: '@stoplight/path@1.3.2': {} - '@stoplight/spectral-cli@6.15.0': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-core': 1.20.0 - '@stoplight/spectral-formatters': 1.5.0 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-ruleset-bundler': 1.6.3 - '@stoplight/spectral-ruleset-migrator': 1.11.3 - '@stoplight/spectral-rulesets': 1.22.0 - '@stoplight/spectral-runtime': 1.1.4 - '@stoplight/types': 13.20.0 - chalk: 4.1.2 - fast-glob: 3.2.12 - hpagent: 1.2.0 - lodash: 4.17.21 - pony-cause: 1.1.1 - stacktracey: 2.1.8 - tslib: 2.8.1 - yargs: 17.7.2 - transitivePeerDependencies: - - encoding - '@stoplight/spectral-core@1.20.0': dependencies: '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) @@ -5370,46 +4247,6 @@ snapshots: transitivePeerDependencies: - encoding - '@stoplight/spectral-ruleset-bundler@1.6.3': - dependencies: - '@rollup/plugin-commonjs': 22.0.2(rollup@2.79.2) - '@stoplight/path': 1.3.2 - '@stoplight/spectral-core': 1.20.0 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-functions': 1.10.1 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-ruleset-migrator': 1.11.3 - '@stoplight/spectral-rulesets': 1.22.0 - '@stoplight/spectral-runtime': 1.1.4 - '@stoplight/types': 13.20.0 - '@types/node': 24.10.1 - pony-cause: 1.1.1 - rollup: 2.79.2 - tslib: 2.8.1 - validate-npm-package-name: 3.0.0 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-ruleset-migrator@1.11.3': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-functions': 1.10.1 - '@stoplight/spectral-runtime': 1.1.4 - '@stoplight/types': 13.20.0 - '@stoplight/yaml': 4.2.3 - '@types/node': 24.10.1 - ajv: 8.17.1 - ast-types: 0.14.2 - astring: 1.9.0 - reserved: 0.1.2 - tslib: 2.8.1 - validate-npm-package-name: 3.0.0 - transitivePeerDependencies: - - encoding - '@stoplight/spectral-rulesets@1.22.0': dependencies: '@asyncapi/specs': 6.10.0 @@ -5457,17 +4294,8 @@ snapshots: '@types/json-schema': 7.0.15 utility-types: 3.11.0 - '@stoplight/yaml-ast-parser@0.0.48': {} - '@stoplight/yaml-ast-parser@0.0.50': {} - '@stoplight/yaml@4.2.3': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/types': 13.20.0 - '@stoplight/yaml-ast-parser': 0.0.48 - tslib: 2.8.1 - '@stoplight/yaml@4.3.0': dependencies: '@stoplight/ordered-object-literal': 1.0.5 @@ -5475,9 +4303,9 @@ snapshots: '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.8.1 - '@stylistic/eslint-plugin@2.13.0(eslint@9.39.1)(typescript@5.9.3)': + '@stylistic/eslint-plugin@2.13.0(eslint@9.39.1)(typescript@7.0.2)': dependencies: - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) eslint: 9.39.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -5504,8 +4332,6 @@ snapshots: dependencies: '@types/node': 24.10.1 - '@types/estree@0.0.39': {} - '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} @@ -5528,50 +4354,45 @@ snapshots: '@types/sarif@2.1.7': {} - '@types/stylis@4.2.5': {} - - '@types/trusted-types@2.0.7': - optional: true - '@types/unist@3.0.3': {} '@types/urijs@1.19.26': {} - '@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@7.0.2) '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) '@typescript-eslint/visitor-keys': 8.48.0 eslint: 9.39.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.48.0 '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.48.0(typescript@7.0.2) '@typescript-eslint/visitor-keys': 8.48.0 debug: 4.4.3 eslint: 9.39.1 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.48.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.48.0(typescript@7.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@7.0.2) '@typescript-eslint/types': 8.48.0 debug: 4.4.3 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -5580,47 +4401,47 @@ snapshots: '@typescript-eslint/types': 8.48.0 '@typescript-eslint/visitor-keys': 8.48.0 - '@typescript-eslint/tsconfig-utils@8.48.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.48.0(typescript@7.0.2)': dependencies: - typescript: 5.9.3 + typescript: 7.0.2 - '@typescript-eslint/type-utils@8.48.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.48.0(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.48.0(typescript@7.0.2) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) debug: 4.4.3 eslint: 9.39.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.48.0': {} - '@typescript-eslint/typescript-estree@8.48.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.48.0(typescript@7.0.2)': dependencies: - '@typescript-eslint/project-service': 8.48.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.48.0(typescript@7.0.2) + '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@7.0.2) '@typescript-eslint/types': 8.48.0 '@typescript-eslint/visitor-keys': 8.48.0 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) '@typescript-eslint/scope-manager': 8.48.0 '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.48.0(typescript@7.0.2) eslint: 9.39.1 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -5629,6 +4450,66 @@ snapshots: '@typescript-eslint/types': 8.48.0 eslint-visitor-keys: 4.2.1 + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -5688,13 +4569,13 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.5.0(eslint@9.39.1)(typescript@5.9.3)': + '@vitest/eslint-plugin@1.5.0(eslint@9.39.1)(typescript@7.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) eslint: 9.39.1 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -5740,8 +4621,6 @@ snapshots: acorn@8.15.0: {} - agent-base@7.1.4: {} - ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -5754,9 +4633,9 @@ snapshots: optionalDependencies: ajv: 8.17.1 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(@redocly/ajv@8.18.1): optionalDependencies: - ajv: 8.17.1 + ajv: '@redocly/ajv@8.18.1' ajv@6.12.6: dependencies: @@ -5774,21 +4653,12 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.3: {} - any-promise@1.3.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - are-docs-informative@0.0.2: {} argparse@2.0.1: {} @@ -5810,20 +4680,10 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - - ast-types@0.14.2: - dependencies: - tslib: 2.8.1 - astring@1.9.0: {} async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -5832,19 +4692,6 @@ snapshots: baseline-browser-mapping@2.8.31: {} - better-ajv-errors@1.2.0(ajv@8.17.1): - dependencies: - '@babel/code-frame': 7.27.1 - '@humanwhocodes/momoa': 2.0.4 - ajv: 8.17.1 - chalk: 4.1.2 - jsonpointer: 5.0.1 - leven: 3.1.0 - - binary-extensions@2.3.0: {} - - birecord@0.1.1: {} - boolbase@1.0.0: {} brace-expansion@1.1.12: @@ -5856,10 +4703,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - browserslist@4.28.0: dependencies: baseline-browser-mapping: 2.8.31 @@ -5870,8 +4713,6 @@ snapshots: builtin-modules@3.3.0: {} - builtins@1.0.3: {} - bun-types@1.3.3: dependencies: '@types/node': 24.10.1 @@ -5900,51 +4741,27 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - call-me-maybe@1.0.2: {} - callsites@3.1.0: {} - camelize@1.0.1: {} - caniuse-lite@1.0.30001757: {} ccount@2.0.1: {} - chalk-template@1.1.2: - dependencies: - chalk: 5.6.2 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} - change-case@5.4.4: {} character-entities@2.0.2: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 ci-info@4.3.1: {} - classnames@2.5.1: {} - clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -5966,8 +4783,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clsx@2.1.1: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -5976,14 +4791,6 @@ snapshots: colorette@1.4.0: {} - colorette@2.0.20: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@14.0.2: {} - commander@4.1.1: {} comment-json@4.4.1: @@ -5994,10 +4801,6 @@ snapshots: comment-parser@1.4.1: {} - commondir@1.0.1: {} - - compare-versions@6.1.1: {} - concat-map@0.0.1: {} confbox@0.1.8: {} @@ -6006,14 +4809,10 @@ snapshots: consola@3.4.2: {} - cookie@0.7.2: {} - core-js-compat@3.47.0: dependencies: browserslist: 4.28.0 - core-js@3.47.0: {} - core-util-is@1.0.3: {} cross-spawn@7.0.6: @@ -6036,12 +4835,6 @@ snapshots: cspell-trie-lib: 9.3.2 fast-equals: 5.3.3 - cspell-gitignore@9.3.2: - dependencies: - '@cspell/url': 9.3.2 - cspell-glob: 9.3.2 - cspell-io: 9.3.2 - cspell-glob@9.3.2: dependencies: '@cspell/url': 9.3.2 @@ -6088,41 +4881,8 @@ snapshots: '@cspell/cspell-types': 9.3.2 gensequence: 8.0.8 - cspell@9.3.2: - dependencies: - '@cspell/cspell-json-reporter': 9.3.2 - '@cspell/cspell-pipe': 9.3.2 - '@cspell/cspell-types': 9.3.2 - '@cspell/dynamic-import': 9.3.2 - '@cspell/url': 9.3.2 - chalk: 5.6.2 - chalk-template: 1.1.2 - commander: 14.0.2 - cspell-config-lib: 9.3.2 - cspell-dictionary: 9.3.2 - cspell-gitignore: 9.3.2 - cspell-glob: 9.3.2 - cspell-io: 9.3.2 - cspell-lib: 9.3.2 - fast-json-stable-stringify: 2.1.0 - flatted: 3.3.3 - semver: 7.7.3 - tinyglobby: 0.2.15 - - css-color-keywords@1.0.0: {} - - css-to-react-native@3.2.0: - dependencies: - camelize: 1.0.1 - css-color-keywords: 1.0.0 - postcss-value-parser: 4.2.0 - cssesc@3.0.0: {} - csstype@3.1.3: {} - - data-uri-to-buffer@2.0.2: {} - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -6145,8 +4905,6 @@ snapshots: dependencies: ms: 2.1.3 - decko@1.2.0: {} - decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -6165,8 +4923,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - dependency-graph@0.11.0: {} dequal@2.0.3: {} @@ -6177,26 +4933,16 @@ snapshots: diff-sequences@27.5.1: {} - dompurify@3.3.0: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - dotenv@16.4.7: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.260: {} emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 @@ -6299,8 +5045,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es6-promise@3.3.1: {} - esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -6424,7 +5168,7 @@ snapshots: eslint: 9.39.1 eslint-compat-utils: 0.5.1(eslint@9.39.1) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1): dependencies: '@typescript-eslint/types': 8.48.0 comment-parser: 1.4.1 @@ -6437,7 +5181,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) transitivePeerDependencies: - supports-color @@ -6472,7 +5216,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@17.23.1(eslint@9.39.1)(typescript@5.9.3): + eslint-plugin-n@17.23.1(eslint@9.39.1)(typescript@7.0.2): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) enhanced-resolve: 5.18.3 @@ -6483,119 +5227,27 @@ snapshots: globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.3 - ts-declaration-location: 1.0.7(typescript@5.9.3) - transitivePeerDependencies: - - typescript - - eslint-plugin-no-only-tests@3.3.0: {} - - eslint-plugin-perfectionist@4.15.1(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - natural-orderby: 5.0.0 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-react-dom@2.3.9(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/core': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - compare-versions: 6.1.1 - eslint: 9.39.1 - string-ts: 2.2.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-hooks-extra@2.3.9(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/core': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - string-ts: 2.2.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 + ts-declaration-location: 1.0.7(typescript@7.0.2) transitivePeerDependencies: - - supports-color + - typescript + + eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-react-naming-convention@2.3.9(eslint@9.39.1)(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.1(eslint@9.39.1)(typescript@7.0.2): dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/core': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@7.0.2) eslint: 9.39.1 - string-ts: 2.2.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 + natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color + - typescript eslint-plugin-react-refresh@0.4.24(eslint@9.39.1): dependencies: eslint: 9.39.1 optional: true - eslint-plugin-react-web-api@2.3.9(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/core': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - string-ts: 2.2.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-x@2.3.9(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/core': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/eff': 2.3.9 - '@eslint-react/shared': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@eslint-react/var': 2.3.9(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.0 - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/types': 8.48.0 - '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - compare-versions: 6.1.1 - eslint: 9.39.1 - is-immutable-type: 5.0.1(eslint@9.39.1)(typescript@5.9.3) - string-ts: 2.2.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - eslint-plugin-regexp@2.10.0(eslint@9.39.1): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) @@ -6637,11 +5289,11 @@ snapshots: semver: 7.7.3 strip-indent: 3.0.0 - eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1): + eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1): dependencies: eslint: 9.39.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@7.0.2))(eslint@9.39.1)(typescript@7.0.2) eslint-plugin-vue@9.33.0(eslint@9.39.1): dependencies: @@ -6755,48 +5407,26 @@ snapshots: estraverse@5.3.0: {} - estree-walker@1.0.1: {} - estree-walker@2.0.2: {} esutils@2.0.3: {} event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} - exsolve@1.0.8: {} fast-deep-equal@3.1.3: {} fast-equals@5.3.3: {} - fast-glob@3.2.12: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} fast-memoize@2.5.2: {} - fast-safe-stringify@2.1.1: {} - fast-uri@3.1.0: {} - fast-xml-parser@4.5.3: - dependencies: - strnum: 1.1.2 - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - fault@2.0.1: dependencies: format: 0.2.2 @@ -6809,10 +5439,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -6840,21 +5466,6 @@ snapshots: dependencies: is-callable: 1.2.7 - foreach@2.0.6: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - format@0.2.2: {} fs-extra@10.1.0: @@ -6863,8 +5474,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -6905,11 +5514,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -6922,32 +5526,10 @@ snapshots: github-slugger@2.0.0: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - glob@11.1.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-directory@4.0.1: dependencies: ini: 4.1.1 @@ -6973,14 +5555,7 @@ snapshots: graphemer@1.4.0: {} - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 + graphql@16.14.2: {} has-bigints@1.1.0: {} @@ -7006,16 +5581,10 @@ snapshots: hosted-git-info@2.8.9: {} - hpagent@1.2.0: {} - - http2-client@1.3.5: {} - - https-proxy-agent@7.0.6: + httpexec@0.0.2: dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + srvx: 0.12.5 + tinyexec: 1.2.4 ignore@5.3.2: {} @@ -7034,13 +5603,6 @@ snapshots: indent-string@4.0.0: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - ini@4.1.1: {} internal-slot@1.1.0: @@ -7069,10 +5631,6 @@ snapshots: dependencies: has-bigints: 1.1.0 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -7119,16 +5677,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.39.1)(typescript@5.9.3): - dependencies: - '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - ts-declaration-location: 1.0.7(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -7138,12 +5686,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-number@7.0.0: {} - - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -7187,10 +5729,6 @@ snapshots: isexe@2.0.0: {} - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - joycon@3.1.1: {} js-levenshtein@1.1.6: {} @@ -7201,6 +5739,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@5.2.2: + dependencies: + argparse: 2.0.1 + jsdoc-type-pratt-parser@4.1.0: {} jsdoc-type-pratt-parser@4.8.0: {} @@ -7215,10 +5757,6 @@ snapshots: json-parse-even-better-errors@2.3.1: {} - json-pointer@0.6.2: - dependencies: - foreach: 2.0.6 - json-schema-to-ts@2.7.2: dependencies: '@babel/runtime': 7.28.4 @@ -7252,10 +5790,10 @@ snapshots: '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) jsep: 1.4.0 - jsonpath-rfc9535@1.3.0: {} - jsonpointer@5.0.1: {} + jssha@3.3.2: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -7298,34 +5836,16 @@ snapshots: lodash@4.17.21: {} - long@5.3.2: {} - longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@11.2.2: {} - - lunr@2.3.9: {} - - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mark.js@8.11.1: {} - markdown-escape@2.0.0: {} markdown-table@3.0.4: {} - marked@4.3.0: {} - math-intrinsics@1.1.0: {} mdast-util-find-and-replace@3.0.2: @@ -7441,8 +5961,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - merge2@1.4.1: {} - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.2.0 @@ -7641,17 +6159,6 @@ snapshots: transitivePeerDependencies: - supports-color - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - min-indent@1.0.1: {} minimatch@10.1.1: @@ -7662,18 +6169,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 - minimist@1.2.8: {} - - minipass@7.1.2: {} - mlly@1.8.0: dependencies: acorn: 8.15.0 @@ -7681,24 +6180,6 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - mobx: 6.15.0 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) - optionalDependencies: - react-dom: 19.2.0(react@19.2.0) - - mobx-react@9.2.0(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - mobx: 6.15.0 - mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - optionalDependencies: - react-dom: 19.2.0(react@19.2.0) - - mobx@6.15.0: {} - ms@2.1.3: {} mz@2.7.0: @@ -7715,8 +6196,6 @@ snapshots: natural-orderby@5.0.0: {} - neo-async@2.6.2: {} - nimma@0.2.3: dependencies: '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) @@ -7727,18 +6206,10 @@ snapshots: jsonpath-plus: 10.3.0 lodash.topath: 4.5.2 - node-fetch-h2@2.3.0: - dependencies: - http2-client: 1.3.5 - node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - node-readfiles@0.2.0: - dependencies: - es6-promise: 3.3.1 - node-releases@2.0.27: {} node-sarif-builder@2.0.3: @@ -7753,43 +6224,10 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - nth-check@2.1.1: dependencies: boolbase: 1.0.0 - oas-kit-common@1.0.8: - dependencies: - fast-safe-stringify: 2.1.1 - - oas-linter@3.2.2: - dependencies: - '@exodus/schemasafe': 1.3.0 - should: 13.2.3 - yaml: 1.10.2 - - oas-resolver@2.5.6: - dependencies: - node-fetch-h2: 2.3.0 - oas-kit-common: 1.0.8 - reftools: 1.1.9 - yaml: 1.10.2 - yargs: 17.0.1 - - oas-schema-walker@1.1.5: {} - - oas-validator@5.0.8: - dependencies: - call-me-maybe: 1.0.2 - oas-kit-common: 1.0.8 - oas-linter: 3.2.2 - oas-resolver: 2.5.6 - oas-schema-walker: 1.1.5 - reftools: 1.1.9 - should: 13.2.3 - yaml: 1.10.2 - object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -7805,16 +6243,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - openapi-sampler@1.6.2: - dependencies: - '@types/json-schema': 7.0.15 - fast-xml-parser: 4.5.3 - json-pointer: 0.6.2 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -7824,8 +6252,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - outdent@0.8.0: {} - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -7850,8 +6276,6 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} - package-manager-detector@1.5.0: {} parent-module@1.0.1: @@ -7877,33 +6301,22 @@ snapshots: parse-statements@1.0.11: {} - path-browserify@1.0.1: {} - path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} - path-scurry@2.0.1: - dependencies: - lru-cache: 11.2.2 - minipass: 7.1.2 - pathe@1.1.2: {} pathe@2.0.3: {} - perfect-scrollbar@1.5.6: {} - picocolors@1.1.1: {} - picomatch@2.3.1: {} - picomatch@4.0.3: {} + picomatch@4.0.5: {} + pirates@4.0.7: {} pkg-types@1.3.1: @@ -7920,10 +6333,6 @@ snapshots: pluralize@8.0.0: {} - polished@4.3.1: - dependencies: - '@babel/runtime': 7.28.4 - pony-cause@1.1.1: {} possible-typed-array-names@1.1.0: {} @@ -7941,14 +6350,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} - - postcss@8.4.49: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -7957,56 +6358,10 @@ snapshots: prelude-ls@1.2.1: {} - printable-characters@1.0.42: {} - - prismjs@1.30.0: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - protobufjs@7.5.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 24.10.1 - long: 5.3.2 - punycode@2.3.1: {} quansync@0.2.11: {} - queue-microtask@1.2.3: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - react-dom@19.2.0(react@19.2.0): - dependencies: - react: 19.2.0 - scheduler: 0.27.0 - - react-is@16.13.1: {} - - react-tabs@6.1.0(react@19.2.0): - dependencies: - clsx: 2.1.1 - prop-types: 15.8.1 - react: 19.2.0 - - react@19.2.0: {} - read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -8020,51 +6375,8 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - readdirp@4.1.2: {} - redoc@2.5.1(core-js@3.47.0)(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0)): - dependencies: - '@redocly/openapi-core': 1.34.5 - classnames: 2.5.1 - core-js: 3.47.0 - decko: 1.2.0 - dompurify: 3.3.0 - eventemitter3: 5.0.1 - json-pointer: 0.6.2 - lunr: 2.3.9 - mark.js: 8.11.1 - marked: 4.3.0 - mobx: 6.15.0 - mobx-react: 9.2.0(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - openapi-sampler: 1.6.2 - path-browserify: 1.0.1 - perfect-scrollbar: 1.5.6 - polished: 4.3.1 - prismjs: 1.30.0 - prop-types: 15.8.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-tabs: 6.1.0(react@19.2.0) - slugify: 1.4.7 - stickyfill: 1.1.1 - styled-components: 6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - swagger2openapi: 7.0.8 - url-template: 2.0.8 - transitivePeerDependencies: - - encoding - - react-native - - supports-color - refa@0.12.1: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -8080,8 +6392,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - reftools@1.1.9: {} - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -8106,8 +6416,6 @@ snapshots: require-from-string@2.0.2: {} - reserved@0.1.2: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -8120,12 +6428,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.1.0: {} - - rollup@2.79.2: - optionalDependencies: - fsevents: 2.3.3 - rollup@4.53.3: dependencies: '@types/estree': 1.0.8 @@ -8154,10 +6456,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -8166,8 +6464,6 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 - safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -8181,8 +6477,6 @@ snapshots: safe-stable-stringify@1.1.1: {} - scheduler@0.27.0: {} - scslre@0.3.0: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -8193,8 +6487,6 @@ snapshots: semver@7.7.3: {} - set-cookie-parser@2.7.2: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -8217,40 +6509,12 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - shallowequal@1.1.0: {} - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - should-equal@2.0.0: - dependencies: - should-type: 1.4.0 - - should-format@3.0.3: - dependencies: - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - - should-type-adaptors@1.1.0: - dependencies: - should-type: 1.4.0 - should-util: 1.0.1 - - should-type@1.4.0: {} - - should-util@1.0.1: {} - - should@13.2.3: - dependencies: - should-equal: 2.0.0 - should-format: 3.0.3 - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - should-util: 1.0.1 - side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -8279,38 +6543,18 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@4.1.0: {} - simple-eval@1.0.1: dependencies: jsep: 1.4.0 - simple-websocket@9.1.0: - dependencies: - debug: 4.4.3 - queue-microtask: 1.2.3 - randombytes: 2.1.0 - readable-stream: 3.6.2 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - sisteransi@1.0.5: {} - slugify@1.4.7: {} - smol-toml@1.5.2: {} source-map-js@1.2.1: {} - source-map@0.6.1: {} - source-map@0.7.6: {} - sourcemap-codec@1.4.8: {} - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -8330,34 +6574,21 @@ snapshots: spdx-license-ids@3.0.22: {} - stable-hash-x@0.2.0: {} - - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 + srvx@0.12.5: {} - stickyfill@1.1.1: {} + stable-hash-x@0.2.0: {} stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - string-ts@2.2.1: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 @@ -8381,42 +6612,16 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 strip-json-comments@3.1.1: {} - strnum@1.1.2: {} - - styled-components@6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - '@emotion/is-prop-valid': 1.2.2 - '@emotion/unitless': 0.8.1 - '@types/stylis': 4.2.5 - css-to-react-native: 3.2.0 - csstype: 3.1.3 - postcss: 8.4.49 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - shallowequal: 1.1.0 - stylis: 4.3.2 - tslib: 2.6.2 - - stylis@4.3.2: {} - sucrase@3.35.1: dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -8433,22 +6638,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swagger2openapi@7.0.8: - dependencies: - call-me-maybe: 1.0.2 - node-fetch: 2.7.0 - node-fetch-h2: 2.3.0 - node-readfiles: 0.2.0 - oas-kit-common: 1.0.8 - oas-resolver: 2.5.6 - oas-schema-walker: 1.1.5 - oas-validator: 5.0.8 - reftools: 1.1.9 - yaml: 1.10.2 - yargs: 17.0.1 - transitivePeerDependencies: - - encoding - synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 @@ -8469,45 +6658,43 @@ snapshots: tinyexec@1.0.2: {} + tinyexec@1.2.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - toml-eslint-parser@0.10.0: dependencies: eslint-visitor-keys: 3.4.3 + totp-generator@2.0.1: + dependencies: + jssha: 3.3.2 + tr46@0.0.3: {} tree-kill@1.2.2: {} ts-algebra@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.1.0(typescript@7.0.2): dependencies: - typescript: 5.9.3 + typescript: 7.0.2 - ts-declaration-location@1.0.7(typescript@5.9.3): + ts-declaration-location@1.0.7(typescript@7.0.2): dependencies: picomatch: 4.0.3 - typescript: 5.9.3 + typescript: 7.0.2 ts-interface-checker@0.1.13: {} - ts-pattern@5.9.0: {} - tslib@1.14.1: {} - tslib@2.6.2: {} - tslib@2.8.1: {} - tsup@8.5.1(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(postcss@8.5.6)(tsx@4.20.6)(typescript@7.0.2)(yaml@2.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.27.0) cac: 6.7.14 @@ -8528,7 +6715,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - jiti - supports-color @@ -8587,13 +6774,31 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript@5.9.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 ufo@1.6.1: {} - uglify-js@3.19.3: - optional: true - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -8607,8 +6812,6 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@6.22.0: {} - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -8660,20 +6863,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uri-js-replace@1.0.1: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 urijs@1.19.11: {} - url-template@2.0.8: {} - - use-sync-external-store@1.6.0(react@19.2.0): - dependencies: - react: 19.2.0 - util-deprecate@1.0.2: {} utility-types@3.11.0: {} @@ -8683,10 +6878,6 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@3.0.0: - dependencies: - builtins: 1.0.3 - vscode-languageserver-textdocument@1.0.12: {} vscode-uri@3.1.0: {} @@ -8758,24 +6949,12 @@ snapshots: word-wrap@1.2.5: {} - wordwrap@1.0.0: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - ws@7.5.10: {} - xdg-basedir@5.1.0: {} xml-name-validator@4.0.0: {} @@ -8789,24 +6968,10 @@ snapshots: eslint-visitor-keys: 3.4.3 yaml: 2.8.2 - yaml@1.10.2: {} - yaml@2.8.2: {} - yargs-parser@20.2.9: {} - yargs-parser@21.1.1: {} - yargs@17.0.1: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -8819,6 +6984,4 @@ snapshots: yocto-queue@0.1.0: {} - zod@4.1.13: {} - zwitch@2.0.4: {} diff --git a/redocly.yaml b/redocly.yaml index 9050db39..df94f3b8 100644 --- a/redocly.yaml +++ b/redocly.yaml @@ -74,3 +74,17 @@ apis: defines: - jsonschema - internal + + # Not published. The bundle the workflows run against, and what `pnpm + # test:drift` compares the captures to — it cannot see undocumented response + # fields while the schemas stay open. + test: + root: openapi/openapi.yaml + output: dist/openapi-test.yaml + preprocessors: + vrchat/x-if: + defines: + - jsonschema + - internal + decorators: + vrchat/close-schemas: on diff --git a/redocly/plugin.ts b/redocly/plugin.ts index 0f1bac83..c08a723a 100644 --- a/redocly/plugin.ts +++ b/redocly/plugin.ts @@ -1,8 +1,53 @@ import type { Plugin } from "@redocly/openapi-core"; +/** + * Schemas `close-schemas` must leave open. `/config` carries decoy properties + * that VRChat rerolls at random, so closing `APIConfig` reports a different set + * of phantom fields on every capture and never converges. + */ +const openSchemas = new Set(["APIConfig"]); + export default function myLocalPlugin(): Plugin { return { id: "vrchat", + decorators: { + oas3: { + /** + * Closes every object schema that lists properties, so a response + * carrying a field the description does not mention fails validation. + * + * Only for the conformance bundle. An open schema legally permits any + * extra property, which is correct for consumers but makes undocumented + * fields undetectable. + * + * Schemas without `properties` are left alone — those are deliberately + * free-form (`defaultContentSettings`, `appleDetails`) and closing them + * would report their entire contents as drift. + * + * `unevaluatedProperties` is a JSON Schema 2019-09 keyword and is not + * valid in this description's OpenAPI 3.0.3 dialect. It works because + * `redocly drift` validates with Ajv; a validator that only knows 3.0 + * ignores it and silently reports zero drift. Safe only while the + * `conformance` bundle stays unpublished and drift-only. + */ + "close-schemas": () => ({ + SchemaProperties: { + leave: (_, { parent }) => { + if (parent.type !== "object" || parent.additionalProperties !== undefined) return; + if (parent.unevaluatedProperties !== undefined) return; + if (openSchemas.has(parent.title)) return; + + // `unevaluatedProperties`, not `additionalProperties`: inside a + // `oneOf` branch the latter judges the whole object, so a response + // matching one branch fails every other branch once per field. + // `/auth/user` produced 89 phantom findings that way, including for + // properties the description does define. + parent.unevaluatedProperties = false; + } + } + }), + }, + }, preprocessors: { oas3: { "x-if": ({ defines = [] }: { defines?: Array }) => { diff --git a/test/.env.example b/test/.env.example new file mode 100644 index 00000000..0a5c91fb --- /dev/null +++ b/test/.env.example @@ -0,0 +1,15 @@ +# Credentials for the conformance suite. Copy to `conformance/.env` and fill in. +# `.env` is gitignored; this example is not. + +# Login, used by `pnpm conformance:login` to mint a session. That step also +# derives the account's id and display name, so neither is set here. +VRCHAT_EMAIL= +VRCHAT_PASSWORD= +VRCHAT_TOTP_SECRET= + +# Optional: only needed when the account's login name differs from its email. +VRCHAT_USERNAME= + +# Another account to exercise the friend and group-invite workflows against. +# Must not be the account above. +VRCHAT_FRIEND_ID=usr_00000000-0000-0000-0000-000000000000 diff --git a/test/arazzo.yaml b/test/arazzo.yaml new file mode 100644 index 00000000..ef898913 --- /dev/null +++ b/test/arazzo.yaml @@ -0,0 +1,10730 @@ +# yaml-language-server: $schema=https://spec.openapis.org/arazzo/1.1/schema/2026-04-15 +arazzo: 1.1.0 + +info: + title: VRChat API + version: 0.0.0 + +sourceDescriptions: + - name: default + type: openapi + url: ../dist/openapi-test.yaml + + - name: local + type: openapi + url: http://127.0.0.1:65482/openapi.json + +components: + parameters: + userAgent: + name: User-Agent + in: header + value: "specification-test/1 (https://vrchat.community)" + + session: + name: Cookie + in: header + value: $steps.basic-auth.outputs.setCookie + +workflows: + + - workflowId: login + summary: Establish a session + inputs: + type: object + required: + - username + - password + - totpSecret + properties: + username: + type: string + password: + type: string + format: password + totpSecret: + type: string + format: password + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: basic-auth + operationId: $sourceDescriptions.default.getCurrentUser + x-security: + - schemeName: authHeader + values: + username: $inputs.username + password: $inputs.password + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + setCookie: $response.header.set-cookie + + - stepId: totp-code + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: bun + args: + - -e + - import { TOTP } from "totp-generator"; + process.stdout.write((await TOTP.generate(process.argv[1])).otp) + - $inputs.totpSecret + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + code: $response.body#/stdout + + - stepId: verify-totp + operationId: $sourceDescriptions.default.verify2FA + parameters: + - reference: $components.parameters.session + requestBody: + contentType: application/json + payload: + code: $steps.totp-code.outputs.code + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/verified == true + + - stepId: auth-token + operationId: $sourceDescriptions.default.verifyAuthToken + parameters: + - reference: $components.parameters.session + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/ok == true + onFailure: + - name: stop + type: end + + outputs: + token: $response.body#/token + + - stepId: current-user + operationId: $sourceDescriptions.default.getCurrentUser + parameters: + - reference: $components.parameters.session + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + userId: $response.body#/id + displayName: $response.body#/displayName + + - stepId: cache-session + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - printf %s "$1" > test/.out/session + - sh + - $steps.auth-token.outputs.token + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + + - stepId: cache-user-id + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - printf %s "$1" > test/.out/user-id + - sh + - $steps.current-user.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + + - stepId: cache-display-name + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - printf %s "$1" > test/.out/display-name + - sh + - $steps.current-user.outputs.displayName + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + + - workflowId: session + summary: Read the cached session + steps: + - stepId: read-session + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: cat + args: + - test/.out/session + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + outputs: + value: $response.body#/stdout + + - stepId: read-user-id + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: cat + args: + - test/.out/user-id + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + outputs: + value: $response.body#/stdout + + - stepId: read-display-name + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: cat + args: + - test/.out/display-name + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + outputs: + value: $response.body#/stdout + + - stepId: verify + operationId: $sourceDescriptions.default.verifyAuthToken + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $steps.read-session.outputs.value + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/ok == true + onFailure: + - name: stop + type: end + + outputs: + sessionToken: $steps.read-session.outputs.value + userId: $steps.read-user-id.outputs.value + displayName: $steps.read-display-name.outputs.value + + - workflowId: cancel-pending-2fa-unauthenticated + summary: cancelPending2FA refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: cancel-pending-2fa + operationId: $sourceDescriptions.default.cancelPending2FA + successCriteria: + - condition: $statusCode == 401 + + - workflowId: check-user-exists-by-display-name + summary: By display name + inputs: + type: object + required: + - username + - email + properties: + username: + type: string + email: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: by-display-name + operationId: $sourceDescriptions.default.checkUserExists + parameters: + - name: displayName + in: query + value: $workflows.session.outputs.displayName + successCriteria: + - condition: $statusCode == 200 || $statusCode == 429 + - workflowId: check-user-exists-by-email + summary: By email + inputs: + type: object + required: + - username + - email + properties: + username: + type: string + email: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: by-email + operationId: $sourceDescriptions.default.checkUserExists + parameters: + - name: email + in: query + value: $inputs.email + successCriteria: + - condition: $statusCode == 200 || $statusCode == 429 + + - workflowId: check-user-exists-by-username + summary: By username + inputs: + type: object + required: + - username + - email + properties: + username: + type: string + email: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: by-username + operationId: $sourceDescriptions.default.checkUserExists + parameters: + - name: username + in: query + value: $inputs.username + successCriteria: + - condition: $statusCode == 200 || $statusCode == 429 + + - workflowId: check-user-exists-no-parameters + summary: Exists no parameters + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: exists-no-parameters + operationId: $sourceDescriptions.default.checkUserExists + successCriteria: + - condition: $statusCode == 400 + + - workflowId: avatar-moderation-lifecycle + summary: Block an avatar globally, confirm it is listed, then unblock it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: block-avatar + operationId: $sourceDescriptions.default.createGlobalAvatarModeration + requestBody: + contentType: application/json + payload: + avatarModerationType: block + targetAvatarId: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + - stepId: verify-listed + operationId: $sourceDescriptions.default.getGlobalAvatarModerations + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/targetAvatarId == + 'avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11' + + - stepId: unblock-avatar + operationId: $sourceDescriptions.default.deleteGlobalAvatarModeration + parameters: + - name: avatarModerationType + in: query + value: block + - name: targetAvatarId + in: query + value: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: create-global-avatar-moderation-unauthenticated + summary: createGlobalAvatarModeration refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-global-avatar-moderation + operationId: $sourceDescriptions.default.createGlobalAvatarModeration + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-moderation-report-unauthenticated + summary: deleteModerationReport refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-moderation-report + operationId: $sourceDescriptions.default.deleteModerationReport + parameters: + - name: moderationReportId + in: path + value: mrep_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-user-unauthenticated + summary: deleteUser refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-user + operationId: $sourceDescriptions.default.deleteUser + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: disable-2fa-unauthenticated + summary: disable2FA refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: disable-2fa + operationId: $sourceDescriptions.default.disable2FA + successCriteria: + - condition: $statusCode == 401 + + - workflowId: enable-2fa-unauthenticated + summary: enable2FA refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: enable-2fa + operationId: $sourceDescriptions.default.enable2FA + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-current-user + summary: Current user + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: current-user + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id == $workflows.session.outputs.userId + + - workflowId: get-current-user-unauthenticated + summary: getCurrentUser refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-current-user + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-global-avatar-moderations + summary: Avatar moderations + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: avatar-moderations + operationId: $sourceDescriptions.default.getGlobalAvatarModerations + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-global-avatar-moderations-unauthenticated + summary: getGlobalAvatarModerations refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-global-avatar-moderations + operationId: $sourceDescriptions.default.getGlobalAvatarModerations + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-moderation-reports + summary: Moderation reports + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: moderation-reports + operationId: $sourceDescriptions.default.getModerationReports + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-moderation-reports-query-parameters + summary: getModerationReports with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-moderation-reports + operationId: $sourceDescriptions.default.getModerationReports + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-moderation-reports-unauthenticated + summary: getModerationReports refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-moderation-reports + operationId: $sourceDescriptions.default.getModerationReports + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-o-auth-redirect-code + summary: Oauth redirect code + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: oauth-redirect-code + operationId: $sourceDescriptions.default.getOAuthRedirectCode + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/code != null + + - workflowId: get-recovery-codes-unauthenticated + summary: getRecoveryCodes refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-recovery-codes + operationId: $sourceDescriptions.default.getRecoveryCodes + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-sso-token-canny + summary: SSO token for Canny + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: sso-canny + operationId: $sourceDescriptions.default.getSsoToken + parameters: + - name: provider + in: path + value: canny + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/token != null + + - workflowId: get-sso-token-furality + summary: SSO token for Furality + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: sso-furality + operationId: $sourceDescriptions.default.getSsoToken + parameters: + - name: provider + in: path + value: furality + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/token != null + + - workflowId: get-sso-token-unsupported + summary: SSO token for an unsupported provider is refused + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: sso-unsupported + operationId: $sourceDescriptions.default.getSsoToken + parameters: + - name: provider + in: path + value: conformance + successCriteria: + - condition: $statusCode == 400 + - workflowId: logout + summary: >- + Invalidates the session, so `pnpm conformance` skips it by name — running + it would break the cached token every later workflow depends on. Drive it + directly when you want to exercise logout. + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: logout + operationId: $sourceDescriptions.default.logout + successCriteria: + - condition: $statusCode == 200 + + - stepId: current-user-after-logout + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 401 + + - workflowId: logout-unauthenticated + summary: logout refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: logout + operationId: $sourceDescriptions.default.logout + successCriteria: + - condition: $statusCode == 401 + + - workflowId: resend-email-confirmation-unauthenticated + summary: resendEmailConfirmation refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: resend-email-confirmation + operationId: $sourceDescriptions.default.resendEmailConfirmation + successCriteria: + - condition: $statusCode == 401 + + - workflowId: submit-moderation-report-unauthenticated + summary: submitModerationReport refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: submit-moderation-report + operationId: $sourceDescriptions.default.submitModerationReport + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-2fa-unauthenticated + summary: verify2FA refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-2fa + operationId: $sourceDescriptions.default.verify2FA + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-2fa-with-code-unauthenticated + summary: Verify 2fa no credentials + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-2fa-no-credentials + operationId: $sourceDescriptions.default.verify2FA + requestBody: + contentType: application/json + payload: + code: "000000" + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-2fa-email-code-unauthenticated + summary: verify2FAEmailCode refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-2fa-email-code + operationId: $sourceDescriptions.default.verify2FAEmailCode + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-auth-token + summary: Verify auth token + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: verify-auth-token + operationId: $sourceDescriptions.default.verifyAuthToken + successCriteria: + - condition: $statusCode == 200 + + - workflowId: verify-auth-token-unauthenticated + summary: verifyAuthToken refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-auth-token + operationId: $sourceDescriptions.default.verifyAuthToken + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-pending-2fa-unauthenticated + summary: verifyPending2FA refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-pending-2fa + operationId: $sourceDescriptions.default.verifyPending2FA + successCriteria: + - condition: $statusCode == 401 + + - workflowId: verify-recovery-code-unauthenticated + summary: verifyRecoveryCode refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-recovery-code + operationId: $sourceDescriptions.default.verifyRecoveryCode + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-avatar-not-found + summary: deleteAvatar refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-avatar + operationId: $sourceDescriptions.default.deleteAvatar + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-avatar-unauthenticated + summary: deleteAvatar refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-avatar + operationId: $sourceDescriptions.default.deleteAvatar + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-impostor-not-found + summary: deleteImpostor refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-impostor + operationId: $sourceDescriptions.default.deleteImpostor + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-impostor-unauthenticated + summary: deleteImpostor refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-impostor + operationId: $sourceDescriptions.default.deleteImpostor + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: enqueue-impostor-unauthenticated + summary: enqueueImpostor refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: enqueue-impostor + operationId: $sourceDescriptions.default.enqueueImpostor + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-avatar-not-found + summary: getAvatar refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-avatar + operationId: $sourceDescriptions.default.getAvatar + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-avatar-unauthenticated + summary: getAvatar refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-avatar + operationId: $sourceDescriptions.default.getAvatar + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-avatar-styles + summary: Avatar styles + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: avatar-styles + operationId: $sourceDescriptions.default.getAvatarStyles + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorited-avatars-query-parameters + summary: getFavoritedAvatars with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-favorited-avatars + operationId: $sourceDescriptions.default.getFavoritedAvatars + parameters: + - name: featured + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorited-avatars-unauthenticated + summary: getFavoritedAvatars refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-favorited-avatars + operationId: $sourceDescriptions.default.getFavoritedAvatars + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-impostor-queue-stats + summary: Impostor queue stats + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: impostor-queue-stats + operationId: $sourceDescriptions.default.getImpostorQueueStats + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-impostor-queue-stats-unauthenticated + summary: getImpostorQueueStats refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-impostor-queue-stats + operationId: $sourceDescriptions.default.getImpostorQueueStats + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-licensed-avatars + summary: Licensed avatars + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: licensed-avatars + operationId: $sourceDescriptions.default.getLicensedAvatars + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-licensed-avatars-query-parameters + summary: getLicensedAvatars with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-licensed-avatars + operationId: $sourceDescriptions.default.getLicensedAvatars + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-licensed-avatars-unauthenticated + summary: getLicensedAvatars refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-licensed-avatars + operationId: $sourceDescriptions.default.getLicensedAvatars + successCriteria: + - condition: $statusCode == 401 + + - workflowId: avatar-lifecycle + summary: Avatar lookups and selection + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-avatar + operationId: $sourceDescriptions.default.getOwnAvatar + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - stepId: search-avatars + operationId: $sourceDescriptions.default.searchAvatars + successCriteria: + - condition: $statusCode == 200 + + - stepId: search-avatars-featured + operationId: $sourceDescriptions.default.searchAvatars + parameters: + - name: tag + in: query + value: admin_featured_legacy + successCriteria: + - condition: $statusCode == 200 + + - stepId: get-avatar + operationId: $sourceDescriptions.default.getAvatar + parameters: + - name: avatarId + in: path + value: avtr_26187637-0c30-4a09-86e1-bc928c07309e + successCriteria: + - condition: $statusCode == 200 + + - stepId: select-avatar + operationId: $sourceDescriptions.default.selectAvatar + parameters: + - name: avatarId + in: path + value: avtr_26187637-0c30-4a09-86e1-bc928c07309e + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-avatar-selected + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/currentAvatar == + 'avtr_26187637-0c30-4a09-86e1-bc928c07309e' + + - stepId: select-default-avatar + operationId: $sourceDescriptions.default.selectAvatar + parameters: + - name: avatarId + in: path + value: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-default-restored + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/currentAvatar == + 'avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11' + + - stepId: select-fallback-rejected + operationId: $sourceDescriptions.default.selectFallbackAvatar + parameters: + - name: avatarId + in: path + value: avtr_26187637-0c30-4a09-86e1-bc928c07309e + successCriteria: + - condition: $statusCode == 403 + + - stepId: select-fallback + operationId: $sourceDescriptions.default.selectFallbackAvatar + parameters: + - name: avatarId + in: path + value: avtr_07917a03-5e0b-48e9-b041-e94086bc658f + successCriteria: + - condition: $statusCode == 200 + + - stepId: favorited-avatars + operationId: $sourceDescriptions.default.getFavoritedAvatars + successCriteria: + - condition: $statusCode == 200 + + - stepId: get-unknown-avatar + operationId: $sourceDescriptions.default.getAvatar + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-own-avatar-unauthenticated + summary: getOwnAvatar refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-own-avatar + operationId: $sourceDescriptions.default.getOwnAvatar + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: search-avatars-query-parameters + summary: searchAvatars with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-avatars + operationId: $sourceDescriptions.default.searchAvatars + parameters: + - name: featured + in: query + value: false + - name: isInternalVariant + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + - name: user + in: query + value: me + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-avatars-unauthenticated + summary: searchAvatars refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-avatars + operationId: $sourceDescriptions.default.searchAvatars + successCriteria: + - condition: $statusCode == 401 + + - workflowId: select-avatar-not-found + summary: selectAvatar refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: select-avatar + operationId: $sourceDescriptions.default.selectAvatar + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: select-avatar-unauthenticated + summary: selectAvatar refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: select-avatar + operationId: $sourceDescriptions.default.selectAvatar + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: select-fallback-avatar-not-found + summary: selectFallbackAvatar refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: select-fallback-avatar + operationId: $sourceDescriptions.default.selectFallbackAvatar + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: select-fallback-avatar-unauthenticated + summary: selectFallbackAvatar refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: select-fallback-avatar + operationId: $sourceDescriptions.default.selectFallbackAvatar + parameters: + - name: avatarId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-avatar-not-found + summary: updateAvatar refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-avatar + operationId: $sourceDescriptions.default.updateAvatar + parameters: + - name: avatarId + in: path + value: avtr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + - workflowId: group-calendar-lifecycle + summary: Creates a group and a calendar event on it, then removes both + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: short-code + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - openssl rand -hex 2 | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: starts-at + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - date -u -d '+3600 seconds' +%Y-%m-%dT%H:%M:%S.%3NZ | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: ends-at + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - date -u -d '+7200 seconds' +%Y-%m-%dT%H:%M:%S.%3NZ | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: create-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.createGroup + requestBody: + contentType: application/json + payload: + name: Test Calendar + roleTemplate: default + shortCode: $steps.short-code.outputs.value + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/id + + - stepId: create-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.createGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + requestBody: + contentType: application/json + payload: + accessType: group + category: other + description: Test Description + title: Test Event + sendCreationNotification: false + startsAt: $steps.starts-at.outputs.value + endsAt: $steps.ends-at.outputs.value + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + calendarId: $response.body#/id + + - stepId: calendar-events + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - stepId: featured-events + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getFeaturedCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - stepId: follow-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.followGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + requestBody: + contentType: application/json + payload: + isFollowing: true + successCriteria: + - condition: $statusCode == 200 + + - stepId: followed-events + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getFollowedCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - stepId: group-events + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEvents + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: group-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 200 + + - stepId: update-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + requestBody: + contentType: application/json + payload: + title: Updated Event Title + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/title == 'Updated Event Title' + + - stepId: verify-event-updated + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/title == 'Updated Event Title' + + - stepId: missing-event-ics + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEventICS + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: cal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 404 + + - stepId: search-events + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.searchCalendarEvents + parameters: + - name: searchTerm + in: query + value: game + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.deleteGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-event-deleted + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 404 + + - stepId: delete-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.deleteGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: create-group-calendar-event-unauthenticated + summary: createGroupCalendarEvent refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group-calendar-event + operationId: $sourceDescriptions.default.createGroupCalendarEvent + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-calendar-event-not-found + summary: deleteGroupCalendarEvent refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-calendar-event + operationId: $sourceDescriptions.default.deleteGroupCalendarEvent + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: calendarId + in: path + value: cal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-group-calendar-event-unauthenticated + summary: deleteGroupCalendarEvent refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-calendar-event + operationId: $sourceDescriptions.default.deleteGroupCalendarEvent + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: calendarId + in: path + value: cal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: discover-calendar-events + summary: Discover events + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: discover-events + operationId: $sourceDescriptions.default.discoverCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: discover-calendar-events-anonymous + summary: Calendar discovery needs no session + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: discover + operationId: $sourceDescriptions.default.discoverCalendarEvents + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/results != null + + - workflowId: discover-calendar-events-query-parameters + summary: discoverCalendarEvents with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: discover-calendar-events + operationId: $sourceDescriptions.default.discoverCalendarEvents + parameters: + - name: featuredResults + in: query + value: exclude + - name: minimumInterestCount + in: query + value: 5 + - name: minimumRemainingMinutes + in: query + value: 10 + - name: n + in: query + value: 1 + - name: nonFeaturedResults + in: query + value: exclude + - name: personalizedResults + in: query + value: exclude + - name: scope + in: query + value: all + - name: upcomingOffsetMinutes + in: query + value: 10080 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: follow-group-calendar-event-unauthenticated + summary: followGroupCalendarEvent refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: follow-group-calendar-event + operationId: $sourceDescriptions.default.followGroupCalendarEvent + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: calendarId + in: path + value: cal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-calendar-events + summary: Calendar events + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: calendar-events + operationId: $sourceDescriptions.default.getCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-calendar-events-query-parameters + summary: getCalendarEvents with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-calendar-events + operationId: $sourceDescriptions.default.getCalendarEvents + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-calendar-events-unauthenticated + summary: getCalendarEvents refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-calendar-events + operationId: $sourceDescriptions.default.getCalendarEvents + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-featured-calendar-events + summary: Featured events + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: featured-events + operationId: $sourceDescriptions.default.getFeaturedCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-featured-calendar-events-anonymous + summary: Featured calendar events need no session + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: featured + operationId: $sourceDescriptions.default.getFeaturedCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-featured-calendar-events-query-parameters + summary: getFeaturedCalendarEvents with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-featured-calendar-events + operationId: $sourceDescriptions.default.getFeaturedCalendarEvents + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-followed-calendar-events + summary: Followed events + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: followed-events + operationId: $sourceDescriptions.default.getFollowedCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-followed-calendar-events-query-parameters + summary: getFollowedCalendarEvents with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-followed-calendar-events + operationId: $sourceDescriptions.default.getFollowedCalendarEvents + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-followed-calendar-events-unauthenticated + summary: getFollowedCalendarEvents refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-followed-calendar-events + operationId: $sourceDescriptions.default.getFollowedCalendarEvents + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-calendar-event-ics-not-found + summary: getGroupCalendarEventICS refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-calendar-event-ics + operationId: $sourceDescriptions.default.getGroupCalendarEventICS + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: calendarId + in: path + value: cal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-group-calendar-event-ics-unauthenticated + summary: getGroupCalendarEventICS refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-calendar-event-ics + operationId: $sourceDescriptions.default.getGroupCalendarEventICS + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: calendarId + in: path + value: cal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-calendar-events-unauthenticated + summary: getGroupCalendarEvents refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-calendar-events + operationId: $sourceDescriptions.default.getGroupCalendarEvents + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-next-calendar-event-not-found + summary: getGroupNextCalendarEvent refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-next-calendar-event + operationId: $sourceDescriptions.default.getGroupNextCalendarEvent + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-group-next-calendar-event-unauthenticated + summary: getGroupNextCalendarEvent refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-next-calendar-event + operationId: $sourceDescriptions.default.getGroupNextCalendarEvent + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: calendar-event-lifecycle + summary: Create a calendar event on an owned group, read it, update it, delete it + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: starts-at + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - date -u -d '+3600 seconds' +%Y-%m-%dT%H:%M:%S.%3NZ | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: ends-at + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - date -u -d '+7200 seconds' +%Y-%m-%dT%H:%M:%S.%3NZ | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: own-groups + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.createGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + accessType: group + category: other + description: Created by the conformance suite + title: Conformance + sendCreationNotification: false + startsAt: $steps.starts-at.outputs.value + endsAt: $steps.ends-at.outputs.value + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + calendarId: $response.body#/id + + - stepId: get-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/title == 'Conformance' + + - stepId: update-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + requestBody: + contentType: application/json + payload: + title: Conformance renamed + description: Updated by the conformance suite + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-event + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.deleteGroupCalendarEvent + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: calendarId + in: path + value: $steps.create-event.outputs.calendarId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-calendar-events + summary: Search events + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-events + operationId: $sourceDescriptions.default.searchCalendarEvents + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-calendar-events-query-parameters + summary: searchCalendarEvents with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-calendar-events + operationId: $sourceDescriptions.default.searchCalendarEvents + parameters: + - name: searchTerm + in: query + value: test + - name: isInternalVariant + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: utcOffset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-calendar-events-unauthenticated + summary: searchCalendarEvents refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-calendar-events + operationId: $sourceDescriptions.default.searchCalendarEvents + parameters: + - name: searchTerm + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-product-unauthenticated + summary: createProduct refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-product + operationId: $sourceDescriptions.default.createProduct + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-product-unauthenticated + summary: deleteProduct refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-product + operationId: $sourceDescriptions.default.deleteProduct + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-product-listing-direct-unauthenticated + summary: deleteProductListingDirect refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-product-listing-direct + operationId: $sourceDescriptions.default.deleteProductListingDirect + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-active-licenses + summary: List active licences + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: active-licenses + operationId: $sourceDescriptions.default.getActiveLicenses + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-active-licenses-unauthenticated + summary: getActiveLicenses refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-active-licenses + operationId: $sourceDescriptions.default.getActiveLicenses + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-balance + summary: Read the account's balance + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: balance + operationId: $sourceDescriptions.default.getBalance + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/balance != null + + - workflowId: get-balance-earnings + summary: Read balance earnings + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: balance-earnings + operationId: $sourceDescriptions.default.getBalanceEarnings + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-balance-earnings-not-found + summary: getBalanceEarnings refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-balance-earnings + operationId: $sourceDescriptions.default.getBalanceEarnings + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-bulk-gift-purchases + summary: List bulk gift purchases + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: bulk-gift-purchases + operationId: $sourceDescriptions.default.getBulkGiftPurchases + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-bulk-gift-purchases-query-parameters + summary: getBulkGiftPurchases with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-bulk-gift-purchases + operationId: $sourceDescriptions.default.getBulkGiftPurchases + parameters: + - name: mostRecent + in: query + value: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-bulk-gift-purchases-unauthenticated + summary: getBulkGiftPurchases refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-bulk-gift-purchases + operationId: $sourceDescriptions.default.getBulkGiftPurchases + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-current-subscriptions + summary: Read the account's active subscriptions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: current-subscriptions + operationId: $sourceDescriptions.default.getCurrentSubscriptions + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-current-subscriptions-unauthenticated + summary: getCurrentSubscriptions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-current-subscriptions + operationId: $sourceDescriptions.default.getCurrentSubscriptions + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-earnings-metrics + summary: Read seller earnings metrics + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: earnings-metrics + operationId: $sourceDescriptions.default.getEarningsMetrics + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-earnings-metrics-unauthenticated + summary: getEarningsMetrics refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-earnings-metrics + operationId: $sourceDescriptions.default.getEarningsMetrics + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-economy-account + summary: Read the economy account + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: economy-account + operationId: $sourceDescriptions.default.getEconomyAccount + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-economy-account-unauthenticated + summary: getEconomyAccount refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-economy-account + operationId: $sourceDescriptions.default.getEconomyAccount + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-economy-balances + summary: Economy balances + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: economy-balances + operationId: $sourceDescriptions.default.getEconomyBalances + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-economy-balances-unauthenticated + summary: getEconomyBalances refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-economy-balances + operationId: $sourceDescriptions.default.getEconomyBalances + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-economy-payout-status + summary: Economy payout status + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: economy-payout-status + operationId: $sourceDescriptions.default.getEconomyPayoutStatus + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 400 + + - workflowId: get-economy-payout-status-unauthenticated + summary: getEconomyPayoutStatus refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-economy-payout-status + operationId: $sourceDescriptions.default.getEconomyPayoutStatus + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-economy-payouts + summary: Economy payouts + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: economy-payouts + operationId: $sourceDescriptions.default.getEconomyPayouts + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-economy-payouts-unauthenticated + summary: getEconomyPayouts refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-economy-payouts + operationId: $sourceDescriptions.default.getEconomyPayouts + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-license-group + summary: Read a licence group + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: license-group + operationId: $sourceDescriptions.default.getLicenseGroup + parameters: + - name: licenseGroupId + in: path + value: lgrp_608513da-b213-4e15-80af-bd88c27f0979 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-license-group-unauthenticated + summary: getLicenseGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-license-group + operationId: $sourceDescriptions.default.getLicenseGroup + parameters: + - name: licenseGroupId + in: path + value: lgrp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-listing-unauthenticated + summary: getProductListing refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-listing + operationId: $sourceDescriptions.default.getProductListing + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-listing-alternate-unauthenticated + summary: getProductListingAlternate refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-listing-alternate + operationId: $sourceDescriptions.default.getProductListingAlternate + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-listings-query-parameters + summary: getProductListings with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-product-listings + operationId: $sourceDescriptions.default.getProductListings + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: active + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-product-listings-unauthenticated + summary: getProductListings refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-listings + operationId: $sourceDescriptions.default.getProductListings + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-purchase-unauthenticated + summary: getProductPurchase refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-purchase + operationId: $sourceDescriptions.default.getProductPurchase + parameters: + - name: productPurchaseId + in: path + value: ppur_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-purchase-history + summary: Purchase history + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: purchase-history + operationId: $sourceDescriptions.default.getProductPurchaseHistory + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-product-purchase-history-query-parameters + summary: getProductPurchaseHistory with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-product-purchase-history + operationId: $sourceDescriptions.default.getProductPurchaseHistory + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: n + in: query + value: 1 + - name: order + in: query + value: asc + - name: sort + in: query + value: purchaseDate + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-product-purchase-history-unauthenticated + summary: getProductPurchaseHistory refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-purchase-history + operationId: $sourceDescriptions.default.getProductPurchaseHistory + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-purchase-stacks-unauthenticated + summary: getProductPurchaseStacks refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-purchase-stacks + operationId: $sourceDescriptions.default.getProductPurchaseStacks + parameters: + - name: productPurchaseId + in: path + value: ppur_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-product-purchases + summary: List the account's product purchases + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: purchases + operationId: $sourceDescriptions.default.getProductPurchases + parameters: + - name: buyerId + in: query + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-product-purchases-query-parameters + summary: getProductPurchases with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-product-purchases + operationId: $sourceDescriptions.default.getProductPurchases + parameters: + - name: buyerId + in: query + value: $workflows.session.outputs.userId + - name: mostRecent + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: asc + - name: sort + in: query + value: purchaseDate + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-product-purchases-unauthenticated + summary: getProductPurchases refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-product-purchases + operationId: $sourceDescriptions.default.getProductPurchases + parameters: + - name: buyerId + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-recent-subscription + summary: Read the most recent subscription + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: recent-subscription + operationId: $sourceDescriptions.default.getRecentSubscription + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-recent-subscription-unauthenticated + summary: getRecentSubscription refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-recent-subscription + operationId: $sourceDescriptions.default.getRecentSubscription + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-seller-eligibility + summary: Seller eligibility is withdrawn + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: seller-eligibility + operationId: $sourceDescriptions.default.getSellerEligibility + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-steam-transaction-unauthenticated + summary: getSteamTransaction refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-steam-transaction + operationId: $sourceDescriptions.default.getSteamTransaction + parameters: + - name: transactionId + in: path + value: txn_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: economy-known-failing + summary: Marked test.failing upstream, kept apart so they do not stop the rest + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: steam-transactions + operationId: $sourceDescriptions.default.getSteamTransactions + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + transactionId: $response.body#/0/id + + - stepId: steam-transaction + operationId: $sourceDescriptions.default.getSteamTransaction + parameters: + - name: transactionId + in: path + value: $steps.steam-transactions.outputs.transactionId + successCriteria: + - condition: $statusCode == 200 + + - stepId: product-listing + operationId: $sourceDescriptions.default.getProductListing + parameters: + - name: productId + in: path + value: prod_c9d1cf9b-e3be-4bed-8386-49f0a8d32910 + successCriteria: + - condition: $statusCode == 200 + + - stepId: product-listings + operationId: $sourceDescriptions.default.getProductListings + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: hydrate + in: query + value: true + successCriteria: + - condition: $statusCode == 200 + + - stepId: product-listings-foreign + operationId: $sourceDescriptions.default.getProductListings + parameters: + - name: userId + in: path + value: usr_3d10ca69-6586-40a3-aa1b-a0c9e38a0d20 + - name: hydrate + in: query + value: true + successCriteria: + - condition: $statusCode == 403 + + - stepId: store + operationId: $sourceDescriptions.default.getStore + parameters: + - name: storeId + in: query + value: esto_00000000-0000-0000-0000-000000000000 + - name: hydrateListings + in: query + value: true + - name: hydrateProducts + in: query + value: true + successCriteria: + - condition: $statusCode == 200 + + - stepId: store-shelves + operationId: $sourceDescriptions.default.getStoreShelves + parameters: + - name: storeId + in: query + value: esto_00000000-0000-0000-0000-000000000000 + - name: hydrateListings + in: query + value: true + - name: fetch + in: query + value: all + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-steam-transactions-unauthenticated + summary: getSteamTransactions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-steam-transactions + operationId: $sourceDescriptions.default.getSteamTransactions + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-subscriptions + summary: List purchasable subscriptions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: subscriptions + operationId: $sourceDescriptions.default.getSubscriptions + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-subscriptions-query-parameters + summary: getSubscriptions returning giftable subscriptions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: subscriptions-gifts + operationId: $sourceDescriptions.default.getSubscriptions + parameters: + - name: gifts + in: query + value: true + - name: recurring + in: query + value: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-subscriptions-unauthenticated + summary: getSubscriptions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-subscriptions + operationId: $sourceDescriptions.default.getSubscriptions + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-tilia-status + summary: Read Tilia service status + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: tilia-status + operationId: $sourceDescriptions.default.getTiliaStatus + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-tilia-tos + summary: Read the Tilia terms of service state + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: tilia-tos + operationId: $sourceDescriptions.default.getTiliaTos + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-tilia-tos-not-found + summary: getTiliaTos refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-tilia-tos + operationId: $sourceDescriptions.default.getTiliaTos + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-token-bundles + summary: List token bundles + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: token-bundles + operationId: $sourceDescriptions.default.getTokenBundles + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-token-bundles-unauthenticated + summary: getTokenBundles refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-token-bundles + operationId: $sourceDescriptions.default.getTokenBundles + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-credits-eligible + summary: User credits eligibility is withdrawn + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: credits-eligible + operationId: $sourceDescriptions.default.getUserCreditsEligible + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-user-credits-eligible-not-found + summary: getUserCreditsEligible refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-user-credits-eligible + operationId: $sourceDescriptions.default.getUserCreditsEligible + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-user-subscription-eligible + summary: Check subscription eligibility + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: subscription-eligible + operationId: $sourceDescriptions.default.getUserSubscriptionEligible + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-subscription-eligible-unauthenticated + summary: getUserSubscriptionEligible refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-subscription-eligible + operationId: $sourceDescriptions.default.getUserSubscriptionEligible + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-tilia-kyc + summary: Tilia kyc + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: tilia-kyc + operationId: $sourceDescriptions.default.getUserTiliaKyc + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 400 + + - workflowId: get-user-tilia-kyc-unauthenticated + summary: getUserTiliaKyc refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-tilia-kyc + operationId: $sourceDescriptions.default.getUserTiliaKyc + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: list-stores + summary: List a seller's stores + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: stores + operationId: $sourceDescriptions.default.listStores + parameters: + - name: sellerId + in: query + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 403 + + - workflowId: list-stores-query-parameters + summary: listStores with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: list-stores + operationId: $sourceDescriptions.default.listStores + parameters: + - name: sellerId + in: query + value: $workflows.session.outputs.userId + - name: managementPov + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: list-stores-unauthenticated + summary: listStores refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: list-stores + operationId: $sourceDescriptions.default.listStores + parameters: + - name: sellerId + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: list-user-products + summary: User products + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-products + operationId: $sourceDescriptions.default.listUserProducts + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: list-user-products-query-parameters + summary: listUserProducts with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: list-user-products + operationId: $sourceDescriptions.default.listUserProducts + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: list-user-products-unauthenticated + summary: listUserProducts refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: list-user-products + operationId: $sourceDescriptions.default.listUserProducts + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: purchase-product-listing-unauthenticated + summary: purchaseProductListing refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: purchase-product-listing + operationId: $sourceDescriptions.default.purchaseProductListing + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-product-unauthenticated + summary: updateProduct refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-product + operationId: $sourceDescriptions.default.updateProduct + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-product-listing-direct-unauthenticated + summary: updateProductListingDirect refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-product-listing-direct + operationId: $sourceDescriptions.default.updateProductListingDirect + parameters: + - name: productId + in: path + value: prod_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-tilia-tos + summary: Accepting the Tilia terms is withdrawn + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-tilia-tos + operationId: $sourceDescriptions.default.updateTiliaTos + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: update-tilia-tos-not-found + summary: updateTiliaTos refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-tilia-tos + operationId: $sourceDescriptions.default.updateTiliaTos + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + accepted: false + successCriteria: + - condition: $statusCode == 404 + + - workflowId: favorite-groups + summary: Rename a favorite group, confirm it applied, restore the name + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: groups + operationId: $sourceDescriptions.default.getFavoriteGroups + successCriteria: + - condition: $statusCode == 200 + + - stepId: group-before + operationId: $sourceDescriptions.default.getFavoriteGroup + parameters: + - name: favoriteGroupType + in: path + value: avatar + - name: favoriteGroupName + in: path + value: avatars2 + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/name == 'avatars2' + + outputs: + visibility: $response.body#/visibility + tags: $response.body#/tags + + - stepId: rename-group + operationId: $sourceDescriptions.default.updateFavoriteGroup + parameters: + - name: favoriteGroupType + in: path + value: avatar + - name: favoriteGroupName + in: path + value: avatars2 + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + displayName: conformance-renamed + visibility: public + tags: $steps.group-before.outputs.tags + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-renamed + operationId: $sourceDescriptions.default.getFavoriteGroup + parameters: + - name: favoriteGroupType + in: path + value: avatar + - name: favoriteGroupName + in: path + value: avatars2 + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/displayName == 'conformance-renamed' + - condition: $response.body#/visibility == 'public' + + - stepId: restore-group-name + operationId: $sourceDescriptions.default.updateFavoriteGroup + parameters: + - name: favoriteGroupType + in: path + value: avatar + - name: favoriteGroupName + in: path + value: avatars2 + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + displayName: avatars2 + visibility: $steps.group-before.outputs.visibility + tags: $steps.group-before.outputs.tags + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-restored + operationId: $sourceDescriptions.default.getFavoriteGroup + parameters: + - name: favoriteGroupType + in: path + value: avatar + - name: favoriteGroupName + in: path + value: avatars2 + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/displayName == 'avatars2' + - condition: $response.body#/visibility == $steps.group-before.outputs.visibility + + - workflowId: get-favorite-groups-query-parameters + summary: getFavoriteGroups with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-favorite-groups + operationId: $sourceDescriptions.default.getFavoriteGroups + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorite-groups-type-query-parameters + summary: getFavoriteGroups filtered by favourite type + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: favorite-groups-type + operationId: $sourceDescriptions.default.getFavoriteGroups + parameters: + - name: type + in: query + value: avatar + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/type == 'avatar' + + - workflowId: get-favorite-groups-unauthenticated + summary: getFavoriteGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-favorite-groups + operationId: $sourceDescriptions.default.getFavoriteGroups + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-favorite-limits-unauthenticated + summary: getFavoriteLimits refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-favorite-limits + operationId: $sourceDescriptions.default.getFavoriteLimits + successCriteria: + - condition: $statusCode == 401 + + - workflowId: favorite-lifecycle + summary: Add a favorite, confirm it is listed, remove it, confirm it is gone + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: world-favorites + operationId: $sourceDescriptions.default.getFavorites + parameters: + - name: type + in: query + value: world + successCriteria: + - condition: $statusCode == 200 + + - stepId: add-favorite + operationId: $sourceDescriptions.default.addFavorite + requestBody: + contentType: application/json + payload: + favoriteId: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + tags: + - avatars2 + type: avatar + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/favoriteId == + 'avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11' + onFailure: + - name: stop + type: end + + outputs: + favoriteId: $response.body#/id + + - stepId: verify-favorite-listed + operationId: $sourceDescriptions.default.getFavorites + parameters: + - name: type + in: query + value: avatar + - name: tag + in: query + value: avatars2 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/favoriteId == + 'avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11' + - condition: $response.body#/0/type == 'avatar' + + - stepId: add-duplicate-favorite + operationId: $sourceDescriptions.default.addFavorite + requestBody: + contentType: application/json + payload: + favoriteId: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + tags: + - avatars2 + type: avatar + successCriteria: + - condition: $statusCode == 400 + + - stepId: remove-favorite + operationId: $sourceDescriptions.default.removeFavorite + parameters: + - name: favoriteId + in: path + value: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-favorite-removed + operationId: $sourceDescriptions.default.removeFavorite + parameters: + - name: favoriteId + in: path + value: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + successCriteria: + - condition: $statusCode == 404 + + - stepId: remove-unknown-favorite + operationId: $sourceDescriptions.default.removeFavorite + parameters: + - name: favoriteId + in: path + value: avtr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 404 + + - stepId: favorite-limits + operationId: $sourceDescriptions.default.getFavoriteLimits + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorites-query-parameters + summary: getFavorites with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-favorites + operationId: $sourceDescriptions.default.getFavorites + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorites-unauthenticated + summary: getFavorites refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-favorites + operationId: $sourceDescriptions.default.getFavorites + successCriteria: + - condition: $statusCode == 401 + + - workflowId: remove-favorite-not-found + summary: removeFavorite refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: remove-favorite + operationId: $sourceDescriptions.default.removeFavorite + parameters: + - name: favoriteId + in: path + value: fvrt_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + + - workflowId: remove-favorite-unauthenticated + summary: removeFavorite refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: remove-favorite + operationId: $sourceDescriptions.default.removeFavorite + parameters: + - name: favoriteId + in: path + value: fvrt_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-file-not-found + summary: deleteFile refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-file + operationId: $sourceDescriptions.default.deleteFile + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: download-file-version-not-found + summary: downloadFileVersion refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: download-file-version + operationId: $sourceDescriptions.default.downloadFileVersion + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-file-not-found + summary: getFile refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-file + operationId: $sourceDescriptions.default.getFile + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-file-analysis + summary: Analysis + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: analysis + operationId: $sourceDescriptions.default.getFileAnalysis + parameters: + - name: fileId + in: path + value: file_989feccd-3e6d-41f6-bf87-a8b3ece88438 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-file-analysis-not-found + summary: getFileAnalysis refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-file-analysis + operationId: $sourceDescriptions.default.getFileAnalysis + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 202 + + - workflowId: get-file-analysis-security + summary: Analysis security + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: analysis-security + operationId: $sourceDescriptions.default.getFileAnalysisSecurity + parameters: + - name: fileId + in: path + value: file_989feccd-3e6d-41f6-bf87-a8b3ece88438 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-file-analysis-security-not-found + summary: getFileAnalysisSecurity refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-file-analysis-security + operationId: $sourceDescriptions.default.getFileAnalysisSecurity + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 202 + + - workflowId: get-file-analysis-standard + summary: Analysis standard + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: analysis-standard + operationId: $sourceDescriptions.default.getFileAnalysisStandard + parameters: + - name: fileId + in: path + value: file_989feccd-3e6d-41f6-bf87-a8b3ece88438 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-file-analysis-standard-not-found + summary: getFileAnalysisStandard refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-file-analysis-standard + operationId: $sourceDescriptions.default.getFileAnalysisStandard + parameters: + - name: fileId + in: path + value: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 202 + - workflowId: files-lifecycle + summary: Creates, versions and deletes a real file on the account + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: files-before + operationId: $sourceDescriptions.default.getFiles + parameters: + - name: tag + in: query + value: gallery + successCriteria: + - condition: $statusCode == 200 + + - stepId: create-file + operationId: $sourceDescriptions.default.createFile + requestBody: + contentType: application/json + payload: + extension: A + mimeType: image/jpeg + name: string + tags: + - gallery + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + fileId: $response.body#/id + + - stepId: files-after-create + operationId: $sourceDescriptions.default.getFiles + parameters: + - name: tag + in: query + value: gallery + successCriteria: + - condition: $statusCode == 200 + + - stepId: get-file + operationId: $sourceDescriptions.default.getFile + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + successCriteria: + - condition: $statusCode == 200 + + - stepId: download-empty-version + operationId: $sourceDescriptions.default.downloadFileVersion + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + - name: versionId + in: path + value: 0 + successCriteria: + - condition: $statusCode == 404 + + - stepId: create-file-version + operationId: $sourceDescriptions.default.createFileVersion + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + requestBody: + contentType: application/json + payload: + fileMd5: dGVzdA== + fileSizeInBytes: 64 + signatureMd5: dGVzdA== + signatureSizeInBytes: 64 + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-file-version + operationId: $sourceDescriptions.default.deleteFileVersion + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + - name: versionId + in: path + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-file + operationId: $sourceDescriptions.default.deleteFile + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-file-deleted + operationId: $sourceDescriptions.default.getFile + parameters: + - name: fileId + in: path + value: $steps.create-file.outputs.fileId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-files-query-parameters + summary: getFiles with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-files + operationId: $sourceDescriptions.default.getFiles + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: submit-content-agreement-unauthenticated + summary: submitContentAgreement refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: submit-content-agreement + operationId: $sourceDescriptions.default.submitContentAgreement + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-asset-review-notes-unauthenticated + summary: updateAssetReviewNotes refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-asset-review-notes + operationId: $sourceDescriptions.default.updateAssetReviewNotes + parameters: + - name: assetReviewId + in: path + value: arev_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: boop-not-found + summary: boop refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: boop + operationId: $sourceDescriptions.default.boop + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + + - workflowId: delete-friend-request-not-found + summary: deleteFriendRequest refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-friend-request + operationId: $sourceDescriptions.default.deleteFriendRequest + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: delete-friend-request-unauthenticated + summary: deleteFriendRequest refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-friend-request + operationId: $sourceDescriptions.default.deleteFriendRequest + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: friend-unauthenticated + summary: friend refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: friend + operationId: $sourceDescriptions.default.friend + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + - workflowId: friend-request-lifecycle + summary: Send a friend request, confirm it is outgoing, withdraw it + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: status-before + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/isFriend == false + - condition: $response.body#/outgoingRequest == false + + - stepId: send-request + operationId: $sourceDescriptions.default.friend + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-outgoing + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/outgoingRequest == true + + - stepId: delete-request + operationId: $sourceDescriptions.default.deleteFriendRequest + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-withdrawn + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/outgoingRequest == false + + - workflowId: get-friend-status + summary: Friend status + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: friend-status + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/incomingRequest == false + + - workflowId: get-friend-status-self + summary: Friend status self + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: friend-status-self + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/isFriend == false + + - workflowId: get-friend-status-unauthenticated + summary: getFriendStatus refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-friend-status + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-friend-status-unknown + summary: Friend status unknown + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: friend-status-unknown + operationId: $sourceDescriptions.default.getFriendStatus + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/isFriend == false + + - workflowId: get-friends-offline + summary: Friends offline + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: friends-offline + operationId: $sourceDescriptions.default.getFriends + parameters: + - name: offline + in: query + value: true + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-friends-online + summary: Friends online + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: friends-online + operationId: $sourceDescriptions.default.getFriends + parameters: + - name: offline + in: query + value: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-friends-query-parameters + summary: getFriends with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-friends + operationId: $sourceDescriptions.default.getFriends + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-friends-unauthenticated + summary: getFriends refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-friends + operationId: $sourceDescriptions.default.getFriends + successCriteria: + - condition: $statusCode == 401 + + - workflowId: unfriend-unauthenticated + summary: unfriend refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: unfriend + operationId: $sourceDescriptions.default.unfriend + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: add-group-gallery-image-not-found + summary: addGroupGalleryImage refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: add-group-gallery-image + operationId: $sourceDescriptions.default.addGroupGalleryImage + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryId + in: path + value: ggal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + fileId: file_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: add-group-gallery-image-unauthenticated + summary: addGroupGalleryImage refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-group-gallery-image + operationId: $sourceDescriptions.default.addGroupGalleryImage + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupGalleryId + in: path + value: ggal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: add-group-member-role-not-found + summary: addGroupMemberRole refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: add-group-member-role + operationId: $sourceDescriptions.default.addGroupMemberRole + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupRoleId + in: path + value: grol_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: add-group-member-role-unauthenticated + summary: addGroupMemberRole refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-group-member-role + operationId: $sourceDescriptions.default.addGroupMemberRole + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: groupRoleId + in: path + value: grol_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: add-group-post-unauthenticated + summary: addGroupPost refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-group-post + operationId: $sourceDescriptions.default.addGroupPost + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: ban-group-member-not-found + summary: banGroupMember refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: ban-group-member + operationId: $sourceDescriptions.default.banGroupMember + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + userId: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: ban-group-member-unauthenticated + summary: banGroupMember refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: ban-group-member + operationId: $sourceDescriptions.default.banGroupMember + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: block-group-not-found + summary: blockGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: block-group + operationId: $sourceDescriptions.default.blockGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: block-group-unauthenticated + summary: blockGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: block-group + operationId: $sourceDescriptions.default.blockGroup + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: cancel-group-request-not-found + summary: cancelGroupRequest refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: cancel-group-request + operationId: $sourceDescriptions.default.cancelGroupRequest + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: cancel-group-transfer-not-found + summary: cancelGroupTransfer refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: cancel-group-transfer + operationId: $sourceDescriptions.default.cancelGroupTransfer + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: cancel-group-transfer-unauthenticated + summary: cancelGroupTransfer refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: cancel-group-transfer + operationId: $sourceDescriptions.default.cancelGroupTransfer + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-group-unauthenticated + summary: createGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group + operationId: $sourceDescriptions.default.createGroup + successCriteria: + - condition: $statusCode == 401 + + - workflowId: group-lifecycle + summary: Creates, updates and deletes a real group on the account + inputs: + type: object + required: + - friendId + properties: + friendId: + type: string + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: short-code + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - openssl rand -hex 2 | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: create-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.createGroup + requestBody: + contentType: application/json + payload: + name: Test + roleTemplate: default + shortCode: $steps.short-code.outputs.value + description: Created by the conformance suite + joinState: closed + privacy: private + bannerId: null + iconId: null + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/name == 'Test' + - condition: $response.body#/description == 'Created by the conformance suite' + - condition: $response.body#/privacy == 'private' + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/id + + - stepId: get-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: group-members + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupMembers + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: update-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + requestBody: + contentType: application/json + payload: + joinState: invite + name: Test 2 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/name == 'Test 2' + + - stepId: verify-group-renamed + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/name == 'Test 2' + + - stepId: create-group-invite + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.createGroupInvite + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + requestBody: + contentType: application/json + payload: + userId: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + + - stepId: group-invites + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroupInvites + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/userId == $inputs.friendId + + - stepId: represent-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + requestBody: + contentType: application/json + payload: + isRepresenting: true + successCriteria: + - condition: $statusCode == 200 + + - stepId: represent-foreign-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: grp_0f1d4450-822e-45d5-b5aa-6a0ea8402053 + requestBody: + contentType: application/json + payload: + isRepresenting: false + successCriteria: + - condition: $statusCode == 403 + + - stepId: represent-invalid-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + requestBody: + contentType: application/json + payload: + isRepresenting: false + successCriteria: + - condition: $statusCode == 403 + + - stepId: delete-group-invite + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.deleteGroupInvite + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + - name: userId + in: path + value: $inputs.friendId + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-group + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.deleteGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-group-deleted + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: $steps.create-group.outputs.groupId + successCriteria: + - condition: $statusCode == 404 + + - workflowId: create-group-announcement-not-found + summary: createGroupAnnouncement refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-group-announcement + operationId: $sourceDescriptions.default.createGroupAnnouncement + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + title: conformance + successCriteria: + - condition: $statusCode == 400 + + - workflowId: create-group-announcement-unauthenticated + summary: createGroupAnnouncement refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group-announcement + operationId: $sourceDescriptions.default.createGroupAnnouncement + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-group-gallery-not-found + summary: createGroupGallery refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-group-gallery + operationId: $sourceDescriptions.default.createGroupGallery + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + name: conformance + successCriteria: + - condition: $statusCode == 403 + + - workflowId: create-group-gallery-unauthenticated + summary: createGroupGallery refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group-gallery + operationId: $sourceDescriptions.default.createGroupGallery + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-group-invite-not-found + summary: createGroupInvite refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-group-invite + operationId: $sourceDescriptions.default.createGroupInvite + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + userId: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: create-group-invite-unauthenticated + summary: createGroupInvite refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group-invite + operationId: $sourceDescriptions.default.createGroupInvite + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-group-role-not-found + summary: createGroupRole refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-group-role + operationId: $sourceDescriptions.default.createGroupRole + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: create-group-role-unauthenticated + summary: createGroupRole refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-group-role + operationId: $sourceDescriptions.default.createGroupRole + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: decline-group-invite-not-found + summary: declineGroupInvite refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: decline-group-invite + operationId: $sourceDescriptions.default.declineGroupInvite + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: decline-group-invite-unauthenticated + summary: declineGroupInvite refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: decline-group-invite + operationId: $sourceDescriptions.default.declineGroupInvite + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-not-found + summary: deleteGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group + operationId: $sourceDescriptions.default.deleteGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-group-unauthenticated + summary: deleteGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group + operationId: $sourceDescriptions.default.deleteGroup + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-announcement-not-found + summary: deleteGroupAnnouncement refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-announcement + operationId: $sourceDescriptions.default.deleteGroupAnnouncement + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-group-announcement-unauthenticated + summary: deleteGroupAnnouncement refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-announcement + operationId: $sourceDescriptions.default.deleteGroupAnnouncement + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-gallery-not-found + summary: deleteGroupGallery refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-gallery + operationId: $sourceDescriptions.default.deleteGroupGallery + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryId + in: path + value: ggal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-group-gallery-unauthenticated + summary: deleteGroupGallery refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-gallery + operationId: $sourceDescriptions.default.deleteGroupGallery + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupGalleryId + in: path + value: ggal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-gallery-image-not-found + summary: deleteGroupGalleryImage refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-gallery-image + operationId: $sourceDescriptions.default.deleteGroupGalleryImage + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryId + in: path + value: ggal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryImageId + in: path + value: ggim_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-group-gallery-image-unauthenticated + summary: deleteGroupGalleryImage refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-gallery-image + operationId: $sourceDescriptions.default.deleteGroupGalleryImage + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupGalleryId + in: path + value: ggal_00000000-0000-0000-0000-000000000000 + - name: groupGalleryImageId + in: path + value: ggim_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-invite-unauthenticated + summary: deleteGroupInvite refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-invite + operationId: $sourceDescriptions.default.deleteGroupInvite + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-post-not-found + summary: deleteGroupPost refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-post + operationId: $sourceDescriptions.default.deleteGroupPost + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-group-post-unauthenticated + summary: deleteGroupPost refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-post + operationId: $sourceDescriptions.default.deleteGroupPost + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-group-role-not-found + summary: deleteGroupRole refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-group-role + operationId: $sourceDescriptions.default.deleteGroupRole + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupRoleId + in: path + value: grol_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-group-role-unauthenticated + summary: deleteGroupRole refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-group-role + operationId: $sourceDescriptions.default.deleteGroupRole + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupRoleId + in: path + value: grol_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-not-found + summary: getGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-group-unauthenticated + summary: getGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-announcements-not-found + summary: getGroupAnnouncements refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-announcements + operationId: $sourceDescriptions.default.getGroupAnnouncements + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-announcements-unauthenticated + summary: getGroupAnnouncements refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-announcements + operationId: $sourceDescriptions.default.getGroupAnnouncements + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-audit-log-entry-types-not-found + summary: getGroupAuditLogEntryTypes refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-audit-log-entry-types + operationId: $sourceDescriptions.default.getGroupAuditLogEntryTypes + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-audit-log-entry-types-unauthenticated + summary: getGroupAuditLogEntryTypes refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-audit-log-entry-types + operationId: $sourceDescriptions.default.getGroupAuditLogEntryTypes + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-audit-logs-not-found + summary: getGroupAuditLogs refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-audit-logs + operationId: $sourceDescriptions.default.getGroupAuditLogs + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-audit-logs-unauthenticated + summary: getGroupAuditLogs refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-audit-logs + operationId: $sourceDescriptions.default.getGroupAuditLogs + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-bans-not-found + summary: getGroupBans refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-bans + operationId: $sourceDescriptions.default.getGroupBans + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-bans-unauthenticated + summary: getGroupBans refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-bans + operationId: $sourceDescriptions.default.getGroupBans + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-gallery-images-not-found + summary: getGroupGalleryImages refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-gallery-images + operationId: $sourceDescriptions.default.getGroupGalleryImages + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryId + in: path + value: ggal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-group-gallery-images-unauthenticated + summary: getGroupGalleryImages refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-gallery-images + operationId: $sourceDescriptions.default.getGroupGalleryImages + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupGalleryId + in: path + value: ggal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-instances-not-found + summary: getGroupInstances refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-instances + operationId: $sourceDescriptions.default.getGroupInstances + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-instances-unauthenticated + summary: getGroupInstances refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-instances + operationId: $sourceDescriptions.default.getGroupInstances + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-invites-not-found + summary: getGroupInvites refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-invites + operationId: $sourceDescriptions.default.getGroupInvites + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-invites-unauthenticated + summary: getGroupInvites refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-invites + operationId: $sourceDescriptions.default.getGroupInvites + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-member-not-found + summary: getGroupMember refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-member + operationId: $sourceDescriptions.default.getGroupMember + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-member-unauthenticated + summary: getGroupMember refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-member + operationId: $sourceDescriptions.default.getGroupMember + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-members-unauthenticated + summary: getGroupMembers refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-members + operationId: $sourceDescriptions.default.getGroupMembers + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-permissions-not-found + summary: getGroupPermissions refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-permissions + operationId: $sourceDescriptions.default.getGroupPermissions + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-permissions-unauthenticated + summary: getGroupPermissions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-permissions + operationId: $sourceDescriptions.default.getGroupPermissions + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-posts-unauthenticated + summary: getGroupPosts refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-posts + operationId: $sourceDescriptions.default.getGroupPosts + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-requests-not-found + summary: getGroupRequests refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-requests + operationId: $sourceDescriptions.default.getGroupRequests + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-role-templates + summary: Group role templates + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: group-role-templates + operationId: $sourceDescriptions.default.getGroupRoleTemplates + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-group-role-templates-unauthenticated + summary: getGroupRoleTemplates refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-role-templates + operationId: $sourceDescriptions.default.getGroupRoleTemplates + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-roles-not-found + summary: getGroupRoles refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-roles + operationId: $sourceDescriptions.default.getGroupRoles + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-roles-unauthenticated + summary: getGroupRoles refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-roles + operationId: $sourceDescriptions.default.getGroupRoles + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-group-transferability-not-found + summary: getGroupTransferability refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-group-transferability + operationId: $sourceDescriptions.default.getGroupTransferability + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-group-transferability-unauthenticated + summary: getGroupTransferability refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-group-transferability + operationId: $sourceDescriptions.default.getGroupTransferability + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: group-announcement-lifecycle + summary: Create a group announcement, then delete it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-announcement + operationId: $sourceDescriptions.default.createGroupAnnouncement + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + title: Conformance + text: Created by the conformance suite + sendNotification: false + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + - stepId: delete-announcement + operationId: $sourceDescriptions.default.deleteGroupAnnouncement + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-gallery-lifecycle + summary: Create a group gallery, update it, delete it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-gallery + operationId: $sourceDescriptions.default.createGroupGallery + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + name: conformance + description: Created by the conformance suite + membersOnly: true + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + galleryId: $response.body#/id + + - stepId: update-gallery + operationId: $sourceDescriptions.default.updateGroupGallery + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupGalleryId + in: path + value: $steps.create-gallery.outputs.galleryId + requestBody: + contentType: application/json + payload: + name: conformance-renamed + membersOnly: false + successCriteria: + - condition: $statusCode == 200 + + - stepId: gallery-images + operationId: $sourceDescriptions.default.getGroupGalleryImages + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupGalleryId + in: path + value: $steps.create-gallery.outputs.galleryId + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-gallery + operationId: $sourceDescriptions.default.deleteGroupGallery + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupGalleryId + in: path + value: $steps.create-gallery.outputs.galleryId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-member-role + summary: Grant a role to the owner, then take it away + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-role + operationId: $sourceDescriptions.default.createGroupRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + name: conformance-member-role + description: Created by the conformance suite + isSelfAssignable: false + permissions: + - group-instance-join + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + roleId: $response.body#/id + + - stepId: add-member-role + operationId: $sourceDescriptions.default.addGroupMemberRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: groupRoleId + in: path + value: $steps.create-role.outputs.roleId + successCriteria: + - condition: $statusCode == 200 + + - stepId: remove-member-role + operationId: $sourceDescriptions.default.removeGroupMemberRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: groupRoleId + in: path + value: $steps.create-role.outputs.roleId + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-role + operationId: $sourceDescriptions.default.deleteGroupRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupRoleId + in: path + value: $steps.create-role.outputs.roleId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-post-lifecycle + summary: Create a group post, update it, delete it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-post + operationId: $sourceDescriptions.default.addGroupPost + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + title: Conformance + text: Created by the conformance suite + sendNotification: false + visibility: group + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + postId: $response.body#/id + + - stepId: update-post + operationId: $sourceDescriptions.default.updateGroupPost + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: notificationId + in: path + value: $steps.create-post.outputs.postId + requestBody: + contentType: application/json + payload: + title: Conformance renamed + text: Updated by the conformance suite + sendNotification: false + visibility: group + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-post + operationId: $sourceDescriptions.default.deleteGroupPost + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: notificationId + in: path + value: $steps.create-post.outputs.postId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-reads + summary: Group reads against an existing membership + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: group + operationId: $sourceDescriptions.default.getGroup + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: announcements + operationId: $sourceDescriptions.default.getGroupAnnouncements + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: audit-log-types + operationId: $sourceDescriptions.default.getGroupAuditLogEntryTypes + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: audit-logs + operationId: $sourceDescriptions.default.getGroupAuditLogs + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: bans + operationId: $sourceDescriptions.default.getGroupBans + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: instances + operationId: $sourceDescriptions.default.getGroupInstances + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: invites + operationId: $sourceDescriptions.default.getGroupInvites + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: members + operationId: $sourceDescriptions.default.getGroupMembers + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: search-members + operationId: $sourceDescriptions.default.searchGroupMembers + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: query + in: query + value: test + successCriteria: + - condition: $statusCode == 200 + + - stepId: member + operationId: $sourceDescriptions.default.getGroupMember + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - stepId: permissions + operationId: $sourceDescriptions.default.getGroupPermissions + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: posts + operationId: $sourceDescriptions.default.getGroupPosts + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: requests + operationId: $sourceDescriptions.default.getGroupRequests + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: roles + operationId: $sourceDescriptions.default.getGroupRoles + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - stepId: transferability + operationId: $sourceDescriptions.default.getGroupTransferability + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-role-lifecycle + summary: Create a group role, update it, delete it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: create-role + operationId: $sourceDescriptions.default.createGroupRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + name: conformance + description: Created by the conformance suite + isSelfAssignable: false + permissions: + - group-instance-join + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/name == 'conformance' + onFailure: + - name: stop + type: end + + outputs: + roleId: $response.body#/id + + - stepId: update-role + operationId: $sourceDescriptions.default.updateGroupRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupRoleId + in: path + value: $steps.create-role.outputs.roleId + requestBody: + contentType: application/json + payload: + name: conformance-renamed + description: Updated by the conformance suite + successCriteria: + - condition: $statusCode == 200 + + - stepId: delete-role + operationId: $sourceDescriptions.default.deleteGroupRole + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + - name: groupRoleId + in: path + value: $steps.create-role.outputs.roleId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: group-update + summary: Rename the group, confirm it applied, restore the name + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + name: $response.body#/0/name + + - stepId: rename + operationId: $sourceDescriptions.default.updateGroup + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + description: Renamed by the conformance suite + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/description == 'Renamed by the conformance suite' + + - stepId: restore + operationId: $sourceDescriptions.default.updateGroup + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + description: "" + successCriteria: + - condition: $statusCode == 200 + + - workflowId: initiate-or-accept-group-transfer-not-found + summary: initiateOrAcceptGroupTransfer refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: initiate-or-accept-group-transfer + operationId: $sourceDescriptions.default.initiateOrAcceptGroupTransfer + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: initiate-or-accept-group-transfer-unauthenticated + summary: initiateOrAcceptGroupTransfer refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: initiate-or-accept-group-transfer + operationId: $sourceDescriptions.default.initiateOrAcceptGroupTransfer + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: join-group-not-found + summary: joinGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: join-group + operationId: $sourceDescriptions.default.joinGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: join-group-unauthenticated + summary: joinGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: join-group + operationId: $sourceDescriptions.default.joinGroup + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: kick-group-member-not-found + summary: kickGroupMember refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: kick-group-member + operationId: $sourceDescriptions.default.kickGroupMember + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: kick-group-member-unauthenticated + summary: kickGroupMember refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: kick-group-member + operationId: $sourceDescriptions.default.kickGroupMember + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: leave-group-not-found + summary: leaveGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: leave-group + operationId: $sourceDescriptions.default.leaveGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: remove-group-member-role-not-found + summary: removeGroupMemberRole refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: remove-group-member-role + operationId: $sourceDescriptions.default.removeGroupMemberRole + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupRoleId + in: path + value: grol_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: remove-group-member-role-unauthenticated + summary: removeGroupMemberRole refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: remove-group-member-role + operationId: $sourceDescriptions.default.removeGroupMemberRole + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: groupRoleId + in: path + value: grol_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: respond-group-join-request-not-found + summary: respondGroupJoinRequest refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: respond-group-join-request + operationId: $sourceDescriptions.default.respondGroupJoinRequest + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + action: accept + successCriteria: + - condition: $statusCode == 403 + + - workflowId: respond-group-join-request-unauthenticated + summary: respondGroupJoinRequest refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: respond-group-join-request + operationId: $sourceDescriptions.default.respondGroupJoinRequest + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: search-group-members-unauthenticated + summary: searchGroupMembers refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-group-members + operationId: $sourceDescriptions.default.searchGroupMembers + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: query + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: search-groups + summary: Search groups + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-groups + operationId: $sourceDescriptions.default.searchGroups + parameters: + - name: query + in: query + value: vrchat + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-groups-query-parameters + summary: searchGroups with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-groups + operationId: $sourceDescriptions.default.searchGroups + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-groups-unauthenticated + summary: searchGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-groups + operationId: $sourceDescriptions.default.searchGroups + successCriteria: + - condition: $statusCode == 401 + + - workflowId: unban-group-member-not-found + summary: unbanGroupMember refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: unban-group-member + operationId: $sourceDescriptions.default.unbanGroupMember + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: unban-group-member-unauthenticated + summary: unbanGroupMember refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: unban-group-member + operationId: $sourceDescriptions.default.unbanGroupMember + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-group-not-found + summary: updateGroup refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-group + operationId: $sourceDescriptions.default.updateGroup + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + + - workflowId: update-group-gallery-not-found + summary: updateGroupGallery refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-group-gallery + operationId: $sourceDescriptions.default.updateGroupGallery + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: groupGalleryId + in: path + value: ggal_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: update-group-gallery-unauthenticated + summary: updateGroupGallery refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-group-gallery + operationId: $sourceDescriptions.default.updateGroupGallery + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupGalleryId + in: path + value: ggal_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-group-member-not-found + summary: updateGroupMember refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-group-member + operationId: $sourceDescriptions.default.updateGroupMember + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: update-group-member-unauthenticated + summary: updateGroupMember refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-group-member + operationId: $sourceDescriptions.default.updateGroupMember + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-group-post-not-found + summary: updateGroupPost refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-group-post + operationId: $sourceDescriptions.default.updateGroupPost + parameters: + - name: groupId + in: path + value: grp_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + sendNotification: false + text: conformance + title: conformance + visibility: group + successCriteria: + - condition: $statusCode == 403 + + - workflowId: update-group-post-unauthenticated + summary: updateGroupPost refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-group-post + operationId: $sourceDescriptions.default.updateGroupPost + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-group-representation-unauthenticated + summary: updateGroupRepresentation refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-group-representation + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-group-role-unauthenticated + summary: updateGroupRole refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-group-role + operationId: $sourceDescriptions.default.updateGroupRole + parameters: + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + - name: groupRoleId + in: path + value: grol_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: close-instance-not-found + summary: closeInstance refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: close-instance + operationId: $sourceDescriptions.default.closeInstance + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: instanceId + in: path + value: id_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: close-instance-unauthenticated + summary: closeInstance refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: close-instance + operationId: $sourceDescriptions.default.closeInstance + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + - name: instanceId + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: instance-lifecycle + summary: Creates a real private instance, then invites the account to it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-instance + operationId: $sourceDescriptions.default.createInstance + requestBody: + contentType: application/json + payload: + worldId: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + type: private + region: use + ownerId: $workflows.session.outputs.userId + canRequestInvite: true + ageGate: false + displayName: conformance + hardClose: false + inviteOnly: false + queueEnabled: false + instancePersistenceEnabled: false + playerPersistenceEnabled: false + closedAt: "2099-01-01T00:00:00.000Z" + contentSettings: + drones: true + emoji: true + pedestals: true + prints: true + props: true + stickers: true + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + instanceId: $response.body#/instanceId + + - stepId: invite-myself + operationId: $sourceDescriptions.default.inviteMyselfTo + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: $steps.create-instance.outputs.instanceId + successCriteria: + - condition: $statusCode == 200 + + - stepId: create-instance-null-display-name + operationId: $sourceDescriptions.default.createInstance + requestBody: + contentType: application/json + payload: + worldId: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + type: private + region: use + ownerId: $workflows.session.outputs.userId + displayName: null + successCriteria: + - condition: $statusCode == 400 + + - workflowId: get-instance + summary: Instance lookup needs no session + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: instance + operationId: $sourceDescriptions.default.getInstance + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: "0" + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-instance-by-short-name-not-found + summary: getInstanceByShortName refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-instance-by-short-name + operationId: $sourceDescriptions.default.getInstanceByShortName + parameters: + - name: shortName + in: path + value: conformance + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-recent-locations + summary: Recent locations + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: recent-locations + operationId: $sourceDescriptions.default.getRecentLocations + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-recent-locations-query-parameters + summary: getRecentLocations with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-recent-locations + operationId: $sourceDescriptions.default.getRecentLocations + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-recent-locations-unauthenticated + summary: getRecentLocations refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-recent-locations + operationId: $sourceDescriptions.default.getRecentLocations + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-short-name + summary: Instance short name needs no session + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: short-name + operationId: $sourceDescriptions.default.getShortName + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: "0" + successCriteria: + - condition: $statusCode == 200 + - workflowId: world-instance-lifecycle + summary: Instance lookups derived from a live world + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: black-cat + operationId: $sourceDescriptions.default.getWorld + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + instanceId: $response.body#/instances/0/0 + + - stepId: world-instance + operationId: $sourceDescriptions.default.getWorldInstance + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: $steps.black-cat.outputs.instanceId + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + secureName: $response.body#/secureName + + - stepId: instance + operationId: $sourceDescriptions.default.getInstance + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: $steps.black-cat.outputs.instanceId + successCriteria: + - condition: $statusCode == 200 + + - stepId: short-name + operationId: $sourceDescriptions.default.getShortName + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: $steps.black-cat.outputs.instanceId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/secureName == + $steps.world-instance.outputs.secureName + + - stepId: instance-by-short-name + operationId: $sourceDescriptions.default.getInstanceByShortName + parameters: + - name: shortName + in: path + value: $steps.world-instance.outputs.secureName + successCriteria: + - condition: $statusCode == 200 + + - workflowId: consume-own-inventory-item-unauthenticated + summary: consumeOwnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: consume-own-inventory-item + operationId: $sourceDescriptions.default.consumeOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-own-inventory-item-unauthenticated + summary: deleteOwnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-own-inventory-item + operationId: $sourceDescriptions.default.deleteOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: equip-own-inventory-item-unauthenticated + summary: equipOwnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: equip-own-inventory-item + operationId: $sourceDescriptions.default.equipOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-inventory-query-parameters + summary: getInventory with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-inventory + operationId: $sourceDescriptions.default.getInventory + parameters: + - name: archived + in: query + value: false + - name: equipSlot + in: query + value: "" + - name: flags + in: query + value: archivable + - name: notFlags + in: query + value: archivable + - name: notTypes + in: query + value: bundle + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-unauthenticated + summary: getInventory refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-inventory + operationId: $sourceDescriptions.default.getInventory + successCriteria: + - condition: $statusCode == 401 + - workflowId: inventory-item-reads + summary: Reads the oldest owned prop, then fetches it by id + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: list + operationId: $sourceDescriptions.default.getInventory + parameters: + - name: n + in: query + value: 100 + - name: offset + in: query + value: 0 + - name: order + in: query + value: oldest + - name: types + in: query + value: prop + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/data/0/metadata/propId == + 'prop_49fec698-f0cb-475c-9bc3-8f24e1bcc4eb' + onFailure: + - name: stop + type: end + + outputs: + inventoryItemId: $response.body#/data/0/id + + - stepId: own-item + operationId: $sourceDescriptions.default.getOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: $steps.list.outputs.inventoryItemId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-collections + summary: Inventory collections + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: inventory-collections + operationId: $sourceDescriptions.default.getInventoryCollections + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-collections-unauthenticated + summary: getInventoryCollections refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-inventory-collections + operationId: $sourceDescriptions.default.getInventoryCollections + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-inventory-drops + summary: Drops + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: drops + operationId: $sourceDescriptions.default.getInventoryDrops + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-drops-query-parameters + summary: getInventoryDrops with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-inventory-drops + operationId: $sourceDescriptions.default.getInventoryDrops + parameters: + - name: active + in: query + value: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-drops-unauthenticated + summary: getInventoryDrops refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-inventory-drops + operationId: $sourceDescriptions.default.getInventoryDrops + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-inventory-template + summary: Template + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: template + operationId: $sourceDescriptions.default.getInventoryTemplate + parameters: + - name: inventoryTemplateId + in: path + value: invt_1f11aa73-8f05-4d50-a1a8-c59074d03ce2 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-inventory-template-unauthenticated + summary: getInventoryTemplate refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-inventory-template + operationId: $sourceDescriptions.default.getInventoryTemplate + parameters: + - name: inventoryTemplateId + in: path + value: invt_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-own-inventory-item-unauthenticated + summary: getOwnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-own-inventory-item + operationId: $sourceDescriptions.default.getOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-inventory-item-unauthenticated + summary: getUserInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-inventory-item + operationId: $sourceDescriptions.default.getUserInventoryItem + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: redeem-reward-unauthenticated + summary: redeemReward refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: redeem-reward + operationId: $sourceDescriptions.default.redeemReward + successCriteria: + - condition: $statusCode == 401 + + - workflowId: share-inventory-item-direct-unauthenticated + summary: shareInventoryItemDirect refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: share-inventory-item-direct + operationId: $sourceDescriptions.default.shareInventoryItemDirect + parameters: + - name: itemId + in: query + value: id_00000000-0000-0000-0000-000000000000 + - name: duration + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: share-inventory-item-pedestal-unauthenticated + summary: shareInventoryItemPedestal refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: share-inventory-item-pedestal + operationId: $sourceDescriptions.default.shareInventoryItemPedestal + parameters: + - name: itemId + in: query + value: id_00000000-0000-0000-0000-000000000000 + - name: duration + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: spawn-inventory-item + summary: Spawn + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: spawn + operationId: $sourceDescriptions.default.spawnInventoryItem + parameters: + - name: id + in: query + value: default_money + successCriteria: + - condition: $statusCode == 200 + + - workflowId: spawn-inventory-item-unauthenticated + summary: spawnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: spawn-inventory-item + operationId: $sourceDescriptions.default.spawnInventoryItem + parameters: + - name: id + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: unequip-own-inventory-slot-unauthenticated + summary: unequipOwnInventorySlot refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: unequip-own-inventory-slot + operationId: $sourceDescriptions.default.unequipOwnInventorySlot + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-own-inventory-item-unauthenticated + summary: updateOwnInventoryItem refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-own-inventory-item + operationId: $sourceDescriptions.default.updateOwnInventoryItem + parameters: + - name: inventoryItemId + in: path + value: inv_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-invite-message + summary: Message + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: message + operationId: $sourceDescriptions.default.getInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-invite-message-not-found + summary: getInviteMessage refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-invite-message + operationId: $sourceDescriptions.default.getInviteMessage + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-invite-message-unauthenticated + summary: getInviteMessage refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-invite-message + operationId: $sourceDescriptions.default.getInviteMessage + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-invite-messages + summary: Messages + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: messages + operationId: $sourceDescriptions.default.getInviteMessages + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-invite-messages-unauthenticated + summary: getInviteMessages refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-invite-messages + operationId: $sourceDescriptions.default.getInviteMessages + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: messageType + in: path + value: message + successCriteria: + - condition: $statusCode == 401 + + - workflowId: invite-myself-to-not-found + summary: inviteMyselfTo refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: invite-myself-to + operationId: $sourceDescriptions.default.inviteMyselfTo + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: instanceId + in: path + value: id_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: invite-myself-to-unauthenticated + summary: inviteMyselfTo refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: invite-myself-to + operationId: $sourceDescriptions.default.inviteMyselfTo + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + - name: instanceId + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + - workflowId: invite-message-lifecycle + summary: >- + Skipped by name in `pnpm conformance`: resetting or updating a message + slot locks it for roughly half an hour, so these cannot run on every pass. + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: reset-message + operationId: $sourceDescriptions.default.resetInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 200 + + - stepId: reset-message-rate-limited + operationId: $sourceDescriptions.default.resetInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 429 + + - stepId: update-message + operationId: $sourceDescriptions.default.updateInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + requestBody: + contentType: application/json + payload: + message: Hello, World! + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-message-updated + operationId: $sourceDescriptions.default.getInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/message == 'Hello, World!' + + - stepId: update-message-rate-limited + operationId: $sourceDescriptions.default.updateInviteMessage + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + requestBody: + contentType: application/json + payload: + message: I am speed! + successCriteria: + - condition: $statusCode == 429 + + - workflowId: reset-invite-message-not-found + summary: resetInviteMessage refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: reset-invite-message + operationId: $sourceDescriptions.default.resetInviteMessage + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: reset-invite-message-unauthenticated + summary: resetInviteMessage refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: reset-invite-message + operationId: $sourceDescriptions.default.resetInviteMessage + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-invite-message-unauthenticated + summary: updateInviteMessage refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-invite-message + operationId: $sourceDescriptions.default.updateInviteMessage + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: messageType + in: path + value: message + - name: slot + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-jam-submission-not-found + summary: deleteJamSubmission refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-jam-submission + operationId: $sourceDescriptions.default.deleteJamSubmission + parameters: + - name: jamId + in: path + value: jam_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: jamSubmissionId + in: path + value: jsub_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-jam-submission-unauthenticated + summary: deleteJamSubmission refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-jam-submission + operationId: $sourceDescriptions.default.deleteJamSubmission + parameters: + - name: jamId + in: path + value: jam_00000000-0000-0000-0000-000000000000 + - name: jamSubmissionId + in: path + value: jsub_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-jam-not-found + summary: getJam refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-jam + operationId: $sourceDescriptions.default.getJam + parameters: + - name: jamId + in: path + value: jam_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-jams + summary: Jams + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: jams + operationId: $sourceDescriptions.default.getJams + successCriteria: + - condition: $statusCode == 200 + - workflowId: jam-reads + summary: Reads the first jam, then its submissions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: jams + operationId: $sourceDescriptions.default.getJams + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + jamId: $response.body#/0/id + + - stepId: jam + operationId: $sourceDescriptions.default.getJam + parameters: + - name: jamId + in: path + value: $steps.jams.outputs.jamId + successCriteria: + - condition: $statusCode == 200 + + - stepId: submissions + operationId: $sourceDescriptions.default.getJamSubmissions + parameters: + - name: jamId + in: path + value: $steps.jams.outputs.jamId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: submit-jam-content-not-found + summary: submitJamContent refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: submit-jam-content + operationId: $sourceDescriptions.default.submitJamContent + parameters: + - name: jamId + in: path + value: jam_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + contentId: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + description: conformance + successCriteria: + - condition: $statusCode == 400 + + - workflowId: submit-jam-content-unauthenticated + summary: submitJamContent refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: submit-jam-content + operationId: $sourceDescriptions.default.submitJamContent + parameters: + - name: jamId + in: path + value: jam_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-assigned-permissions + summary: Assigned permissions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: assigned-permissions + operationId: $sourceDescriptions.default.getAssignedPermissions + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-assigned-permissions-unauthenticated + summary: getAssignedPermissions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-assigned-permissions + operationId: $sourceDescriptions.default.getAssignedPermissions + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-config + summary: Config + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: config + operationId: $sourceDescriptions.default.getConfig + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-css + summary: Css + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: css + operationId: $sourceDescriptions.default.getCSS + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-current-online-users + summary: Online users + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: online-users + operationId: $sourceDescriptions.default.getCurrentOnlineUsers + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-health + summary: Health + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: health + operationId: $sourceDescriptions.default.getHealth + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-health-unauthenticated + summary: getHealth refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-health + operationId: $sourceDescriptions.default.getHealth + successCriteria: + - condition: $statusCode == 401 + - workflowId: get-info-push + summary: Info push + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: info-push + operationId: $sourceDescriptions.default.getInfoPush + successCriteria: + - condition: $statusCode == 400 + + - workflowId: get-info-push-quick-menu-banner + summary: Info push quick menu banner + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: info-push-quick-menu-banner + operationId: $sourceDescriptions.default.getInfoPush + parameters: + - name: include + in: query + value: quick-menu-banner + - name: require + in: query + value: quick-menu-banner + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-info-push-user-all + summary: Info push user all + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: info-push-user-all + operationId: $sourceDescriptions.default.getInfoPush + parameters: + - name: include + in: query + value: user-all + - name: require + in: query + value: user-all + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-java-script + summary: Javascript + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: javascript + operationId: $sourceDescriptions.default.getJavaScript + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-permission + summary: Get permission + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-permission + operationId: $sourceDescriptions.default.getPermission + parameters: + - name: permissionId + in: path + value: prms_fe07c8a7-a4ca-4eda-97e5-e241040ef6f8 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-permissions + summary: Permissions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: permissions + operationId: $sourceDescriptions.default.getPermissions + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-system-time + summary: System time + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: system-time + operationId: $sourceDescriptions.default.getSystemTime + successCriteria: + - condition: $statusCode == 200 + + - workflowId: accept-friend-request-not-found + summary: acceptFriendRequest refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: accept-friend-request + operationId: $sourceDescriptions.default.acceptFriendRequest + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: accept-friend-request-unauthenticated + summary: acceptFriendRequest refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: accept-friend-request + operationId: $sourceDescriptions.default.acceptFriendRequest + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: acknowledge-notification-v2-not-found + summary: acknowledgeNotificationV2 refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: acknowledge-notification-v2 + operationId: $sourceDescriptions.default.acknowledgeNotificationV2 + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: acknowledge-notification-v2-unauthenticated + summary: acknowledgeNotificationV2 refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: acknowledge-notification-v2 + operationId: $sourceDescriptions.default.acknowledgeNotificationV2 + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: clear-notifications-unauthenticated + summary: clearNotifications refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: clear-notifications + operationId: $sourceDescriptions.default.clearNotifications + successCriteria: + - condition: $statusCode == 401 + + - workflowId: notification-lifecycle + summary: Invite the account to its own instance, then read, see and delete the + notification + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: create-instance + operationId: $sourceDescriptions.default.createInstance + requestBody: + contentType: application/json + payload: + worldId: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + type: private + region: use + ownerId: $workflows.session.outputs.userId + canRequestInvite: true + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + instanceId: $response.body#/instanceId + + - stepId: invite-self + operationId: $sourceDescriptions.default.inviteMyselfTo + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + - name: instanceId + in: path + value: $steps.create-instance.outputs.instanceId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id != null + onFailure: + - name: stop + type: end + + outputs: + notificationId: $response.body#/id + + - stepId: notification + operationId: $sourceDescriptions.default.getNotificationV2 + parameters: + - name: notificationId + in: path + value: $steps.invite-self.outputs.notificationId + successCriteria: + - condition: $statusCode == 403 + + - stepId: get-notification + operationId: $sourceDescriptions.default.getNotification + parameters: + - name: notificationId + in: path + value: $steps.invite-self.outputs.notificationId + successCriteria: + - condition: $statusCode == 200 + + - stepId: mark-read + operationId: $sourceDescriptions.default.markNotificationAsRead + parameters: + - name: notificationId + in: path + value: $steps.invite-self.outputs.notificationId + successCriteria: + - condition: $statusCode == 200 + + - stepId: respond-invite + operationId: $sourceDescriptions.default.respondInvite + parameters: + - name: notificationId + in: path + value: $steps.invite-self.outputs.notificationId + requestBody: + contentType: application/json + payload: + responseSlot: 0 + successCriteria: + - condition: $statusCode == 400 + + - stepId: hide-notification + operationId: $sourceDescriptions.default.deleteNotification + parameters: + - name: notificationId + in: path + value: $steps.invite-self.outputs.notificationId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: delete-all-notification-v2s-unauthenticated + summary: deleteAllNotificationV2s refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-all-notification-v2s + operationId: $sourceDescriptions.default.deleteAllNotificationV2s + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-notification-unauthenticated + summary: deleteNotification refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-notification + operationId: $sourceDescriptions.default.deleteNotification + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-notification-v2-not-found + summary: deleteNotificationV2 refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-notification-v2 + operationId: $sourceDescriptions.default.deleteNotificationV2 + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-notification-v2-unauthenticated + summary: deleteNotificationV2 refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-notification-v2 + operationId: $sourceDescriptions.default.deleteNotificationV2 + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-notification-not-found + summary: getNotification refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-notification + operationId: $sourceDescriptions.default.getNotification + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-notification-unauthenticated + summary: getNotification refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-notification + operationId: $sourceDescriptions.default.getNotification + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-notification-v2-not-found + summary: getNotificationV2 refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-notification-v2 + operationId: $sourceDescriptions.default.getNotificationV2 + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-notification-v2-unauthenticated + summary: getNotificationV2 refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-notification-v2 + operationId: $sourceDescriptions.default.getNotificationV2 + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-notification-v2s + summary: Notifications v2 + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: notifications-v2 + operationId: $sourceDescriptions.default.getNotificationV2s + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-notification-v2s-query-parameters + summary: getNotificationV2s with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-notification-v2s + operationId: $sourceDescriptions.default.getNotificationV2s + parameters: + - name: limit + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-notification-v2s-unauthenticated + summary: getNotificationV2s refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-notification-v2s + operationId: $sourceDescriptions.default.getNotificationV2s + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-notifications + summary: Notification list + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: notifications + operationId: $sourceDescriptions.default.getNotifications + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-notifications-query-parameters + summary: getNotifications with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-notifications + operationId: $sourceDescriptions.default.getNotifications + parameters: + - name: hidden + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: sent + in: query + value: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-notifications-unauthenticated + summary: getNotifications refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-notifications + operationId: $sourceDescriptions.default.getNotifications + successCriteria: + - condition: $statusCode == 401 + + - workflowId: mark-notification-as-read-unauthenticated + summary: markNotificationAsRead refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: mark-notification-as-read + operationId: $sourceDescriptions.default.markNotificationAsRead + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: reply-notification-v2-not-found + summary: replyNotificationV2 refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: reply-notification-v2 + operationId: $sourceDescriptions.default.replyNotificationV2 + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: reply-notification-v2-unauthenticated + summary: replyNotificationV2 refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: reply-notification-v2 + operationId: $sourceDescriptions.default.replyNotificationV2 + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: respond-notification-v2-not-found + summary: respondNotificationV2 refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: respond-notification-v2 + operationId: $sourceDescriptions.default.respondNotificationV2 + parameters: + - name: notificationId + in: path + value: not_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + requestBody: + contentType: application/json + payload: + responseType: conformance + successCriteria: + - condition: $statusCode == 404 + + - workflowId: respond-notification-v2-unauthenticated + summary: respondNotificationV2 refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: respond-notification-v2 + operationId: $sourceDescriptions.default.respondNotificationV2 + parameters: + - name: notificationId + in: path + value: not_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: clear-all-player-moderations-unauthenticated + summary: clearAllPlayerModerations refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: clear-all-player-moderations + operationId: $sourceDescriptions.default.clearAllPlayerModerations + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-player-moderations-unauthenticated + summary: getPlayerModerations refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-player-moderations + operationId: $sourceDescriptions.default.getPlayerModerations + successCriteria: + - condition: $statusCode == 401 + - workflowId: player-moderation-lifecycle + summary: Creates then clears real player moderations + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: player-moderations + operationId: $sourceDescriptions.default.getPlayerModerations + successCriteria: + - condition: $statusCode == 200 + + - stepId: moderate-user + operationId: $sourceDescriptions.default.moderateUser + requestBody: + contentType: application/json + payload: + moderated: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 + type: unmute + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/targetUserId == + 'usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469' + + - stepId: player-moderations-filtered + operationId: $sourceDescriptions.default.getPlayerModerations + parameters: + - name: type + in: query + value: unmute + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/targetUserId == + 'usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469' + - condition: $response.body#/0/type == 'unmute' + + - stepId: clear-player-moderations + operationId: $sourceDescriptions.default.clearAllPlayerModerations + successCriteria: + - condition: $statusCode == 200 + + - workflowId: moderate-user-unauthenticated + summary: moderateUser refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: moderate-user + operationId: $sourceDescriptions.default.moderateUser + successCriteria: + - condition: $statusCode == 401 + + - workflowId: unmoderate-user-unauthenticated + summary: unmoderateUser refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: unmoderate-user + operationId: $sourceDescriptions.default.unmoderateUser + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-print-unauthenticated + summary: deletePrint refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-print + operationId: $sourceDescriptions.default.deletePrint + parameters: + - name: printId + in: path + value: prnt_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: edit-print-unauthenticated + summary: editPrint refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: edit-print + operationId: $sourceDescriptions.default.editPrint + parameters: + - name: printId + in: path + value: prnt_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-print-unauthenticated + summary: getPrint refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-print + operationId: $sourceDescriptions.default.getPrint + parameters: + - name: printId + in: path + value: prnt_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-prints + summary: User prints + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-prints + operationId: $sourceDescriptions.default.getUserPrints + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-prints-unauthenticated + summary: getUserPrints refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-prints + operationId: $sourceDescriptions.default.getUserPrints + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: upload-print-unauthenticated + summary: uploadPrint refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: upload-print + operationId: $sourceDescriptions.default.uploadPrint + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-prop-not-found + summary: deleteProp refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-prop + operationId: $sourceDescriptions.default.deleteProp + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-prop-unauthenticated + summary: deleteProp refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-prop + operationId: $sourceDescriptions.default.deleteProp + parameters: + - name: propId + in: path + value: prop_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-prop-not-found + summary: getProp refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-prop + operationId: $sourceDescriptions.default.getProp + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-prop-unauthenticated + summary: getProp refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-prop + operationId: $sourceDescriptions.default.getProp + parameters: + - name: propId + in: path + value: prop_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-prop-publish-status-not-found + summary: getPropPublishStatus refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-prop-publish-status + operationId: $sourceDescriptions.default.getPropPublishStatus + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: list-props + summary: Props + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: props + operationId: $sourceDescriptions.default.listProps + successCriteria: + - condition: $statusCode == 200 || $statusCode == 403 + + - workflowId: list-props-query-parameters + summary: listProps with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: list-props + operationId: $sourceDescriptions.default.listProps + parameters: + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: list-props-unauthenticated + summary: listProps refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: list-props + operationId: $sourceDescriptions.default.listProps + parameters: + - name: authorId + in: query + value: id_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: publish-prop-not-found + summary: publishProp refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: publish-prop + operationId: $sourceDescriptions.default.publishProp + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: unpublish-prop-not-found + summary: unpublishProp refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: unpublish-prop + operationId: $sourceDescriptions.default.unpublishProp + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: update-prop-not-found + summary: updateProp refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-prop + operationId: $sourceDescriptions.default.updateProp + parameters: + - name: propId + in: path + value: prop_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + + - workflowId: add-tags + summary: Tag changes on another user are rejected + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-tag-other-user + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.addTags + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + requestBody: + contentType: application/json + payload: + tags: + - language_kor + successCriteria: + - condition: $statusCode == 401 || $statusCode == 403 || $statusCode == 404 + + - workflowId: add-tags-unauthenticated + summary: addTags refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-tags + operationId: $sourceDescriptions.default.addTags + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: check-user-persistence-exists-not-found + summary: checkUserPersistenceExists refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: check-user-persistence-exists + operationId: $sourceDescriptions.default.checkUserPersistenceExists + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: check-user-persistence-exists-unauthenticated + summary: checkUserPersistenceExists refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: check-user-persistence-exists + operationId: $sourceDescriptions.default.checkUserPersistenceExists + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-all-user-persistence-data-unauthenticated + summary: deleteAllUserPersistenceData refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-all-user-persistence-data + operationId: $sourceDescriptions.default.deleteAllUserPersistenceData + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-user-persistence-not-found + summary: deleteUserPersistence refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-user-persistence + operationId: $sourceDescriptions.default.deleteUserPersistence + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: delete-user-persistence-unauthenticated + summary: deleteUserPersistence refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-user-persistence + operationId: $sourceDescriptions.default.deleteUserPersistence + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-blocked-groups + summary: Blocked groups + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: blocked-groups + operationId: $sourceDescriptions.default.getBlockedGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-blocked-groups-unauthenticated + summary: getBlockedGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-blocked-groups + operationId: $sourceDescriptions.default.getBlockedGroups + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: profile-update-restore + summary: Update the writable profile fields, confirm they applied, restore them + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: marker + operationId: $sourceDescriptions.local.execute + requestBody: + contentType: application/json + payload: + command: sh + args: + - -c + - openssl rand -hex 6 | tr -d '\n' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/exitCode == 0 + onFailure: + - name: stop + type: end + + outputs: + value: $response.body#/stdout + + - stepId: current-before + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 200 + onFailure: + - name: stop + type: end + + outputs: + bioLinks: $response.body#/bioLinks + pronouns: $response.body#/pronouns + status: $response.body#/status + statusDescription: $response.body#/statusDescription + isBoopingEnabled: $response.body#/isBoopingEnabled + unsubscribe: $response.body#/unsubscribe + + - stepId: update-profile + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + bio: $steps.marker.outputs.value + statusDescription: $steps.marker.outputs.value + pronouns: they/them + status: active + bioLinks: $steps.current-before.outputs.bioLinks + isBoopingEnabled: $steps.current-before.outputs.isBoopingEnabled + unsubscribe: $steps.current-before.outputs.unsubscribe + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/bio == $steps.marker.outputs.value + - condition: $response.body#/statusDescription == $steps.marker.outputs.value + - condition: $response.body#/pronouns == 'they/them' + - condition: $response.body#/status == 'active' + + - stepId: verify-current-user + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getCurrentUser + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/bio == $steps.marker.outputs.value + + - stepId: verify-get-user + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/bio == $steps.marker.outputs.value + + - stepId: restore-profile + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + bio: "" + statusDescription: $steps.current-before.outputs.statusDescription + pronouns: $steps.current-before.outputs.pronouns + status: $steps.current-before.outputs.status + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/bio == '' + - condition: $response.body#/pronouns == $steps.current-before.outputs.pronouns + - condition: $response.body#/status == $steps.current-before.outputs.status + + - stepId: verify-restored + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/bio == '' + + - workflowId: get-invited-groups + summary: Invited groups + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: invited-groups + operationId: $sourceDescriptions.default.getInvitedGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-invited-groups-unauthenticated + summary: getInvitedGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-invited-groups + operationId: $sourceDescriptions.default.getInvitedGroups + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-mutual-friends + summary: Mutual friends + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: mutual-friends + operationId: $sourceDescriptions.default.getMutualFriends + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-mutual-friends-query-parameters + summary: getMutualFriends with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-mutual-friends + operationId: $sourceDescriptions.default.getMutualFriends + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-mutual-friends-unauthenticated + summary: getMutualFriends refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-mutual-friends + operationId: $sourceDescriptions.default.getMutualFriends + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-mutual-groups + summary: Mutual groups + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: mutual-groups + operationId: $sourceDescriptions.default.getMutualGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-mutual-groups-query-parameters + summary: getMutualGroups with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-mutual-groups + operationId: $sourceDescriptions.default.getMutualGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-mutual-groups-unauthenticated + summary: getMutualGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-mutual-groups + operationId: $sourceDescriptions.default.getMutualGroups + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-mutuals + summary: Mutuals + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: mutuals + operationId: $sourceDescriptions.default.getMutuals + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-mutuals-unauthenticated + summary: getMutuals refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-mutuals + operationId: $sourceDescriptions.default.getMutuals + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-private-profile + summary: Private profile + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: private-profile + operationId: $sourceDescriptions.default.getPrivateProfile + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-private-profile-unauthenticated + summary: getPrivateProfile refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-private-profile + operationId: $sourceDescriptions.default.getPrivateProfile + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-public-profile + summary: Public profile + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: public-profile + operationId: $sourceDescriptions.default.getPublicProfile + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-public-profile-unauthenticated + summary: getPublicProfile refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-public-profile + operationId: $sourceDescriptions.default.getPublicProfile + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user + summary: Get user + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-user + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id == 'usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469' + + - workflowId: get-user-not-found + summary: getUser refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-user + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-user-own + summary: Get own user + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-own-user + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id == $workflows.session.outputs.userId + + - workflowId: get-user-unauthenticated + summary: getUser refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-unknown + summary: Update unknown user + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-unknown-user + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: user-tag-round-trip + summary: Add a profile tag, confirm it applied, remove it, confirm it is gone + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: verify-absent-first + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - context: $response.body#/tags + condition: ^(?!.*language_kor).*$ + type: regex + onFailure: + - name: stop + type: end + + - stepId: add-tag + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.addTags + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + tags: + - language_kor + successCriteria: + - condition: $statusCode == 200 + - context: $response.body#/tags + condition: language_kor + type: regex + + - stepId: verify-applied + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - context: $response.body#/tags + condition: language_kor + type: regex + + - stepId: restore + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.removeTags + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + requestBody: + contentType: application/json + payload: + tags: + - language_kor + successCriteria: + - condition: $statusCode == 200 + + - stepId: verify-restored + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.getUser + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - context: $response.body#/tags + condition: ^(?!.*language_kor).*$ + type: regex + + - workflowId: get-user-all-group-permissions + summary: Group permissions + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: group-permissions + operationId: $sourceDescriptions.default.getUserAllGroupPermissions + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-all-group-permissions-unauthenticated + summary: getUserAllGroupPermissions refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-all-group-permissions + operationId: $sourceDescriptions.default.getUserAllGroupPermissions + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-by-name + summary: User by name + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-by-name + operationId: $sourceDescriptions.default.getUserByName + parameters: + - name: username + in: path + value: $workflows.session.outputs.displayName + successCriteria: + - condition: $statusCode == 403 + + - workflowId: get-user-by-name-unauthenticated + summary: getUserByName refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-by-name + operationId: $sourceDescriptions.default.getUserByName + parameters: + - name: username + in: path + value: conformance + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-feedback + summary: User feedback + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-feedback + operationId: $sourceDescriptions.default.getUserFeedback + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + - name: n + in: query + value: 100 + - name: offset + in: query + value: 0 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-feedback-unauthenticated + summary: getUserFeedback refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-feedback + operationId: $sourceDescriptions.default.getUserFeedback + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-group-instances + summary: Group instances + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: group-instances + operationId: $sourceDescriptions.default.getUserGroupInstances + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-group-instances-unauthenticated + summary: getUserGroupInstances refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-group-instances + operationId: $sourceDescriptions.default.getUserGroupInstances + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-group-instances-for-group-unauthenticated + summary: getUserGroupInstancesForGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-group-instances-for-group + operationId: $sourceDescriptions.default.getUserGroupInstancesForGroup + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: groupId + in: path + value: grp_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-group-requests + summary: Group requests + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: group-requests + operationId: $sourceDescriptions.default.getUserGroupRequests + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-group-requests-unauthenticated + summary: getUserGroupRequests refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-group-requests + operationId: $sourceDescriptions.default.getUserGroupRequests + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-groups + summary: User groups + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-groups-unauthenticated + summary: getUserGroups refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: group-cancel-request + summary: Cancelling a join request we never made + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: cancel-request + operationId: $sourceDescriptions.default.cancelGroupRequest + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 400 + + - workflowId: group-owner-cannot-leave + summary: The owner is refused when leaving their own group + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/ownerId == $workflows.session.outputs.userId + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: leave + operationId: $sourceDescriptions.default.leaveGroup + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + successCriteria: + - condition: $statusCode == 403 + + - workflowId: group-representation + summary: Represent the group, then stop representing it + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: own-groups + operationId: $sourceDescriptions.default.getUserGroups + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/0/groupId != null + onFailure: + - name: stop + type: end + + outputs: + groupId: $response.body#/0/groupId + + - stepId: represent + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + isRepresenting: true + successCriteria: + - condition: $statusCode == 200 + + - stepId: represented-group + operationId: $sourceDescriptions.default.getUserRepresentedGroup + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/isRepresenting == true + + - stepId: public-profile + operationId: $sourceDescriptions.default.getPublicProfile + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - stepId: stop-representing + operationId: $sourceDescriptions.default.updateGroupRepresentation + parameters: + - name: groupId + in: path + value: $steps.own-groups.outputs.groupId + requestBody: + contentType: application/json + payload: + isRepresenting: false + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-note-unauthenticated + summary: getUserNote refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-note + operationId: $sourceDescriptions.default.getUserNote + parameters: + - name: userNoteId + in: path + value: unot_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-notes + summary: User notes + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: user-notes + operationId: $sourceDescriptions.default.getUserNotes + parameters: + - name: n + in: query + value: 100 + - name: offset + in: query + value: 0 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-notes-unauthenticated + summary: getUserNotes refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-notes + operationId: $sourceDescriptions.default.getUserNotes + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-represented-group + summary: Represented group + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: represented-group + operationId: $sourceDescriptions.default.getUserRepresentedGroup + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-represented-group-unauthenticated + summary: getUserRepresentedGroup refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-represented-group + operationId: $sourceDescriptions.default.getUserRepresentedGroup + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-user-tutorial-status + summary: Tutorial status + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: tutorial-status + operationId: $sourceDescriptions.default.getUserTutorialStatus + parameters: + - name: userId + in: path + value: $workflows.session.outputs.userId + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-user-tutorial-status-unauthenticated + summary: getUserTutorialStatus refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-user-tutorial-status + operationId: $sourceDescriptions.default.getUserTutorialStatus + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: remove-tags-unauthenticated + summary: removeTags refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: remove-tags + operationId: $sourceDescriptions.default.removeTags + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: search-active-users + summary: Active user search is withdrawn + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-active-users + operationId: $sourceDescriptions.default.searchActiveUsers + parameters: + - name: search + in: query + value: conformance + successCriteria: + - condition: $statusCode == 404 + + - workflowId: search-users + summary: Search users + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-users + operationId: $sourceDescriptions.default.searchUsers + parameters: + - name: search + in: query + value: tupper + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-users-no-parameters + summary: Search no parameters + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-no-parameters + operationId: $sourceDescriptions.default.searchUsers + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-users-query-parameters + summary: searchUsers with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-users + operationId: $sourceDescriptions.default.searchUsers + parameters: + - name: isInternalVariant + in: query + value: false + - name: offset + in: query + value: 1 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-users-unauthenticated + summary: searchUsers refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-users + operationId: $sourceDescriptions.default.searchUsers + successCriteria: + - condition: $statusCode == 401 + + - workflowId: search-users-with-limit + summary: Search with limit + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-with-limit + operationId: $sourceDescriptions.default.searchUsers + parameters: + - name: search + in: query + value: a + - name: n + in: query + value: 5 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: update-badge-not-found + summary: updateBadge refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-badge + operationId: $sourceDescriptions.default.updateBadge + parameters: + - name: userId + in: path + value: usr_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: badgeId + in: path + value: id_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 403 + + - workflowId: update-badge-unauthenticated + summary: updateBadge refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-badge + operationId: $sourceDescriptions.default.updateBadge + parameters: + - name: userId + in: path + value: usr_00000000-0000-0000-0000-000000000000 + - name: badgeId + in: path + value: bdg_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-user + summary: Update other user + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-other-user + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + operationId: $sourceDescriptions.default.updateUser + parameters: + - name: userId + in: path + value: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 + requestBody: + contentType: application/json + payload: + bio: should-be-rejected + successCriteria: + - condition: $statusCode == 401 || $statusCode == 403 + + - workflowId: update-user-note-unauthenticated + summary: updateUserNote refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-user-note + operationId: $sourceDescriptions.default.updateUserNote + successCriteria: + - condition: $statusCode == 401 + - workflowId: user-note-lifecycle + summary: Writes a note against another user, then reads it back by id + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-note + operationId: $sourceDescriptions.default.updateUserNote + requestBody: + contentType: application/json + payload: + targetUserId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 + note: system_haha_we_actually_ended_up_documenting_this_one_too + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/targetUserId == + 'usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469' + onFailure: + - name: stop + type: end + + outputs: + userNoteId: $response.body#/id + + - stepId: get-note + operationId: $sourceDescriptions.default.getUserNote + parameters: + - name: userNoteId + in: path + value: $steps.update-note.outputs.userNoteId + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/targetUserId == + 'usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469' + + - workflowId: add-world-tags-unauthenticated + summary: addWorldTags refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: add-world-tags + operationId: $sourceDescriptions.default.addWorldTags + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: create-world-unauthenticated + summary: createWorld refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: create-world + operationId: $sourceDescriptions.default.createWorld + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-world-not-found + summary: deleteWorld refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-world + operationId: $sourceDescriptions.default.deleteWorld + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 200 + + - workflowId: delete-world-unauthenticated + summary: deleteWorld refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-world + operationId: $sourceDescriptions.default.deleteWorld + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: delete-world-platform-not-found + summary: deleteWorldPlatform refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: delete-world-platform + operationId: $sourceDescriptions.default.deleteWorldPlatform + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + - name: publishedPlatform + in: path + value: standalonewindows + successCriteria: + - condition: $statusCode == 404 + + - workflowId: delete-world-platform-unauthenticated + summary: deleteWorldPlatform refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: delete-world-platform + operationId: $sourceDescriptions.default.deleteWorldPlatform + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + - name: publishedPlatform + in: path + value: standalonewindows + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-active-worlds + summary: Active worlds + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: active-worlds + operationId: $sourceDescriptions.default.getActiveWorlds + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-active-worlds-query-parameters + summary: getActiveWorlds with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-active-worlds + operationId: $sourceDescriptions.default.getActiveWorlds + parameters: + - name: featured + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-active-worlds-unauthenticated + summary: getActiveWorlds refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-active-worlds + operationId: $sourceDescriptions.default.getActiveWorlds + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-favorited-worlds + summary: Favorited worlds + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: favorited-worlds + operationId: $sourceDescriptions.default.getFavoritedWorlds + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorited-worlds-query-parameters + summary: getFavoritedWorlds with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-favorited-worlds + operationId: $sourceDescriptions.default.getFavoritedWorlds + parameters: + - name: featured + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-favorited-worlds-unauthenticated + summary: getFavoritedWorlds refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-favorited-worlds + operationId: $sourceDescriptions.default.getFavoritedWorlds + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-recent-worlds + summary: Recent worlds + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: recent-worlds + operationId: $sourceDescriptions.default.getRecentWorlds + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-recent-worlds-query-parameters + summary: getRecentWorlds with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-recent-worlds + operationId: $sourceDescriptions.default.getRecentWorlds + parameters: + - name: featured + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-recent-worlds-unauthenticated + summary: getRecentWorlds refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-recent-worlds + operationId: $sourceDescriptions.default.getRecentWorlds + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-world-black-cat + summary: Black cat + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: black-cat + operationId: $sourceDescriptions.default.getWorld + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id == 'wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b' + - condition: $response.body#/storeId != null + + - workflowId: get-world-not-found + summary: getWorld refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-world + operationId: $sourceDescriptions.default.getWorld + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-world-vrchat-home + summary: Vrchat home + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: vrchat-home + operationId: $sourceDescriptions.default.getWorld + parameters: + - name: worldId + in: path + value: wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body#/id == 'wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd' + + - workflowId: get-world-instance-unauthenticated + summary: getWorldInstance refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-world-instance + operationId: $sourceDescriptions.default.getWorldInstance + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + - name: instanceId + in: path + value: 0 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: get-world-metadata + summary: World metadata + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: world-metadata + operationId: $sourceDescriptions.default.getWorldMetadata + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-world-metadata-not-found + summary: getWorldMetadata refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: get-world-metadata + operationId: $sourceDescriptions.default.getWorldMetadata + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: get-world-publish-status + summary: World publish status + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: world-publish-status + operationId: $sourceDescriptions.default.getWorldPublishStatus + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + successCriteria: + - condition: $statusCode == 200 + + - workflowId: get-world-publish-status-unauthenticated + summary: getWorldPublishStatus refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: get-world-publish-status + operationId: $sourceDescriptions.default.getWorldPublishStatus + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: publish-world-not-found + summary: publishWorld refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: publish-world + operationId: $sourceDescriptions.default.publishWorld + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: publish-world-unauthenticated + summary: publishWorld refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: publish-world + operationId: $sourceDescriptions.default.publishWorld + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: remove-world-tags + summary: Removing tags from a world we do not own is refused + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: remove-tags + operationId: $sourceDescriptions.default.removeWorldTags + parameters: + - name: worldId + in: path + value: wrld_4cf554b4-430c-4f8f-b53e-1f294eed230b + requestBody: + contentType: application/json + payload: + tags: + - author_tag_conformance + successCriteria: + - condition: $statusCode == 403 + + - workflowId: search-worlds + summary: Search worlds + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-worlds + operationId: $sourceDescriptions.default.searchWorlds + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-worlds-query-parameters + summary: searchWorlds with every fillable query parameter + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: search-worlds + operationId: $sourceDescriptions.default.searchWorlds + parameters: + - name: avatarSpecific + in: query + value: false + - name: featured + in: query + value: false + - name: fuzzy + in: query + value: false + - name: n + in: query + value: 1 + - name: offset + in: query + value: 1 + - name: order + in: query + value: ascending + - name: releaseStatus + in: query + value: public + - name: sort + in: query + value: _created_at + - name: user + in: query + value: me + successCriteria: + - condition: $statusCode == 200 + + - workflowId: search-worlds-unauthenticated + summary: searchWorlds refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: search-worlds + operationId: $sourceDescriptions.default.searchWorlds + successCriteria: + - condition: $statusCode == 401 + + - workflowId: unpublish-world-not-found + summary: unpublishWorld refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: unpublish-world + operationId: $sourceDescriptions.default.unpublishWorld + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 404 + + - workflowId: unpublish-world-unauthenticated + summary: unpublishWorld refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: unpublish-world + operationId: $sourceDescriptions.default.unpublishWorld + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 + + - workflowId: update-world-not-found + summary: updateWorld refuses a resource that does not exist + parameters: + - reference: $components.parameters.userAgent + x-security: + - schemeName: authCookie + values: + apiKey: $workflows.session.outputs.sessionToken + steps: + - stepId: update-world + operationId: $sourceDescriptions.default.updateWorld + parameters: + - name: worldId + in: path + value: wrld_3f2a9c14-8d7b-4e05-a6c3-1b9e5d0f7a82 + successCriteria: + - condition: $statusCode == 400 + + - workflowId: update-world-unauthenticated + summary: updateWorld refuses an anonymous caller + parameters: + - reference: $components.parameters.userAgent + steps: + - stepId: update-world + operationId: $sourceDescriptions.default.updateWorld + parameters: + - name: worldId + in: path + value: wrld_00000000-0000-0000-0000-000000000000 + successCriteria: + - condition: $statusCode == 401 diff --git a/test/run.sh b/test/run.sh new file mode 100755 index 00000000..8c6c5a7c --- /dev/null +++ b/test/run.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# Drives the suite against the live API. Captures land in .out/har/, which +# `coverage` and `drift` read as a folder. +# +# `schema check` stays a warning: it is the standing backlog of fields the +# description gets wrong, and erroring on it would leave the suite always red. +set -eu + +cd "$(dirname "$0")/.." + +# Braces in the value break `${VAR:=default}`. +if [ -z "${TEST_SEVERITY:-}" ]; then + TEST_SEVERITY='{"SCHEMA_CHECK":"warn"}' +fi + +if [ -f test/.env ]; then + set -a + . ./test/.env + set +a +fi + +# An empty input is worse than a missing one: respect sends the literal +# `{userId}` in the path. +: "${VRCHAT_FRIEND_ID:?unset — see test/.env.example}" +: "${VRCHAT_EMAIL:?unset — see test/.env.example}" + +mkdir -p test/.out/har + +# Fixed port, because `sourceDescriptions` takes no expressions. +httpexec --port 65482 & +httpexec_pid=$! + +# Only EXIT kills the server, so it happens once. INT and TERM exit, which +# fires EXIT; killing there would leave the script running against a dead one. +trap 'kill "$httpexec_pid" 2>/dev/null' EXIT +trap 'exit 130' INT +trap 'exit 143' TERM + +# Bind is not instant, and respect fetches the description before step one. +curl -sf --retry 20 --retry-delay 1 --retry-connrefused -o /dev/null \ + http://127.0.0.1:65482/openapi.json + +# respect rejects `--skip` alongside `--workflow`, so naming a workflow drops +# the skips. Only what you name runs: `pnpm test -w session -w get-current-user`. +# A partial run writes its capture elsewhere, so it cannot overwrite the one +# `coverage` and `drift` read as a whole-suite record. +skips='--skip logout --skip invite-message-lifecycle --skip group-lifecycle --skip group-calendar-lifecycle' +capture=test/.out/har/arazzo.har +for argument do + case $argument in + -w | --workflow) skips=''; capture=test/.out/partial.har ;; + esac +done + +# `login` caches a session under .out/ and `session` reads it back. Skipping it +# while the cache is warm keeps repeated runs off the login rate limit. Delete +# test/.out/session to force a fresh login. +if [ ! -s test/.out/session ]; then + : "${VRCHAT_PASSWORD:?unset — see test/.env.example}" + : "${VRCHAT_TOTP_SECRET:?unset — see test/.env.example}" + + set -- \ + --input password="$VRCHAT_PASSWORD" \ + --input totpSecret="$VRCHAT_TOTP_SECRET" \ + "$@" +elif [ -n "$skips" ]; then + set -- --skip login "$@" +fi + +# `logout` kills the session, `invite-message-lifecycle` locks a slot for half +# an hour, and the two group lifecycles create a group, which is rate limited +# for hours. Run those deliberately: `pnpm test -w group-lifecycle`. +redocly respect test/arazzo.yaml \ + ${skips} \ + --har-output "$capture" \ + --input friendId="$VRCHAT_FRIEND_ID" \ + --input username="${VRCHAT_USERNAME:-$VRCHAT_EMAIL}" \ + --input email="$VRCHAT_EMAIL" \ + --severity "$TEST_SEVERITY" \ + "$@"